Skip to content

Commit 916c4f6

Browse files
Squirymp911de
authored andcommitted
Query never completes fix
The problem: when our receive buffer fills and conversation demand drops to zero and last item is `CommandComplete` we never request more frames and will never get `ReadyForQuery` Signed-off-by: Mark Paluch <[email protected]> [closes #401][#426]
1 parent bbb1551 commit 916c4f6

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

src/test/java/io/r2dbc/postgresql/client/ReactorNettyClientIntegrationTests.java

+28-8
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,13 @@
2323
import io.r2dbc.postgresql.PostgresqlConnectionFactory;
2424
import io.r2dbc.postgresql.api.PostgresqlConnection;
2525
import io.r2dbc.postgresql.authentication.PasswordAuthenticationHandler;
26-
import io.r2dbc.postgresql.message.Format;
2726
import io.r2dbc.postgresql.message.backend.BackendMessage;
28-
import io.r2dbc.postgresql.message.backend.BindComplete;
2927
import io.r2dbc.postgresql.message.backend.CommandComplete;
3028
import io.r2dbc.postgresql.message.backend.DataRow;
3129
import io.r2dbc.postgresql.message.backend.NotificationResponse;
3230
import io.r2dbc.postgresql.message.backend.RowDescription;
33-
import io.r2dbc.postgresql.message.frontend.Bind;
34-
import io.r2dbc.postgresql.message.frontend.Describe;
35-
import io.r2dbc.postgresql.message.frontend.Execute;
36-
import io.r2dbc.postgresql.message.frontend.ExecutionType;
3731
import io.r2dbc.postgresql.message.frontend.FrontendMessage;
3832
import io.r2dbc.postgresql.message.frontend.Query;
39-
import io.r2dbc.postgresql.message.frontend.Sync;
4033
import io.r2dbc.postgresql.util.PostgresqlServerExtension;
4134
import io.r2dbc.spi.R2dbcNonTransientResourceException;
4235
import io.r2dbc.spi.R2dbcPermissionDeniedException;
@@ -60,6 +53,7 @@
6053
import java.io.File;
6154
import java.lang.reflect.Field;
6255
import java.time.Duration;
56+
import java.time.temporal.ChronoUnit;
6357
import java.util.Arrays;
6458
import java.util.Collections;
6559
import java.util.List;
@@ -70,7 +64,6 @@
7064
import java.util.function.Function;
7165
import java.util.stream.IntStream;
7266

73-
import static io.r2dbc.postgresql.codec.PostgresqlObjectId.INT4;
7467
import static org.assertj.core.api.Assertions.assertThat;
7568
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
7669
import static org.assertj.core.api.Assertions.fail;
@@ -342,6 +335,33 @@ void unixDomainSocketTest() {
342335
.verifyComplete();
343336
}
344337

338+
@Test
339+
@Timeout(10)
340+
void queryNeverCompletes() {
341+
PostgresqlConnectionFactory connectionFactory = new PostgresqlConnectionFactory(PostgresqlConnectionConfiguration.builder()
342+
.host(SERVER.getHost())
343+
.port(SERVER.getPort())
344+
.username(SERVER.getUsername())
345+
.password(SERVER.getPassword())
346+
.database(SERVER.getDatabase())
347+
.applicationName(ReactorNettyClientIntegrationTests.class.getName())
348+
.build());
349+
Flux.usingWhen(
350+
connectionFactory.create(),
351+
connection -> connection.createStatement("SELECT floor(random() * 100) FROM generate_series(1, 256 + 15)").execute()
352+
.limitRate(1, 1)
353+
.flatMap(r -> r.map((row, meta) -> row.get(0)).limitRate(1, 1))
354+
.limitRate(1, 1)
355+
.delayElements(Duration.of(1, ChronoUnit.MILLIS))
356+
.limitRate(1, 1),
357+
io.r2dbc.spi.Connection::close
358+
)
359+
.as(StepVerifier::create)
360+
.thenAwait()
361+
.expectNextCount(256 + 15)
362+
.verifyComplete();
363+
}
364+
345365
public static class FailedVerification implements HostnameVerifier {
346366

347367
@Override

src/test/java/io/r2dbc/postgresql/util/BlockhoundExceptions.java

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class BlockhoundExceptions implements BlockHoundIntegration {
2929
@Override
3030
public void applyTo(BlockHound.Builder builder) {
3131
builder.allowBlockingCallsInside(SecureRandom.class.getName(), "next");
32+
builder.allowBlockingCallsInside("io.r2dbc.postgresql.client.ReactorNettyClientIntegrationTests", "queryNeverCompletes");
3233
}
3334

3435
}

0 commit comments

Comments
 (0)