Skip to content

Commit 441389f

Browse files
committed
Make MetricsITBase tests serial instead of parallelizable (CASSJAVA-19)
This change fixes random failures by removing `MicrometerMetricsIT`, `MicroProfileMetricsIT` and `DropwizardMetricsIT` from the `ParallelizableTests` category. It is not the only solution but seems to be the simplest workaround. The reasoning is as follows: `should_evict_down_node_metrics_when_timeout_fires()` has two places where it manipulates `AbstractMetricUpdater.MIN_EXPIRE_AFTER` in order to set `DefaultDriverOption.METRICS_NODE_EXPIRE_AFTER` to 1 second during session initialization. Otherwise `MIN_EXPIRE_AFTER` would not allow for that and warning log would be printed about using higher value than what user wanted to set. It lowers it before session initialization: https://github.com/apache/cassandra-java-driver/blob/17ebe6092e2877d8c524e07489c4c3d005cfeea5/integration-tests/src/test/java/com/datastax/oss/driver/core/metrics/MetricsITBase.java#L157 And sets it back to 5 mintues at the end of the test: https://github.com/apache/cassandra-java-driver/blob/17ebe6092e2877d8c524e07489c4c3d005cfeea5/integration-tests/src/test/java/com/datastax/oss/driver/core/metrics/MetricsITBase.java#L186 The code comment in AbstractMetricUpdater also mentions that this variable is intentionally not made final for testing purposes. I believe this is what causes the intermittent failures. When those three tests that extend this class run in parallel it is possible that test B sets the minimum back to 5 minutes after the test A lowers it to 1 second but before test A initializes its session. The test waits around 10 seconds for the change to happen, but in such case it would need to wait for 5 minutes. Warnings with this pattern should be visible when the test fails on the CI: ``` c.d.o.d.i.c.m.AbstractMetricUpdater - [s6] Value too low for advanced.metrics.node.expire-after: PT1S. Forcing to PT5M instead. ``` I can confirm that this is what was happening when I was testing this locally, but I did not try to search for the logs on cassandra-java-driver's CI.
1 parent 17ebe60 commit 441389f

File tree

3 files changed

+0
-9
lines changed

3 files changed

+0
-9
lines changed

integration-tests/src/test/java/com/datastax/oss/driver/core/metrics/DropwizardMetricsIT.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,14 @@
3232
import com.datastax.oss.driver.api.core.metrics.DefaultSessionMetric;
3333
import com.datastax.oss.driver.api.core.metrics.Metrics;
3434
import com.datastax.oss.driver.api.testinfra.simulacron.SimulacronRule;
35-
import com.datastax.oss.driver.categories.ParallelizableTests;
3635
import com.datastax.oss.driver.internal.core.context.InternalDriverContext;
3736
import com.datastax.oss.driver.internal.core.metrics.MetricId;
3837
import com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator;
3938
import com.datastax.oss.simulacron.common.cluster.ClusterSpec;
4039
import java.util.ArrayList;
4140
import java.util.List;
4241
import org.junit.ClassRule;
43-
import org.junit.experimental.categories.Category;
4442

45-
@Category(ParallelizableTests.class)
4643
public class DropwizardMetricsIT extends MetricsITBase {
4744

4845
@ClassRule

integration-tests/src/test/java/com/datastax/oss/driver/metrics/micrometer/MicrometerMetricsIT.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.datastax.oss.driver.api.core.metrics.DefaultNodeMetric;
2626
import com.datastax.oss.driver.api.core.metrics.DefaultSessionMetric;
2727
import com.datastax.oss.driver.api.testinfra.simulacron.SimulacronRule;
28-
import com.datastax.oss.driver.categories.ParallelizableTests;
2928
import com.datastax.oss.driver.core.metrics.MetricsITBase;
3029
import com.datastax.oss.driver.internal.core.context.InternalDriverContext;
3130
import com.datastax.oss.driver.internal.core.metrics.MetricId;
@@ -40,9 +39,7 @@
4039
import io.micrometer.core.instrument.Timer;
4140
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
4241
import org.junit.ClassRule;
43-
import org.junit.experimental.categories.Category;
4442

45-
@Category(ParallelizableTests.class)
4643
public class MicrometerMetricsIT extends MetricsITBase {
4744

4845
@ClassRule

integration-tests/src/test/java/com/datastax/oss/driver/metrics/microprofile/MicroProfileMetricsIT.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.datastax.oss.driver.api.core.metrics.DefaultNodeMetric;
2626
import com.datastax.oss.driver.api.core.metrics.DefaultSessionMetric;
2727
import com.datastax.oss.driver.api.testinfra.simulacron.SimulacronRule;
28-
import com.datastax.oss.driver.categories.ParallelizableTests;
2928
import com.datastax.oss.driver.core.metrics.MetricsITBase;
3029
import com.datastax.oss.driver.internal.core.context.InternalDriverContext;
3130
import com.datastax.oss.driver.internal.core.metrics.MetricId;
@@ -44,9 +43,7 @@
4443
import org.eclipse.microprofile.metrics.Tag;
4544
import org.eclipse.microprofile.metrics.Timer;
4645
import org.junit.ClassRule;
47-
import org.junit.experimental.categories.Category;
4846

49-
@Category(ParallelizableTests.class)
5047
public class MicroProfileMetricsIT extends MetricsITBase {
5148

5249
@ClassRule

0 commit comments

Comments
 (0)