Skip to content

Commit 0a3f050

Browse files
committed
fix(store): verify native cleanup completion
- retain raw native handles for post-close assertions - model native reads that outlast cancellation interrupts - verify iterator close waits for actual read completion
1 parent cff316c commit 0a3f050

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

‎hugegraph-store/hg-store-test/src/main/java/org/apache/hugegraph/store/service/GraphPartitionScanShutdownTest.java‎

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import static org.mockito.Mockito.doReturn;
2626
import static org.mockito.Mockito.doThrow;
2727
import static org.mockito.Mockito.mock;
28+
import static org.mockito.Mockito.never;
2829
import static org.mockito.Mockito.timeout;
2930
import static org.mockito.Mockito.verify;
3031
import static org.mockito.Mockito.when;
@@ -80,7 +81,21 @@ public void testShutdownWaitsForActiveReadBeforeClosingNativeIterator() throws E
8081
GraphStoreIterator<?> iterator = mock(GraphStoreIterator.class);
8182
when(iterator.hasNext()).thenAnswer(call -> {
8283
entered.countDown();
83-
assertTrue(release.await(2, TimeUnit.SECONDS));
84+
boolean interrupted = false;
85+
try {
86+
// Model native work that cannot exit until the read itself finishes.
87+
while (release.getCount() != 0) {
88+
try {
89+
release.await();
90+
} catch (InterruptedException cancellation) {
91+
interrupted = true;
92+
}
93+
}
94+
} finally {
95+
if (interrupted) {
96+
Thread.currentThread().interrupt();
97+
}
98+
}
8499
return false;
85100
});
86101
BusinessHandler handler = mock(BusinessHandler.class);
@@ -98,6 +113,7 @@ public void testShutdownWaitsForActiveReadBeforeClosingNativeIterator() throws E
98113
stopping.start();
99114
assertTrue(stoppingStarted.await(2, TimeUnit.SECONDS));
100115
assertFalse(stopped.await(100, TimeUnit.MILLISECONDS));
116+
verify(iterator, never()).close();
101117
release.countDown();
102118
assertTrue(stopped.await(2, TimeUnit.SECONDS));
103119
stopping.join(2000);

‎hugegraph-store/hg-store-test/src/main/java/org/apache/hugegraph/store/service/TTLCleanerCleanupTest.java‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import static org.junit.Assert.assertEquals;
2121
import static org.junit.Assert.assertFalse;
22+
import static org.junit.Assert.assertNull;
2223
import static org.junit.Assert.assertSame;
2324
import static org.junit.Assert.assertTrue;
2425
import static org.mockito.ArgumentMatchers.any;
@@ -185,10 +186,12 @@ public void testNativeSessionCloneAndScanReleaseAllReferences() throws Exception
185186
assertEquals(0L, completed.getCount());
186187
cleaner.awaitCleanup();
187188
assertEquals("TTL must release both the iterator lease and cloned session", 1, owner.getRefCount());
188-
assertTrue(owner.getDB().isOwningHandle());
189+
RocksDB database = owner.getDB();
190+
assertTrue(database.isOwningHandle());
189191
owner.close();
190192
assertEquals(0, owner.getRefCount());
191-
assertFalse(owner.getDB().isOwningHandle());
193+
assertNull(owner.getDB());
194+
assertFalse(database.isOwningHandle());
192195
} finally {
193196
lease.close();
194197
owner.close();

0 commit comments

Comments
 (0)