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);
     }
 }

Reply via email to