diff --git a/driver/src/main/java/org/neo4j/driver/internal/InternalExecutableQuery.java b/driver/src/main/java/org/neo4j/driver/internal/InternalExecutableQuery.java index 160e93f1f0..096875f14c 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/InternalExecutableQuery.java +++ b/driver/src/main/java/org/neo4j/driver/internal/InternalExecutableQuery.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.stream.Collector; +import org.neo4j.driver.AccessMode; import org.neo4j.driver.Driver; import org.neo4j.driver.ExecutableQuery; import org.neo4j.driver.Query; @@ -30,6 +31,7 @@ import org.neo4j.driver.RoutingControl; import org.neo4j.driver.SessionConfig; import org.neo4j.driver.TransactionCallback; +import org.neo4j.driver.TransactionConfig; public class InternalExecutableQuery implements ExecutableQuery { private final Driver driver; @@ -67,7 +69,7 @@ public T execute(Collector recordCollector, ResultFinish var supplier = recordCollector.supplier(); var accumulator = recordCollector.accumulator(); var finisher = recordCollector.finisher(); - try (var session = driver.session(sessionConfigBuilder.build())) { + try (var session = (InternalSession) driver.session(sessionConfigBuilder.build())) { TransactionCallback txCallback = tx -> { var result = tx.run(query); var container = supplier.get(); @@ -78,9 +80,8 @@ public T execute(Collector recordCollector, ResultFinish var summary = result.consume(); return resultFinisher.finish(result.keys(), finishedValue, summary); }; - return config.routing().equals(RoutingControl.READ) - ? session.executeRead(txCallback) - : session.executeWrite(txCallback); + var accessMode = config.routing().equals(RoutingControl.WRITE) ? AccessMode.WRITE : AccessMode.READ; + return session.execute(accessMode, txCallback, TransactionConfig.empty(), false); } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/InternalSession.java b/driver/src/main/java/org/neo4j/driver/internal/InternalSession.java index 75026c5e0a..f13ec36a2c 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/InternalSession.java +++ b/driver/src/main/java/org/neo4j/driver/internal/InternalSession.java @@ -107,12 +107,12 @@ public T readTransaction(TransactionWork work) { @Override @Deprecated public T readTransaction(TransactionWork work, TransactionConfig config) { - return transaction(AccessMode.READ, work, config); + return transaction(AccessMode.READ, work, config, true); } @Override public T executeRead(TransactionCallback callback, TransactionConfig config) { - return readTransaction(tx -> callback.execute(new DelegatingTransactionContext(tx)), config); + return execute(AccessMode.READ, callback, config, true); } @Override @@ -124,12 +124,12 @@ public T writeTransaction(TransactionWork work) { @Override @Deprecated public T writeTransaction(TransactionWork work, TransactionConfig config) { - return transaction(AccessMode.WRITE, work, config); + return transaction(AccessMode.WRITE, work, config, true); } @Override public T executeWrite(TransactionCallback callback, TransactionConfig config) { - return writeTransaction(tx -> callback.execute(new DelegatingTransactionContext(tx)), config); + return execute(AccessMode.WRITE, callback, config, true); } @Override @@ -151,14 +151,21 @@ public void reset() { () -> terminateConnectionOnThreadInterrupt("Thread interrupted while resetting the session")); } + T execute(AccessMode accessMode, TransactionCallback callback, TransactionConfig config, boolean flush) { + return transaction(accessMode, tx -> callback.execute(new DelegatingTransactionContext(tx)), config, flush); + } + private T transaction( - AccessMode mode, @SuppressWarnings("deprecation") TransactionWork work, TransactionConfig config) { + AccessMode mode, + @SuppressWarnings("deprecation") TransactionWork work, + TransactionConfig config, + boolean flush) { // use different code path compared to async so that work is executed in the caller thread // caller thread will also be the one who sleeps between retries; // it is unsafe to execute retries in the event loop threads because this can cause a deadlock // event loop thread will bock and wait for itself to read some data return session.retryLogic().retry(() -> { - try (var tx = beginTransaction(mode, config)) { + try (var tx = beginTransaction(mode, config, flush)) { var result = work.execute(tx); if (result instanceof Result) { @@ -175,9 +182,9 @@ private T transaction( }); } - private Transaction beginTransaction(AccessMode mode, TransactionConfig config) { + private Transaction beginTransaction(AccessMode mode, TransactionConfig config, boolean flush) { var tx = Futures.blockingGet( - session.beginTransactionAsync(mode, config), + session.beginTransactionAsync(mode, config, null, flush), () -> terminateConnectionOnThreadInterrupt("Thread interrupted while starting a transaction")); return new InternalTransaction(tx); } diff --git a/driver/src/main/java/org/neo4j/driver/internal/async/NetworkSession.java b/driver/src/main/java/org/neo4j/driver/internal/async/NetworkSession.java index cd345b55a4..820523c302 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/async/NetworkSession.java +++ b/driver/src/main/java/org/neo4j/driver/internal/async/NetworkSession.java @@ -127,19 +127,19 @@ public CompletionStage runRx( } public CompletionStage beginTransactionAsync(TransactionConfig config) { - return beginTransactionAsync(mode, config, null); + return beginTransactionAsync(mode, config, null, true); } public CompletionStage beginTransactionAsync(TransactionConfig config, String txType) { - return this.beginTransactionAsync(mode, config, txType); + return this.beginTransactionAsync(mode, config, txType, true); } public CompletionStage beginTransactionAsync(AccessMode mode, TransactionConfig config) { - return beginTransactionAsync(mode, config, null); + return beginTransactionAsync(mode, config, null, true); } public CompletionStage beginTransactionAsync( - AccessMode mode, TransactionConfig config, String txType) { + AccessMode mode, TransactionConfig config, String txType, boolean flush) { ensureSessionIsOpen(); // create a chain that acquires connection and starts a transaction @@ -150,7 +150,7 @@ public CompletionStage beginTransactionAsync( .thenCompose(connection -> { var tx = new UnmanagedTransaction( connection, this::handleNewBookmark, fetchSize, notificationConfig, logging); - return tx.beginAsync(determineBookmarks(true), config, txType); + return tx.beginAsync(determineBookmarks(true), config, txType, flush); }); // update the reference to the only known transaction diff --git a/driver/src/main/java/org/neo4j/driver/internal/async/UnmanagedTransaction.java b/driver/src/main/java/org/neo4j/driver/internal/async/UnmanagedTransaction.java index ca14851f38..e4349676e8 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/async/UnmanagedTransaction.java +++ b/driver/src/main/java/org/neo4j/driver/internal/async/UnmanagedTransaction.java @@ -99,6 +99,7 @@ private enum State { private Throwable causeOfTermination; private CompletionStage terminationStage; private final NotificationConfig notificationConfig; + private final CompletableFuture beginFuture = new CompletableFuture<>(); private final Logging logging; public UnmanagedTransaction( @@ -128,9 +129,10 @@ protected UnmanagedTransaction( connection.bindTerminationAwareStateLockingExecutor(this); } + // flush = false is only supported for async mode with a single subsequent run public CompletionStage beginAsync( - Set initialBookmarks, TransactionConfig config, String txType) { - return protocol.beginTransaction(connection, initialBookmarks, config, txType, notificationConfig, logging) + Set initialBookmarks, TransactionConfig config, String txType, boolean flush) { + protocol.beginTransaction(connection, initialBookmarks, config, txType, notificationConfig, logging, flush) .handle((ignore, beginError) -> { if (beginError != null) { if (beginError instanceof AuthorizationExpiredException) { @@ -143,7 +145,9 @@ public CompletionStage beginAsync( throw asCompletionException(beginError); } return this; - }); + }) + .whenComplete(futureCompletingConsumer(beginFuture)); + return flush ? beginFuture : CompletableFuture.completedFuture(this); } public CompletionStage closeAsync() { @@ -167,9 +171,9 @@ public CompletionStage runAsync(Query query) { var cursorStage = protocol.runInUnmanagedTransaction(connection, query, this, fetchSize) .asyncResult(); resultCursors.add(cursorStage); - return cursorStage + return beginFuture.thenCompose(ignored -> cursorStage .thenCompose(AsyncResultCursor::mapSuccessfulRunCompletionAsync) - .thenApply(Function.identity()); + .thenApply(Function.identity())); } public CompletionStage runRx(Query query) { diff --git a/driver/src/main/java/org/neo4j/driver/internal/handlers/HelloV51ResponseHandler.java b/driver/src/main/java/org/neo4j/driver/internal/handlers/HelloV51ResponseHandler.java index 1c127f95a3..22ba973503 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/handlers/HelloV51ResponseHandler.java +++ b/driver/src/main/java/org/neo4j/driver/internal/handlers/HelloV51ResponseHandler.java @@ -19,17 +19,22 @@ package org.neo4j.driver.internal.handlers; import static org.neo4j.driver.internal.async.connection.ChannelAttributes.setConnectionId; +import static org.neo4j.driver.internal.async.connection.ChannelAttributes.setConnectionReadTimeout; import static org.neo4j.driver.internal.async.connection.ChannelAttributes.setServerAgent; import static org.neo4j.driver.internal.util.MetadataExtractor.extractServer; import io.netty.channel.Channel; import java.util.Map; +import java.util.Optional; import java.util.concurrent.CompletableFuture; +import java.util.function.Supplier; import org.neo4j.driver.Value; import org.neo4j.driver.internal.spi.ResponseHandler; public class HelloV51ResponseHandler implements ResponseHandler { private static final String CONNECTION_ID_METADATA_KEY = "connection_id"; + public static final String CONFIGURATION_HINTS_KEY = "hints"; + public static final String CONNECTION_RECEIVE_TIMEOUT_SECONDS_KEY = "connection.recv_timeout_seconds"; private final Channel channel; private final CompletableFuture helloFuture; @@ -48,6 +53,8 @@ public void onSuccess(Map metadata) { var connectionId = extractConnectionId(metadata); setConnectionId(channel, connectionId); + processConfigurationHints(metadata); + helloFuture.complete(null); } catch (Throwable error) { onFailure(error); @@ -65,6 +72,16 @@ public void onRecord(Value[] fields) { throw new UnsupportedOperationException(); } + private void processConfigurationHints(Map metadata) { + var configurationHints = metadata.get(CONFIGURATION_HINTS_KEY); + if (configurationHints != null) { + getFromSupplierOrEmptyOnException(() -> configurationHints + .get(CONNECTION_RECEIVE_TIMEOUT_SECONDS_KEY) + .asLong()) + .ifPresent(timeout -> setConnectionReadTimeout(channel, timeout)); + } + } + private static String extractConnectionId(Map metadata) { var value = metadata.get(CONNECTION_ID_METADATA_KEY); if (value == null || value.isNull()) { @@ -73,4 +90,12 @@ private static String extractConnectionId(Map metadata) { } return value.asString(); } + + private static Optional getFromSupplierOrEmptyOnException(Supplier supplier) { + try { + return Optional.of(supplier.get()); + } catch (Exception e) { + return Optional.empty(); + } + } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/BoltProtocol.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/BoltProtocol.java index c21e1ea295..5a0681c6da 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/BoltProtocol.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/BoltProtocol.java @@ -95,6 +95,7 @@ void initializeChannel( * @param txType the Kernel transaction type * @param notificationConfig the notification configuration * @param logging the driver logging + * @param flush defines whether to flush the message to the connection * @return a completion stage completed when transaction is started or completed exceptionally when there was a failure. */ CompletionStage beginTransaction( @@ -103,7 +104,8 @@ CompletionStage beginTransaction( TransactionConfig config, String txType, NotificationConfig notificationConfig, - Logging logging); + Logging logging, + boolean flush); /** * Commit the unmanaged transaction. diff --git a/driver/src/main/java/org/neo4j/driver/internal/messaging/v3/BoltProtocolV3.java b/driver/src/main/java/org/neo4j/driver/internal/messaging/v3/BoltProtocolV3.java index 709421942b..5db50387e6 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/messaging/v3/BoltProtocolV3.java +++ b/driver/src/main/java/org/neo4j/driver/internal/messaging/v3/BoltProtocolV3.java @@ -137,7 +137,8 @@ public CompletionStage beginTransaction( TransactionConfig config, String txType, NotificationConfig notificationConfig, - Logging logging) { + Logging logging, + boolean flush) { var exception = verifyNotificationConfigSupported(notificationConfig); if (exception != null) { return CompletableFuture.failedStage(exception); @@ -158,7 +159,12 @@ public CompletionStage beginTransaction( txType, notificationConfig, logging); - connection.writeAndFlush(beginMessage, new BeginTxResponseHandler(beginTxFuture)); + var handler = new BeginTxResponseHandler(beginTxFuture); + if (flush) { + connection.writeAndFlush(beginMessage, handler); + } else { + connection.write(beginMessage, handler); + } return beginTxFuture; } diff --git a/driver/src/test/java/org/neo4j/driver/internal/InternalExecutableQueryTest.java b/driver/src/test/java/org/neo4j/driver/internal/InternalExecutableQueryTest.java index 0cfcf6148b..7ba92c4072 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/InternalExecutableQueryTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/InternalExecutableQueryTest.java @@ -21,6 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.mock; @@ -29,13 +30,13 @@ import java.util.List; import java.util.Map; import java.util.function.BiConsumer; -import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collector; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.mockito.ArgumentCaptor; +import org.neo4j.driver.AccessMode; import org.neo4j.driver.BookmarkManager; import org.neo4j.driver.Driver; import org.neo4j.driver.ExecutableQuery; @@ -44,9 +45,9 @@ import org.neo4j.driver.Record; import org.neo4j.driver.Result; import org.neo4j.driver.RoutingControl; -import org.neo4j.driver.Session; import org.neo4j.driver.SessionConfig; import org.neo4j.driver.TransactionCallback; +import org.neo4j.driver.TransactionConfig; import org.neo4j.driver.TransactionContext; import org.neo4j.driver.summary.ResultSummary; @@ -126,15 +127,15 @@ void shouldExecuteAndReturnResult(RoutingControl routingControl) { var driver = mock(Driver.class); var bookmarkManager = mock(BookmarkManager.class); given(driver.executableQueryBookmarkManager()).willReturn(bookmarkManager); - var session = mock(Session.class); + var session = mock(InternalSession.class); given(driver.session(any(SessionConfig.class))).willReturn(session); var txContext = mock(TransactionContext.class); - BiFunction, Object> executeMethod = - routingControl.equals(RoutingControl.READ) ? Session::executeRead : Session::executeWrite; - given(executeMethod.apply(session, any())).willAnswer(answer -> { - TransactionCallback txCallback = answer.getArgument(0); - return txCallback.execute(txContext); - }); + var accessMode = routingControl.equals(RoutingControl.WRITE) ? AccessMode.WRITE : AccessMode.READ; + given(session.execute(eq(accessMode), any(), eq(TransactionConfig.empty()), eq(false))) + .willAnswer(answer -> { + TransactionCallback txCallback = answer.getArgument(1); + return txCallback.execute(txContext); + }); var result = mock(Result.class); given(txContext.run(any(Query.class))).willReturn(result); var keys = List.of("key"); @@ -180,7 +181,7 @@ var record = mock(Record.class); .withBookmarkManager(bookmarkManager) .build(); assertEquals(expectedSessionConfig, sessionConfig); - executeMethod.apply(then(session).should(), any(TransactionCallback.class)); + then(session).should().execute(eq(accessMode), any(), eq(TransactionConfig.empty()), eq(false)); then(txContext).should().run(query.withParameters(params)); then(result).should(times(2)).hasNext(); then(result).should().next(); diff --git a/driver/src/test/java/org/neo4j/driver/internal/async/UnmanagedTransactionTest.java b/driver/src/test/java/org/neo4j/driver/internal/async/UnmanagedTransactionTest.java index 720a27f834..137f3d32b6 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/async/UnmanagedTransactionTest.java +++ b/driver/src/test/java/org/neo4j/driver/internal/async/UnmanagedTransactionTest.java @@ -186,7 +186,7 @@ void shouldReleaseConnectionWhenBeginFails() { var bookmarks = Collections.singleton(InternalBookmark.parse("SomeBookmark")); var txConfig = TransactionConfig.empty(); - var e = assertThrows(RuntimeException.class, () -> await(tx.beginAsync(bookmarks, txConfig, null))); + var e = assertThrows(RuntimeException.class, () -> await(tx.beginAsync(bookmarks, txConfig, null, true))); assertEquals(error, e); verify(connection).release(); @@ -200,7 +200,7 @@ void shouldNotReleaseConnectionWhenBeginSucceeds() { var bookmarks = Collections.singleton(InternalBookmark.parse("SomeBookmark")); var txConfig = TransactionConfig.empty(); - await(tx.beginAsync(bookmarks, txConfig, null)); + await(tx.beginAsync(bookmarks, txConfig, null, true)); verify(connection, never()).release(); } @@ -300,7 +300,7 @@ void shouldReleaseConnectionOnConnectionAuthorizationExpiredExceptionFailure() { var txConfig = TransactionConfig.empty(); var actualException = assertThrows( - AuthorizationExpiredException.class, () -> await(tx.beginAsync(bookmarks, txConfig, null))); + AuthorizationExpiredException.class, () -> await(tx.beginAsync(bookmarks, txConfig, null, true))); assertSame(exception, actualException); verify(connection).terminateAndRelease(AuthorizationExpiredException.DESCRIPTION); @@ -315,7 +315,7 @@ void shouldReleaseConnectionOnConnectionReadTimeoutExceptionFailure() { var txConfig = TransactionConfig.empty(); var actualException = assertThrows( - ConnectionReadTimeoutException.class, () -> await(tx.beginAsync(bookmarks, txConfig, null))); + ConnectionReadTimeoutException.class, () -> await(tx.beginAsync(bookmarks, txConfig, null, true))); assertSame(ConnectionReadTimeoutException.INSTANCE, actualException); verify(connection).terminateAndRelease(ConnectionReadTimeoutException.INSTANCE.getMessage()); @@ -492,7 +492,7 @@ void shouldThrowOnRunningNewQueriesWhenTransactionIsClosing(TransactionClosingTe given(boltProtocol.version()).willReturn(BoltProtocolV53.VERSION); var closureStage = new CompletableFuture(); var connection = connectionMock(boltProtocol); - given(boltProtocol.beginTransaction(eq(connection), any(), any(), any(), any(), any())) + given(boltProtocol.beginTransaction(eq(connection), any(), any(), any(), any(), any(), eq(true))) .willReturn(completedFuture(null)); given(boltProtocol.commitTransaction(connection)).willReturn(closureStage); given(boltProtocol.rollbackTransaction(connection)).willReturn(closureStage.thenApply(ignored -> null)); @@ -560,7 +560,7 @@ private static UnmanagedTransaction beginTx(Connection connection) { private static UnmanagedTransaction beginTx(Connection connection, Set initialBookmarks) { var tx = new UnmanagedTransaction(connection, (ignored) -> {}, UNLIMITED_FETCH_SIZE, null, Logging.none()); - return await(tx.beginAsync(initialBookmarks, TransactionConfig.empty(), null)); + return await(tx.beginAsync(initialBookmarks, TransactionConfig.empty(), null, true)); } private static Connection connectionWithBegin(Consumer beginBehaviour) { diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v3/BoltProtocolV3Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v3/BoltProtocolV3Test.java index ad766d5514..b78a938cb1 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v3/BoltProtocolV3Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v3/BoltProtocolV3Test.java @@ -195,7 +195,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -217,8 +217,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -239,7 +239,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -261,7 +262,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -376,7 +377,8 @@ void shouldNotSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); var e = assertThrows(ClientException.class, () -> await(txStage)); assertThat(e.getMessage(), startsWith("Database name parameter for selecting database is not supported")); @@ -419,7 +421,8 @@ protected void testDatabaseNameSupport(boolean autoCommitTx) { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); e = assertThrows(ClientException.class, () -> await(txStage)); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v4/BoltProtocolV4Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v4/BoltProtocolV4Test.java index f06f9bc5d1..79923055fc 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v4/BoltProtocolV4Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v4/BoltProtocolV4Test.java @@ -188,7 +188,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -210,8 +210,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -232,7 +232,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -254,7 +255,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -369,7 +370,8 @@ void shouldSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); assertDoesNotThrow(() -> await(txStage)); } @@ -552,7 +554,7 @@ private void testDatabaseNameSupport(boolean autoCommitTx) { await(resultStage); } else { var txStage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); await(txStage); verifyBeginInvoked(connection, Collections.emptySet(), TransactionConfig.empty(), database("foo")); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v41/BoltProtocolV41Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v41/BoltProtocolV41Test.java index f9e551602d..f8bef52b4b 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v41/BoltProtocolV41Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v41/BoltProtocolV41Test.java @@ -193,7 +193,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -215,8 +215,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -237,7 +237,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -259,7 +260,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -374,7 +375,8 @@ void shouldSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); assertDoesNotThrow(() -> await(txStage)); } @@ -548,7 +550,7 @@ private void testDatabaseNameSupport(boolean autoCommitTx) { connection, Collections.emptySet(), TransactionConfig.empty(), AccessMode.WRITE, database("foo")); } else { var txStage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); await(txStage); verifyBeginInvoked(connection, Collections.emptySet(), TransactionConfig.empty(), database("foo")); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v42/BoltProtocolV42Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v42/BoltProtocolV42Test.java index 61f39542f2..157d80e490 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v42/BoltProtocolV42Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v42/BoltProtocolV42Test.java @@ -193,7 +193,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -215,8 +215,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -237,7 +237,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -259,7 +260,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -374,7 +375,8 @@ void shouldSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); assertDoesNotThrow(() -> await(txStage)); } @@ -549,7 +551,7 @@ private void testDatabaseNameSupport(boolean autoCommitTx) { connection, Collections.emptySet(), TransactionConfig.empty(), AccessMode.WRITE, database("foo")); } else { var txStage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); await(txStage); verifyBeginInvoked(connection, Collections.emptySet(), TransactionConfig.empty(), database("foo")); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v43/BoltProtocolV43Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v43/BoltProtocolV43Test.java index 4cb408aeb7..8511797fcb 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v43/BoltProtocolV43Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v43/BoltProtocolV43Test.java @@ -192,7 +192,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -214,8 +214,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -236,7 +236,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -258,7 +259,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -373,7 +374,8 @@ void shouldSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); assertDoesNotThrow(() -> await(txStage)); } @@ -551,7 +553,7 @@ private void testDatabaseNameSupport(boolean autoCommitTx) { connection, Collections.emptySet(), TransactionConfig.empty(), AccessMode.WRITE, database("foo")); } else { var txStage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); await(txStage); verifyBeginInvoked(connection, Collections.emptySet(), TransactionConfig.empty(), database("foo")); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v44/BoltProtocolV44Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v44/BoltProtocolV44Test.java index e8b3a9bf36..78c405c6f9 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v44/BoltProtocolV44Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v44/BoltProtocolV44Test.java @@ -192,7 +192,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -214,8 +214,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -236,7 +236,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -258,7 +259,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -373,7 +374,8 @@ void shouldSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); assertDoesNotThrow(() -> await(txStage)); } @@ -549,7 +551,7 @@ private void testDatabaseNameSupport(boolean autoCommitTx) { connection, Collections.emptySet(), TransactionConfig.empty(), AccessMode.WRITE, database("foo")); } else { var txStage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); await(txStage); verifyBeginInvoked(connection, Collections.emptySet(), TransactionConfig.empty(), database("foo")); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v5/BoltProtocolV5Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v5/BoltProtocolV5Test.java index db5ee525e9..d2e6aef764 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v5/BoltProtocolV5Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v5/BoltProtocolV5Test.java @@ -192,7 +192,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -214,8 +214,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -236,7 +236,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -258,7 +259,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -373,7 +374,8 @@ void shouldSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); assertDoesNotThrow(() -> await(txStage)); } @@ -549,7 +551,7 @@ private void testDatabaseNameSupport(boolean autoCommitTx) { connection, Collections.emptySet(), TransactionConfig.empty(), AccessMode.WRITE, database("foo")); } else { var txStage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); await(txStage); verifyBeginInvoked(connection, Collections.emptySet(), TransactionConfig.empty(), database("foo")); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v51/BoltProtocolV51Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v51/BoltProtocolV51Test.java index bfbcc7a738..8a3b646089 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v51/BoltProtocolV51Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v51/BoltProtocolV51Test.java @@ -164,7 +164,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -186,8 +186,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -208,7 +208,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -230,7 +231,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -345,7 +346,8 @@ void shouldSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); assertDoesNotThrow(() -> await(txStage)); } @@ -521,7 +523,7 @@ private void testDatabaseNameSupport(boolean autoCommitTx) { connection, Collections.emptySet(), TransactionConfig.empty(), AccessMode.WRITE, database("foo")); } else { var txStage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); await(txStage); verifyBeginInvoked(connection, Collections.emptySet(), TransactionConfig.empty(), database("foo")); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v52/BoltProtocolV52Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v52/BoltProtocolV52Test.java index dc8b79da10..1de37e092d 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v52/BoltProtocolV52Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v52/BoltProtocolV52Test.java @@ -165,7 +165,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -187,8 +187,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -209,7 +209,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -231,7 +232,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -346,7 +347,8 @@ void shouldSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); assertDoesNotThrow(() -> await(txStage)); } @@ -522,7 +524,7 @@ private void testDatabaseNameSupport(boolean autoCommitTx) { connection, Collections.emptySet(), TransactionConfig.empty(), AccessMode.WRITE, database("foo")); } else { var txStage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); await(txStage); verifyBeginInvoked(connection, Collections.emptySet(), TransactionConfig.empty(), database("foo")); } diff --git a/driver/src/test/java/org/neo4j/driver/internal/messaging/v53/BoltProtocolV53Test.java b/driver/src/test/java/org/neo4j/driver/internal/messaging/v53/BoltProtocolV53Test.java index a7395a6101..699bce3832 100644 --- a/driver/src/test/java/org/neo4j/driver/internal/messaging/v53/BoltProtocolV53Test.java +++ b/driver/src/test/java/org/neo4j/driver/internal/messaging/v53/BoltProtocolV53Test.java @@ -172,7 +172,7 @@ void shouldBeginTransactionWithoutBookmark() { var connection = connectionMock(protocol); var stage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -194,8 +194,8 @@ void shouldBeginTransactionWithBookmarks() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx100")); - var stage = - protocol.beginTransaction(connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, bookmarks, TransactionConfig.empty(), null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -216,7 +216,8 @@ void shouldBeginTransactionWithBookmarks() { void shouldBeginTransactionWithConfig() { var connection = connectionMock(protocol); - var stage = protocol.beginTransaction(connection, Collections.emptySet(), txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction( + connection, Collections.emptySet(), txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -238,7 +239,7 @@ void shouldBeginTransactionWithBookmarksAndConfig() { var connection = connectionMock(protocol); var bookmarks = Collections.singleton(InternalBookmark.parse("neo4j:bookmark:v1:tx4242")); - var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none()); + var stage = protocol.beginTransaction(connection, bookmarks, txConfig, null, null, Logging.none(), true); verify(connection) .writeAndFlush( @@ -353,7 +354,8 @@ void shouldSupportDatabaseNameInBeginTransaction() { TransactionConfig.empty(), null, null, - Logging.none()); + Logging.none(), + true); assertDoesNotThrow(() -> await(txStage)); } @@ -529,7 +531,7 @@ private void testDatabaseNameSupport(boolean autoCommitTx) { connection, Collections.emptySet(), TransactionConfig.empty(), AccessMode.WRITE, database("foo")); } else { var txStage = protocol.beginTransaction( - connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none()); + connection, Collections.emptySet(), TransactionConfig.empty(), null, null, Logging.none(), true); await(txStage); verifyBeginInvoked(connection, Collections.emptySet(), TransactionConfig.empty(), database("foo")); } diff --git a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/GetFeatures.java b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/GetFeatures.java index 16ad0764df..cc14742025 100644 --- a/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/GetFeatures.java +++ b/testkit-backend/src/main/java/neo4j/org/testkit/backend/messages/requests/GetFeatures.java @@ -79,7 +79,8 @@ public class GetFeatures implements TestkitRequest { "Optimization:ResultListFetchAll", "Feature:API:Result.Single", "Feature:API:Driver.ExecuteQuery", - "Feature:API:Driver.VerifyAuthentication")); + "Feature:API:Driver.VerifyAuthentication", + "Optimization:ExecuteQueryPipelining")); private static final Set ASYNC_FEATURES = new HashSet<>(Arrays.asList( "Feature:Bolt:3.0",