This is an automated email from the ASF dual-hosted git repository.
Caideyipi pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new 1cb4bf26a75 Fix flaky stamped lock test (#17832) (#17839)
1cb4bf26a75 is described below
commit 1cb4bf26a75fcfeeda638592e03b3b2a7311bb57
Author: Caideyipi <[email protected]>
AuthorDate: Fri Jun 5 14:50:39 2026 +0800
Fix flaky stamped lock test (#17832) (#17839)
(cherry picked from commit 2fd70b9d1b17849862f24b719d0d2c16a80c448f)
---
.../mtree/lock/StampedWriterPreferredLockTest.java | 42 ++++++++++++++++------
1 file changed, 31 insertions(+), 11 deletions(-)
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mtree/lock/StampedWriterPreferredLockTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mtree/lock/StampedWriterPreferredLockTest.java
index 2c9fdbdfd3d..b559aaf8152 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mtree/lock/StampedWriterPreferredLockTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/metadata/mtree/lock/StampedWriterPreferredLockTest.java
@@ -25,6 +25,7 @@ import org.awaitility.core.ConditionTimeoutException;
import org.junit.Assert;
import org.junit.Test;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
@@ -143,22 +144,41 @@ public class StampedWriterPreferredLockTest {
}
@Test
- public void testAcquireReadLockWhileWriting() {
+ public void testAcquireReadLockWhileWriting() throws InterruptedException {
StampedWriterPreferredLock lock = new StampedWriterPreferredLock();
lock.writeLock();
AtomicInteger counter = new AtomicInteger();
- new Thread(
+ CountDownLatch readerFinished = new CountDownLatch(1);
+ Thread readerThread =
+ new Thread(
() -> {
lock.threadReadLock();
- counter.incrementAndGet();
- lock.threadReadUnlock();
- })
- .start();
- // block reader util writer release write lock
- Assert.assertEquals(0, counter.get());
- lock.writeUnlock();
- Awaitility.await().atMost(2, TimeUnit.SECONDS).until(() -> counter.get()
== 1);
- Assert.assertEquals(1, counter.get());
+ try {
+ counter.incrementAndGet();
+ } finally {
+ lock.threadReadUnlock();
+ readerFinished.countDown();
+ }
+ });
+ readerThread.setDaemon(true);
+ readerThread.start();
+
+ boolean writeLocked = true;
+ try {
+ // block reader until writer release write lock
+ Awaitility.await()
+ .atMost(10, TimeUnit.SECONDS)
+ .until(() -> readerThread.getState() == Thread.State.WAITING);
+ Assert.assertEquals(0, counter.get());
+ lock.writeUnlock();
+ writeLocked = false;
+ Assert.assertTrue(readerFinished.await(10, TimeUnit.SECONDS));
+ Assert.assertEquals(1, counter.get());
+ } finally {
+ if (writeLocked) {
+ lock.writeUnlock();
+ }
+ }
}
@Test