Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Postgres 11 compatibility issue in PostgresTypes class - similar to #657 #670

Open
mpyszka opened this issue Oct 29, 2024 · 0 comments
Open
Labels
type: bug A general bug

Comments

@mpyszka
Copy link

mpyszka commented Oct 29, 2024

Issue #657 was introduced in 1.0.5 version and fixed in 1.0.6 version.
There is another similar one still existing. It's in PostgresTypes class which is used to check the registered types. We use enum type and in such case we're getting similar exception: Column name 'oid' does not exist in column names...
The prospective fix is probably to include oid column explicitly in all sql queries used in this module.

Here is the stacktrace:

Caused by: java.util.NoSuchElementException: Column name 'oid' does not exist in column names [typname, typnamespace, typowner, typlen, typbyval, typtype, typcategory, typispreferred, typisdefined, typdelim, typrelid, typelem, typarray, typinput, typoutput, typreceive, typsend, typmodin, typmodout, typanalyze, typalign, typstorage, typnotnull, typbasetype, typtypmod, typndims, typcollation, typdefaultbin, typdefault, typacl]
	at io.r2dbc.postgresql.PostgresqlRow.getColumn(PostgresqlRow.java:208) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Assembly trace from producer [reactor.core.publisher.FluxHandleFuseable] :
	reactor.core.publisher.Flux.handle
	io.r2dbc.postgresql.PostgresqlResult.map(PostgresqlResult.java:113)
Error has been observed at the following site(s):
	*_________Flux.handle ⇢ at io.r2dbc.postgresql.PostgresqlResult.map(PostgresqlResult.java:113)
	*________Flux.flatMap ⇢ at io.r2dbc.postgresql.codec.PostgresTypes.lookupTypes(PostgresTypes.java:104)
	|_        Flux.filter ⇢ at io.r2dbc.postgresql.codec.EnumCodec$Builder.lambda$build$3(EnumCodec.java:223)
	|_      Flux.doOnNext ⇢ at io.r2dbc.postgresql.codec.EnumCodec$Builder.lambda$build$3(EnumCodec.java:224)
	|_  Flux.doOnComplete ⇢ at io.r2dbc.postgresql.codec.EnumCodec$Builder.lambda$build$3(EnumCodec.java:250)
	|_          Flux.then ⇢ at io.r2dbc.postgresql.codec.EnumCodec$Builder.lambda$build$3(EnumCodec.java:255)
	*_________Flux.concat ⇢ at io.r2dbc.postgresql.PostgresqlConnectionFactory.prepareConnection(PostgresqlConnectionFactory.java:175)
	|_          Flux.then ⇢ at io.r2dbc.postgresql.PostgresqlConnectionFactory.prepareConnection(PostgresqlConnectionFactory.java:175)
	*_____Mono.delayUntil ⇢ at io.r2dbc.postgresql.PostgresqlConnectionFactory.lambda$doCreateConnection$6(PostgresqlConnectionFactory.java:149)
	|_ Mono.onErrorResume ⇢ at io.r2dbc.postgresql.PostgresqlConnectionFactory.lambda$doCreateConnection$6(PostgresqlConnectionFactory.java:152)
	*___________Mono.then ⇢ at io.r2dbc.postgresql.PostgresqlConnectionFactory.closeWithError(PostgresqlConnectionFactory.java:179)
	|_                    ⇢ at io.r2dbc.postgresql.PostgresqlConnectionFactory.lambda$null$5(PostgresqlConnectionFactory.java:152)
	*________Mono.flatMap ⇢ at io.r2dbc.postgresql.PostgresqlConnectionFactory.doCreateConnection(PostgresqlConnectionFactory.java:132)
Original Stack Trace:
		at io.r2dbc.postgresql.PostgresqlRow.getColumn(PostgresqlRow.java:208) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
		at io.r2dbc.postgresql.PostgresqlRow.get(PostgresqlRow.java:96) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
		at io.r2dbc.postgresql.codec.PostgresTypes.createType(PostgresTypes.java:108) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
		at io.r2dbc.postgresql.PostgresqlResult.lambda$map$2(PostgresqlResult.java:129) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
		at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:179) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxWindowPredicate$WindowFlux.drainRegular(FluxWindowPredicate.java:670) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxWindowPredicate$WindowFlux.drain(FluxWindowPredicate.java:748) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxWindowPredicate$WindowFlux.onNext(FluxWindowPredicate.java:790) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxWindowPredicate$WindowPredicateMain.onNext(FluxWindowPredicate.java:268) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxContextWriteRestoringThreadLocals$ContextWriteRestoringThreadLocalsSubscriber.onNext(FluxContextWriteRestoringThreadLocals.java:118) ~[reactor-core-3.6.11.jar:3.6.11]
		at io.r2dbc.postgresql.util.FluxDiscardOnCancel$FluxDiscardOnCancelSubscriber.onNext(FluxDiscardOnCancel.java:91) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
		at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxContextWriteRestoringThreadLocals$ContextWriteRestoringThreadLocalsSubscriber.onNext(FluxContextWriteRestoringThreadLocals.java:118) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:880) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxCreate$BufferAsyncSink.next(FluxCreate.java:805) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxCreate$SerializedFluxSink.next(FluxCreate.java:163) ~[reactor-core-3.6.11.jar:3.6.11]
		at io.r2dbc.postgresql.client.ReactorNettyClient$Conversation.emit(ReactorNettyClient.java:696) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
		at io.r2dbc.postgresql.client.ReactorNettyClient$BackendMessageSubscriber.emit(ReactorNettyClient.java:948) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
		at io.r2dbc.postgresql.client.ReactorNettyClient$BackendMessageSubscriber.onNext(ReactorNettyClient.java:822) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
		at io.r2dbc.postgresql.client.ReactorNettyClient$BackendMessageSubscriber.onNext(ReactorNettyClient.java:728) ~[r2dbc-postgresql-1.0.7.RELEASE.jar:1.0.7.RELEASE]
		at reactor.core.publisher.FluxHandleFuseable$HandleFuseableSubscriber.onNext(FluxHandleFuseable.java:194) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxPeekFuseable$PeekFuseableConditionalSubscriber.onNext(FluxPeekFuseable.java:503) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxContextWriteRestoringThreadLocalsFuseable$FuseableContextWriteRestoringThreadLocalsSubscriber.onNext(FluxContextWriteRestoringThreadLocalsFuseable.java:119) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.core.publisher.FluxContextWriteRestoringThreadLocals$ContextWriteRestoringThreadLocalsSubscriber.onNext(FluxContextWriteRestoringThreadLocals.java:118) ~[reactor-core-3.6.11.jar:3.6.11]
		at reactor.netty.channel.FluxReceive.drainReceiver(FluxReceive.java:294) ~[reactor-netty-core-1.1.23.jar:1.1.23]
		at reactor.netty.channel.FluxReceive.onInboundNext(FluxReceive.java:403) ~[reactor-netty-core-1.1.23.jar:1.1.23]
		at reactor.netty.channel.ChannelOperations.onInboundNext(ChannelOperations.java:425) ~[reactor-netty-core-1.1.23.jar:1.1.23]
		at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:115) ~[reactor-netty-core-1.1.23.jar:1.1.23]
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) ~[netty-codec-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:333) ~[netty-codec-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:455) ~[netty-codec-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.114.Final.jar:4.1.114.Final]
		at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.114.Final.jar:4.1.114.Final]
		at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
@mpyszka mpyszka added the status: waiting-for-triage An issue we've not yet triaged label Oct 29, 2024
@mp911de mp911de added type: bug A general bug and removed status: waiting-for-triage An issue we've not yet triaged labels Oct 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug A general bug
Projects
None yet
Development

No branches or pull requests

2 participants