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

R2DBC implementation may hang when there's an exception in the rendering logic #13343

Closed
lukaseder opened this issue Mar 28, 2022 · 3 comments
Closed

Comments

@lukaseder
Copy link
Member

A test case added for #13341 attempts to fail whenever we call SelectQueryImpl.asTable(), which is slow (see #6714). I inserted an exception on every such call using instrumentation.

This exception is thrown in MULTISET tests, for example:

10:30:48,360 ERROR [reactor.netty.channel.ChannelOperationsHandler    ] - [7e6337e7, L:/127.0.0.1:55438 - R:localhost/127.0.0.1:5432] Error was received while reading the incoming data. The connection will be closed.
java.lang.UnsupportedOperationException: Avoid calling SelectQueryImpl.asTable()
	at org.jooq.impl.SelectQueryImpl.asTable(SelectQueryImpl.java) ~[classes/:?]
	at org.jooq.impl.SelectQueryImpl.fieldsRow(SelectQueryImpl.java:647) ~[classes/:?]
	at org.jooq.impl.SelectImpl.fieldsRow(SelectImpl.java:2936) ~[classes/:?]
	at org.jooq.impl.FieldsTrait.fields(FieldsTrait.java:57) ~[classes/:?]
	at org.jooq.impl.Multiset.xmlaggEmulation(Multiset.java:407) ~[classes/:?]
	at org.jooq.impl.Multiset.accept0(Multiset.java:287) ~[classes/:?]
	at org.jooq.impl.Multiset.lambda$1(Multiset.java:148) ~[classes/:?]
	at org.jooq.impl.AbstractContext.toggle(AbstractContext.java:343) ~[classes/:?]
	at org.jooq.impl.AbstractContext.data(AbstractContext.java:354) ~[classes/:?]
	at org.jooq.impl.Multiset.accept(Multiset.java:148) ~[classes/:?]
	at org.jooq.impl.DefaultRenderContext.visit0(DefaultRenderContext.java:735) ~[classes/:?]
	at org.jooq.impl.AbstractContext.visit(AbstractContext.java:251) ~[classes/:?]
	at org.jooq.impl.QueryPartCollectionView.acceptElement(QueryPartCollectionView.java:243) ~[classes/:?]
	at org.jooq.impl.SelectFieldList.acceptElement(SelectFieldList.java:86) ~[classes/:?]
	at org.jooq.impl.SelectFieldList.acceptElement(SelectFieldList.java:1) ~[classes/:?]
	at org.jooq.impl.QueryPartCollectionView.lambda$2(QueryPartCollectionView.java:217) ~[classes/:?]
	at org.jooq.impl.AbstractContext.toggle(AbstractContext.java:343) ~[classes/:?]
	at org.jooq.impl.AbstractContext.data(AbstractContext.java:354) ~[classes/:?]
	at org.jooq.impl.QueryPartCollectionView.accept(QueryPartCollectionView.java:214) ~[classes/:?]
	at org.jooq.impl.DefaultRenderContext.visit0(DefaultRenderContext.java:735) ~[classes/:?]
	at org.jooq.impl.AbstractContext.visit(AbstractContext.java:300) ~[classes/:?]
	at org.jooq.impl.SelectQueryImpl.toSQLReference0(SelectQueryImpl.java:2209) ~[classes/:?]
	at org.jooq.impl.SelectQueryImpl.lambda$33(SelectQueryImpl.java:1873) ~[classes/:?]
	at org.jooq.impl.AbstractContext.toggle(AbstractContext.java:343) ~[classes/:?]
	at org.jooq.impl.AbstractContext.data(AbstractContext.java:354) ~[classes/:?]
	at org.jooq.impl.SelectQueryImpl.toSQLReferenceLimitDefault(SelectQueryImpl.java:1873) ~[classes/:?]
	at org.jooq.impl.SelectQueryImpl.accept0(SelectQueryImpl.java:1787) ~[classes/:?]
	at org.jooq.impl.SelectQueryImpl.accept(SelectQueryImpl.java:1440) ~[classes/:?]
	at org.jooq.impl.DefaultRenderContext.visit0(DefaultRenderContext.java:735) ~[classes/:?]
	at org.jooq.impl.AbstractContext.visit(AbstractContext.java:300) ~[classes/:?]
	at org.jooq.impl.DefaultDSLContext.renderInlined(DefaultDSLContext.java:724) ~[classes/:?]
	at org.jooq.impl.AbstractQueryPart.toString(AbstractQueryPart.java:192) ~[classes/:?]
	at java.lang.String.valueOf(String.java:4215) ~[?:?]
	at java.lang.StringBuilder.append(StringBuilder.java:173) ~[?:?]
	at org.jooq.impl.R2DBC$QuerySubscription.sql(R2DBC.java:632) ~[classes/:?]
	at org.jooq.impl.R2DBC$ConnectionSubscriber.onError(R2DBC.java:369) ~[classes/:?]
	at org.jooq.impl.R2DBC$QueryExecutionSubscriber.onNext0(R2DBC.java:429) ~[classes/:?]
	at org.jooq.impl.R2DBC$ConnectionSubscriber.onNext(R2DBC.java:362) ~[classes/:?]
	at org.jooq.impl.R2DBC$AbstractNonBlockingSubscription.lambda$1(R2DBC.java:546) ~[classes/:?]
	at org.jooq.impl.Internal$1.onNext(Internal.java:454) ~[classes/:?]
	at org.jooq.test.setup.DatabaseSetup$1.lambda$2(DatabaseSetup.java:289) ~[classes/:?]
	at org.jooq.impl.Internal$1.onNext(Internal.java:454) ~[classes/:?]
	at reactor.core.publisher.StrictSubscriber.onNext(StrictSubscriber.java:89) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:120) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:249) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.MonoDelayUntil$DelayUntilCoordinator.complete(MonoDelayUntil.java:418) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.MonoDelayUntil$DelayUntilTrigger.onComplete(MonoDelayUntil.java:531) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:88) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxConcatIterable$ConcatIterableSubscriber.onComplete(FluxConcatIterable.java:121) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:88) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:608) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:588) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onComplete(FluxFlatMap.java:465) ~[reactor-core-3.4.7.jar:3.4.7]
	at io.r2dbc.postgresql.util.FluxDiscardOnCancel$FluxDiscardOnCancelSubscriber.onComplete(FluxDiscardOnCancel.java:104) ~[r2dbc-postgresql-0.9.0.RELEASE.jar:0.9.0.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onComplete(FluxMapFuseable.java:150) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxWindowPredicate$WindowPredicateMain.checkTerminated(FluxWindowPredicate.java:537) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxWindowPredicate$WindowPredicateMain.drainLoop(FluxWindowPredicate.java:485) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxWindowPredicate$WindowPredicateMain.drain(FluxWindowPredicate.java:429) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxWindowPredicate$WindowPredicateMain.onComplete(FluxWindowPredicate.java:309) ~[reactor-core-3.4.7.jar:3.4.7]
	at io.r2dbc.postgresql.util.FluxDiscardOnCancel$FluxDiscardOnCancelSubscriber.onComplete(FluxDiscardOnCancel.java:104) ~[r2dbc-postgresql-0.9.0.RELEASE.jar:0.9.0.RELEASE]
	at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxCreate$BaseSink.complete(FluxCreate.java:439) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxCreate$BufferAsyncSink.drain(FluxCreate.java:784) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxCreate$BufferAsyncSink.complete(FluxCreate.java:732) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxCreate$SerializedFluxSink.drainLoop(FluxCreate.java:240) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxCreate$SerializedFluxSink.drain(FluxCreate.java:206) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxCreate$SerializedFluxSink.complete(FluxCreate.java:197) ~[reactor-core-3.4.7.jar:3.4.7]
	at io.r2dbc.postgresql.client.ReactorNettyClient$Conversation.complete(ReactorNettyClient.java:601) ~[r2dbc-postgresql-0.9.0.RELEASE.jar:0.9.0.RELEASE]
	at io.r2dbc.postgresql.client.ReactorNettyClient$BackendMessageSubscriber.emit(ReactorNettyClient.java:866) ~[r2dbc-postgresql-0.9.0.RELEASE.jar:0.9.0.RELEASE]
	at io.r2dbc.postgresql.client.ReactorNettyClient$BackendMessageSubscriber.onNext(ReactorNettyClient.java:742) ~[r2dbc-postgresql-0.9.0.RELEASE.jar:0.9.0.RELEASE]
	at io.r2dbc.postgresql.client.ReactorNettyClient$BackendMessageSubscriber.onNext(ReactorNettyClient.java:649) ~[r2dbc-postgresql-0.9.0.RELEASE.jar:0.9.0.RELEASE]
	at reactor.core.publisher.FluxHandle$HandleSubscriber.onNext(FluxHandle.java:118) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onNext(FluxPeekFuseable.java:854) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:220) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:220) ~[reactor-core-3.4.7.jar:3.4.7]
	at reactor.netty.channel.FluxReceive.drainReceiver(FluxReceive.java:279) ~[reactor-netty-core-1.0.15.jar:1.0.15]
	at reactor.netty.channel.FluxReceive.onInboundNext(FluxReceive.java:388) ~[reactor-netty-core-1.0.15.jar:1.0.15]
	at reactor.netty.channel.ChannelOperations.onInboundNext(ChannelOperations.java:404) ~[reactor-netty-core-1.0.15.jar:1.0.15]
	at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:93) [reactor-netty-core-1.0.15.jar:1.0.15]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) [netty-codec-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) [netty-codec-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) [netty-transport-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) [netty-common-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.72.Final.jar:4.1.72.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.72.Final.jar:4.1.72.Final]
	at java.lang.Thread.run(Thread.java:833) [?:?]

The query causing this is:

            Flux.from(r2dbc(ctx)
                    .select(TAuthor_ID(), multiset(
                        select(TBook_ID(), TBook_TITLE())
                        .from(TBook())
                        .where(TBook_AUTHOR_ID().eq(TAuthor_ID()))
                        .orderBy(TBook_ID())
                    ))
                    .from(TAuthor())
                    .orderBy(TAuthor_ID()))
                .collectList()
                .block();

The exception itself is "OK" (should be fixed as of #13341), but the much bigger problem is that execution seems to hang. jstack shows this:

"main" #1 prio=5 os_prio=0 cpu=46187.50ms elapsed=454.10s tid=0x000001fc0a722d90 nid=0x1c90 waiting on condition  [0x0000004d656fd000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@17.0.2/Native Method)
        - parking to wait for  <0x000000060f400028> (a java.util.concurrent.CountDownLatch$Sync)
        at java.util.concurrent.locks.LockSupport.park(java.base@17.0.2/LockSupport.java:211)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@17.0.2/AbstractQueuedSynchronizer.java:715)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(java.base@17.0.2/AbstractQueuedSynchronizer.java:1047)
        at java.util.concurrent.CountDownLatch.await(java.base@17.0.2/CountDownLatch.java:230)
        at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:87)
        at reactor.core.publisher.Mono.block(Mono.java:1703)
        at org.jooq.test.all.testcases.R2DBCTests.lambda$49(R2DBCTests.java:870)
        at org.jooq.test.all.testcases.R2DBCTests$$Lambda$3812/0x00000008013e6748.accept(Unknown Source)
        at org.jooq.test.all.testcases.MultisetTests.lambda$383(MultisetTests.java:2497)
        at org.jooq.test.all.testcases.MultisetTests$$Lambda$3121/0x000000080128a4e8.accept(Unknown Source)
        at org.jooq.test.all.testcases.MultisetTests.lambda$386(MultisetTests.java:2515)
        at org.jooq.test.all.testcases.MultisetTests$$Lambda$935/0x000000080081c950.accept(Unknown Source)
        at org.jooq.test.all.testcases.MultisetTests.testRecordLevelListenerResults(MultisetTests.java:2553)
        at org.jooq.test.all.testcases.MultisetTests.testRecordLevelListenerResults(MultisetTests.java:2541)
        at org.jooq.test.all.testcases.MultisetTests.testMultisetEmulations(MultisetTests.java:2515)
        at org.jooq.test.all.testcases.MultisetTests.testMultisetEmulations(MultisetTests.java:2497)
        at org.jooq.test.all.testcases.R2DBCTests.lambda$55(R2DBCTests.java:879)
        at org.jooq.test.all.testcases.R2DBCTests$$Lambda$3813/0x00000008013e6968.run(Unknown Source)
        at org.jooq.test.util.BaseTest.assertThrowsIf(BaseTest.java:283)
        at org.jooq.test.util.BaseTest.assertThrowsIf(BaseTest.java:271)
        at org.jooq.test.BaseTest.assertThrowsUnlessSupportsCorrelatedDerivedTables(BaseTest.java:1351)
        at org.jooq.test.all.testcases.R2DBCTests.testR2DBCFetchMultiset(R2DBCTests.java:878)
        at org.jooq.test.jOOQAbstractTest.testR2DBCFetchMultiset(jOOQAbstractTest.java:2612)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@17.0.2/Native Method)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@17.0.2/NativeMethodAccessorImpl.java:77)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@17.0.2/DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(java.base@17.0.2/Method.java:568)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
        at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)
        at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)
        at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
        at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
        at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
        at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
        at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:93)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
@lukaseder
Copy link
Member Author

The problem can be reproduced like this:

    public void testR2DBCExceptionInJOOQ() throws Exception {
        StepVerifier
            .create(r2dbc().query("test {0}", CustomQueryPart.of(ctx -> { throw new X(); })))
            .expectError(X.class)
            .verify();
    }

This test hangs forever. Alternatively, use verify(duration) to time out on something that should be immediate.

@lukaseder
Copy link
Member Author

The problem seems to be in QuerySubscription::sql:

        @Override
        final String sql() {
            String result = queryExecutionSubscriber.sql;
            return result != null ? result : "" + queryExecutionSubscriber.query;
        }

That harmless looking "" + queryExecutionSubscriber.query generates another exception that prevents the onError signal from being propagated

@lukaseder lukaseder changed the title R2DBC implementation may hang when there's an exception in the rendering of MULTISET R2DBC implementation may hang when there's an exception in the rendering logic Jun 29, 2022
lukaseder added a commit that referenced this issue Jun 29, 2022
- In batches
- When there are rendering problems in jOOQ
- This includes: [#13343] R2DBC implementation may hang when there's an exception in the rendering logic
lukaseder added a commit that referenced this issue Jun 29, 2022
- In batches
- When there are rendering problems in jOOQ
- This includes: [#13343] R2DBC implementation may hang when
there's an exception in the rendering logic
lukaseder added a commit that referenced this issue Jun 29, 2022
- In batches
- When there are rendering problems in jOOQ
- This includes: [#13343] R2DBC implementation may hang when
there's an exception in the rendering logic
@lukaseder
Copy link
Member Author

Fixed along with #13669 in jOOQ 3.18.0, 3.17.2 (#13743), 3.16.8 (#13744), and 3.15.12 (#13745)

3.15 Reactive query execution automation moved this from To do to Done Jun 29, 2022
lukaseder added a commit that referenced this issue Jun 29, 2022
- In batches
- When there are rendering problems in jOOQ
- This includes: [#13343] R2DBC implementation may hang when
there's an exception in the rendering logic
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

1 participant