Skip to content

Commit b11f4d8

Browse files
authored
[INTERNAL] Add interrupt to sync API (#1427)
1 parent b0dd24d commit b11f4d8

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

driver/src/main/java/org/neo4j/driver/internal/InternalTransaction.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,15 @@ public boolean isOpen() {
6666
return tx.isOpen();
6767
}
6868

69+
/**
70+
* Marks transaction as terminated and sends {@code RESET} message over allocated connection.
71+
* <p>
72+
* <b>THIS METHOD IS NOT PART OF PUBLIC API. This method may be changed or removed at any moment in time.</b>
73+
*/
74+
public void interrupt() {
75+
Futures.blockingGet(tx.interruptAsync());
76+
}
77+
6978
private void terminateConnectionOnThreadInterrupt(String reason) {
7079
tx.connection().terminateAndRelease(reason);
7180
}

driver/src/test/java/org/neo4j/driver/internal/InternalTransactionTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import static org.junit.Assert.assertFalse;
2525
import static org.junit.jupiter.api.Assertions.assertThrows;
2626
import static org.mockito.ArgumentMatchers.any;
27+
import static org.mockito.BDDMockito.given;
28+
import static org.mockito.BDDMockito.then;
2729
import static org.mockito.Mockito.mock;
2830
import static org.mockito.Mockito.verify;
2931
import static org.mockito.Mockito.when;
@@ -38,6 +40,7 @@
3840
import static org.neo4j.driver.testutil.TestUtil.verifyRollbackTx;
3941
import static org.neo4j.driver.testutil.TestUtil.verifyRunAndPull;
4042

43+
import java.util.concurrent.CompletableFuture;
4144
import java.util.function.Consumer;
4245
import java.util.function.Function;
4346
import java.util.stream.Stream;
@@ -50,6 +53,7 @@
5053
import org.neo4j.driver.Transaction;
5154
import org.neo4j.driver.Value;
5255
import org.neo4j.driver.internal.async.ConnectionContext;
56+
import org.neo4j.driver.internal.async.UnmanagedTransaction;
5357
import org.neo4j.driver.internal.messaging.v4.BoltProtocolV4;
5458
import org.neo4j.driver.internal.spi.Connection;
5559
import org.neo4j.driver.internal.spi.ConnectionProvider;
@@ -150,6 +154,17 @@ void shouldReleaseConnectionWhenFailedToClose() {
150154
shouldReleaseConnectionWhenFailedToAction(Transaction::close);
151155
}
152156

157+
@Test
158+
void shouldDelegateInterrupt() {
159+
var unmanagedTx = mock(UnmanagedTransaction.class);
160+
given(unmanagedTx.interruptAsync()).willReturn(CompletableFuture.completedFuture(null));
161+
var tx = new InternalTransaction(unmanagedTx);
162+
163+
tx.interrupt();
164+
165+
then(unmanagedTx).should().interruptAsync();
166+
}
167+
153168
private void shouldReleaseConnectionWhenFailedToAction(Consumer<Transaction> txAction) {
154169
setupFailingRollback(connection);
155170
assertThrows(Exception.class, () -> txAction.accept(tx));

0 commit comments

Comments
 (0)