This is an automated email from the ASF dual-hosted git repository.
rpuch pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 330d8a10165 IGNITE-27728 Fix ItRaftMetricTest.testLeaderCountDecreases
(#7650)
330d8a10165 is described below
commit 330d8a1016562974c00a17748d73072188a8dce0
Author: Phillippko <[email protected]>
AuthorDate: Tue Feb 24 19:54:37 2026 +0700
IGNITE-27728 Fix ItRaftMetricTest.testLeaderCountDecreases (#7650)
---
.../org/apache/ignite/raft/ItRaftMetricTest.java | 59 +++++++------------
.../apache/ignite/internal/TestMetricUtils.java | 42 ++++++++------
.../internal/table/metrics/ItTableMetricsTest.java | 66 +---------------------
3 files changed, 48 insertions(+), 119 deletions(-)
diff --git
a/modules/raft/src/integrationTest/java/org/apache/ignite/raft/ItRaftMetricTest.java
b/modules/raft/src/integrationTest/java/org/apache/ignite/raft/ItRaftMetricTest.java
index 962e6f1b778..a0687d50e50 100644
---
a/modules/raft/src/integrationTest/java/org/apache/ignite/raft/ItRaftMetricTest.java
+++
b/modules/raft/src/integrationTest/java/org/apache/ignite/raft/ItRaftMetricTest.java
@@ -18,78 +18,59 @@
package org.apache.ignite.raft;
import static
org.apache.ignite.internal.ClusterPerTestIntegrationTest.aggressiveLowWatermarkIncreaseClusterConfig;
-import static
org.apache.ignite.internal.TestMetricUtils.testMetricChangeAfterOperation;
-import static org.apache.ignite.internal.TestWrappers.unwrapIgniteImpl;
import static
org.apache.ignite.internal.metrics.sources.RaftMetricSource.RAFT_GROUP_LEADERS;
import static
org.apache.ignite.internal.metrics.sources.RaftMetricSource.SOURCE_NAME;
import static org.awaitility.Awaitility.await;
+import static org.hamcrest.Matchers.is;
-import java.util.List;
import org.apache.ignite.InitParametersBuilder;
import org.apache.ignite.internal.ClusterPerClassIntegrationTest;
+import org.apache.ignite.internal.TestMetricUtils;
import org.apache.ignite.internal.metrics.sources.RaftMetricSource;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
/** Tests for {@link RaftMetricSource}. */
public class ItRaftMetricTest extends ClusterPerClassIntegrationTest {
private static final String ZONE_NAME = "TEST_ZONE";
+ // CMG and Metastore leaders.
+ private static final int SYSTEM_RAFT_LEADER_COUNT = 2;
+
+ private static final int PARTITION_COUNT = 10;
+
@Override
protected void configureInitParameters(InitParametersBuilder builder) {
// To trigger zone's raft partitions destruction.
builder.clusterConfiguration(aggressiveLowWatermarkIncreaseClusterConfig());
}
- @BeforeEach
- void setUp() {
- dropTableAndZone();
- }
-
@Test
- @Disabled("https://issues.apache.org/jira/browse/IGNITE-27728")
void testLeaderCountIncreases() {
- testMetricChangeAfterOperation(
- CLUSTER,
- SOURCE_NAME,
- List.of(RAFT_GROUP_LEADERS),
- List.of((long) DEFAULT_PARTITION_COUNT),
- ItRaftMetricTest::createZoneAndTable
- );
+ createZoneIfNotExists();
+
+ awaitExpectedLeaderCount(PARTITION_COUNT + SYSTEM_RAFT_LEADER_COUNT);
}
@Test
- @Disabled("https://issues.apache.org/jira/browse/IGNITE-27728")
void testLeaderCountDecreases() {
- createZoneAndTable();
+ createZoneIfNotExists();
- testMetricChangeAfterOperation(
- CLUSTER,
- SOURCE_NAME,
- List.of(RAFT_GROUP_LEADERS),
- List.of((long) -DEFAULT_PARTITION_COUNT),
- () -> {
- int initialNodes = getRaftNodesCount();
+ awaitExpectedLeaderCount(PARTITION_COUNT + SYSTEM_RAFT_LEADER_COUNT);
- dropTableAndZone();
+ dropZone();
- // Waiting for zone partitions to be destroyed.
- await().until(() -> initialNodes - getRaftNodesCount() >=
DEFAULT_PARTITION_COUNT);
- });
+ awaitExpectedLeaderCount(SYSTEM_RAFT_LEADER_COUNT);
}
- private static void dropTableAndZone() {
- sql("DROP ZONE IF EXISTS " + ZONE_NAME);
+ private static void awaitExpectedLeaderCount(long expected) {
+ await().until(() -> TestMetricUtils.metricValue(CLUSTER, SOURCE_NAME,
RAFT_GROUP_LEADERS), is(expected));
}
- private static void createZoneAndTable() {
- sql("CREATE ZONE " + ZONE_NAME + " WITH STORAGE_PROFILES='default'");
+ private static void dropZone() {
+ sql("DROP ZONE " + ZONE_NAME);
}
- private static int getRaftNodesCount() {
- return CLUSTER.runningNodes()
- .mapToInt(node ->
unwrapIgniteImpl(node).raftManager().localNodes().size())
- .sum();
+ private static void createZoneIfNotExists() {
+ sql("CREATE ZONE IF NOT EXISTS " + ZONE_NAME + " WITH
STORAGE_PROFILES='default', PARTITIONS = " + PARTITION_COUNT);
}
}
diff --git
a/modules/runner/src/testFixtures/java/org/apache/ignite/internal/TestMetricUtils.java
b/modules/runner/src/testFixtures/java/org/apache/ignite/internal/TestMetricUtils.java
index 1aef2e70135..5a4b4deddda 100644
---
a/modules/runner/src/testFixtures/java/org/apache/ignite/internal/TestMetricUtils.java
+++
b/modules/runner/src/testFixtures/java/org/apache/ignite/internal/TestMetricUtils.java
@@ -19,9 +19,9 @@ package org.apache.ignite.internal;
import static org.apache.ignite.internal.TestWrappers.unwrapIgniteImpl;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.jupiter.api.Assertions.fail;
import java.util.HashMap;
import java.util.List;
@@ -70,33 +70,43 @@ public class TestMetricUtils {
* @param metricNames Metric names.
* @return Map of metric names to their values.
*/
- private static Map<String, Long> metricValues(Cluster cluster, String
sourceName, List<String> metricNames) {
+ public static Map<String, Long> metricValues(Cluster cluster, String
sourceName, List<String> metricNames) {
Map<String, Long> values = new HashMap<>(metricNames.size());
+ for (String metricName : metricNames) {
+ values.put(metricName, metricValue(cluster, sourceName,
metricName));
+ }
+
+ return values;
+ }
+
+ /**
+ * Returns the sum of the specified metric on all nodes.
+ *
+ * @param metricName Metric names.
+ */
+ public static long metricValue(Cluster cluster, String sourceName, String
metricName) {
+ long result = 0;
+
for (int i = 0; i < cluster.runningNodes().count(); i++) {
MetricSet metricSet =
unwrapIgniteImpl(cluster.node(i)).metricManager().metricSnapshot().metrics()
.get(sourceName);
assertThat(metricSet, is(notNullValue()));
- for (String metricName : metricNames) {
- Metric metric = metricSet.get(metricName);
+ Metric metric = metricSet.get(metricName);
- assertThat(metric, is(notNullValue()));
+ assertThat(metric, is(notNullValue()));
- if (metric instanceof IntMetric) {
- values.merge(metricName, (long) ((IntMetric)
metric).value(), Long::sum);
- } else {
- assertThat(
- "Not a LongMetric / IntMetric [name=" + metricName
+ ", class=" + metric.getClass().getSimpleName() + ']',
- metric,
- instanceOf(LongMetric.class));
-
- values.merge(metricName, ((LongMetric) metric).value(),
Long::sum);
- }
+ if (metric instanceof IntMetric) {
+ result += ((IntMetric) metric).value();
+ } else if (metric instanceof LongMetric) {
+ result += ((LongMetric) metric).value();
+ } else {
+ fail("Not a LongMetric / IntMetric [name=" + metricName + ",
class=" + metric.getClass().getSimpleName() + ']');
}
}
- return values;
+ return result;
}
}
diff --git
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/metrics/ItTableMetricsTest.java
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/metrics/ItTableMetricsTest.java
index 31787fe49a5..a4ef4c1b1bc 100644
---
a/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/metrics/ItTableMetricsTest.java
+++
b/modules/table/src/integrationTest/java/org/apache/ignite/internal/table/metrics/ItTableMetricsTest.java
@@ -19,23 +19,15 @@ package org.apache.ignite.internal.table.metrics;
import static java.util.List.of;
import static java.util.stream.Collectors.toList;
-import static org.apache.ignite.internal.TestWrappers.unwrapIgniteImpl;
import static
org.apache.ignite.internal.table.metrics.TableMetricSource.RO_READS;
import static
org.apache.ignite.internal.table.metrics.TableMetricSource.RW_READS;
import static
org.apache.ignite.internal.table.metrics.TableMetricSource.WRITES;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import org.apache.ignite.internal.ClusterPerClassIntegrationTest;
-import org.apache.ignite.internal.metrics.LongMetric;
-import org.apache.ignite.internal.metrics.Metric;
-import org.apache.ignite.internal.metrics.MetricSet;
+import org.apache.ignite.internal.TestMetricUtils;
import org.apache.ignite.table.KeyValueView;
import org.apache.ignite.table.QualifiedName;
import org.apache.ignite.table.RecordView;
@@ -580,60 +572,6 @@ public class ItTableMetricsTest extends
ClusterPerClassIntegrationTest {
List<Long> expectedValues,
Runnable op
) {
- assertThat(metricNames.size(), is(expectedValues.size()));
-
- Map<String, Long> initialValues = metricValues(metricNames);
-
- op.run();
-
- Map<String, Long> actualValues = metricValues(metricNames);
-
- for (int i = 0; i < metricNames.size(); ++i) {
- String metricName = metricNames.get(i);
- long expectedValue = expectedValues.get(i);
-
- long initialValue = initialValues.get(metricName);
- long actualValue = actualValues.get(metricName);
-
- assertThat(
- "The actual metric value does not match the expected value
"
- + "[metric=" + metricName + ", initial=" +
initialValue + ", actual=" + actualValue
- + ", expected=" + (initialValue + expectedValue) +
']',
- actualValue,
- is(initialValue + expectedValue));
- }
- }
-
- /**
- * Returns the sum of the specified metrics on all nodes.
- *
- * @param metricNames Metric names.
- * @return Map of metric names to their values.
- */
- private Map<String, Long> metricValues(List<String> metricNames) {
- Map<String, Long> values = new HashMap<>(metricNames.size());
-
- for (int i = 0; i < initialNodes(); ++i) {
- MetricSet tableMetrics = unwrapIgniteImpl(node(i))
- .metricManager()
- .metricSnapshot()
- .metrics()
- .get(METRIC_SOURCE_NAME);
-
- metricNames.forEach(metricName ->
- values.compute(metricName, (k, v) -> {
- Metric metric = tableMetrics.get(metricName);
-
- assertThat("Metric not found [name=" + metricName +
']', metric, is(notNullValue()));
- assertThat(
- "Metric is not a LongMetric [name=" +
metricName + ", class=" + metric.getClass().getSimpleName() + ']',
- metric,
- instanceOf(LongMetric.class));
-
- return (v == null ? 0 : v) + ((LongMetric)
metric).value();
- }));
- }
-
- return values;
+ TestMetricUtils.testMetricChangeAfterOperation(CLUSTER,
METRIC_SOURCE_NAME, metricNames, expectedValues, op);
}
}