Skip to content

Commit 241f478

Browse files
committed
Fix flaky ThreadLocalMeterTest by disabling background triggering of ThreadLocalMeter#tickAll within the test case
Patch by Dmitry Konstantinov; reviewed by Brandon Williams, Stefan Miklosovic for CASSANDRA-21056
1 parent 7ed0dc3 commit 241f478

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/java/org/apache/cassandra/metrics/ThreadLocalMeter.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.BitSet;
2424
import java.util.List;
2525
import java.util.concurrent.CopyOnWriteArrayList;
26+
import java.util.concurrent.ScheduledFuture;
2627
import java.util.concurrent.TimeUnit;
2728
import java.util.concurrent.atomic.AtomicInteger;
2829

@@ -92,9 +93,21 @@ public class ThreadLocalMeter extends com.codahale.metrics.Meter implements Mete
9293
maxTicks = m3Ticks;
9394
}
9495

96+
private static final ScheduledFuture<?> backgroundTickingJob;
97+
98+
/**
99+
* the method is provided for test purposes only,
100+
* to disable background activities and make tests more deterministic
101+
*/
102+
@VisibleForTesting
103+
static void disableBackgroundTicking()
104+
{
105+
backgroundTickingJob.cancel(true);
106+
}
107+
95108
static
96109
{
97-
ScheduledExecutors.scheduledTasks.scheduleWithFixedDelay(ThreadLocalMeter::tickAll,
110+
backgroundTickingJob = ScheduledExecutors.scheduledTasks.scheduleWithFixedDelay(ThreadLocalMeter::tickAll,
98111
BACKGROUND_TICK_INTERVAL_SEC,
99112
BACKGROUND_TICK_INTERVAL_SEC,
100113
TimeUnit.SECONDS);

test/unit/org/apache/cassandra/metrics/ThreadLocalMeterTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.concurrent.TimeUnit;
2525

2626
import org.junit.Assert;
27+
import org.junit.Before;
2728
import org.junit.Test;
2829

2930
import com.codahale.metrics.Clock;
@@ -37,6 +38,13 @@
3738

3839
public class ThreadLocalMeterTest
3940
{
41+
42+
@Before
43+
public void before()
44+
{
45+
ThreadLocalMeter.disableBackgroundTicking();
46+
}
47+
4048
@Test
4149
public void checkNoMark()
4250
{

0 commit comments

Comments
 (0)