Skip to content

Commit f08dfcc

Browse files
jknidjatnieks
authored andcommitted
CNDB-12297: Fix flaky test MutatorTest.testMutatateAtomically by polling for async batchlog removal (#1485)
The test asserts that the batchlog is removed immediately after the write completes, but removal of the batchlog is async and can be delayed, particularly in resource-limited environments like CI.
1 parent 7c1e605 commit f08dfcc

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

test/unit/org/apache/cassandra/service/MutatorTest.java

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

2121
import java.util.Arrays;
2222
import java.util.Collection;
23+
import java.util.concurrent.TimeUnit;
2324

2425
import org.junit.Before;
2526
import org.junit.BeforeClass;
@@ -43,6 +44,7 @@
4344
import org.apache.cassandra.schema.SchemaConstants;
4445
import org.apache.cassandra.utils.ByteBufferUtil;
4546
import org.apache.cassandra.utils.FBUtilities;
47+
import org.awaitility.Awaitility;
4648
import org.jboss.byteman.contrib.bmunit.BMRule;
4749
import org.jboss.byteman.contrib.bmunit.BMUnitRunner;
4850

@@ -108,8 +110,9 @@ public void testMutatateAtomically()
108110
assertThat(metrics.writeMetrics.executionTimeMetrics.latency.getCount()).isEqualTo(count + 1);
109111
assertThat(metrics.writeMetrics.serviceTimeMetrics.latency.getCount()).isEqualTo(countServiceTime + 1);
110112

111-
// verify batchlog is removed
112-
Util.assertEmpty(Util.cmd(cfs(SchemaConstants.SYSTEM_KEYSPACE_NAME, SystemKeyspace.BATCHES)).withNowInSeconds(FBUtilities.nowInSeconds()).build());
113+
// verify batchlog is removed -- this happens async, so we may need to check several times
114+
Awaitility.await().timeout(10, TimeUnit.SECONDS)
115+
.untilAsserted(() -> Util.assertEmpty(Util.cmd(cfs(SchemaConstants.SYSTEM_KEYSPACE_NAME, SystemKeyspace.BATCHES)).withNowInSeconds(FBUtilities.nowInSeconds()).build()));
113116

114117
// verify data is inserted
115118
Util.getOnlyRow(Util.cmd(cfs(KEYSPACE, TABLE0), dk("1")).includeRow("column0").withNowInSeconds(FBUtilities.nowInSeconds()).build());

0 commit comments

Comments
 (0)