This is an automated email from the ASF dual-hosted git repository.

vpyatkov 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 b48f9b31093 IGNITE-26670 Placement driver metrics confusing (#6880)
b48f9b31093 is described below

commit b48f9b31093fb8fbae566e2c1b97ea9bb5426e80
Author: Vladislav Pyatkov <[email protected]>
AuthorDate: Thu Nov 6 12:19:00 2025 +0300

    IGNITE-26670 Placement driver metrics confusing (#6880)
---
 .../placementdriver/AssignmentsTracker.java        |   2 +-
 .../internal/placementdriver/LeaseUpdater.java     |  20 ----
 .../placementdriver/PlacementDriverManager.java    |   5 +-
 .../metrics/PlacementDriverMetricSource.java       | 127 ++++++---------------
 .../metrics/PlacementDriverMetricSourceTest.java   |  26 +++--
 5 files changed, 58 insertions(+), 122 deletions(-)

diff --git 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/AssignmentsTracker.java
 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/AssignmentsTracker.java
index c6eb797349b..97a36c53af1 100644
--- 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/AssignmentsTracker.java
+++ 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/AssignmentsTracker.java
@@ -307,7 +307,7 @@ public class AssignmentsTracker implements 
AssignmentsPlacementDriver {
      *
      * @return Map replication group id to its stable assignments.
      */
-    Map<ReplicationGroupId, TokenizedAssignments> stableAssignments() {
+    public Map<ReplicationGroupId, TokenizedAssignments> stableAssignments() {
         return groupStableAssignments;
     }
 
diff --git 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
index 42aa71e99c7..3824ef964bb 100644
--- 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
+++ 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/LeaseUpdater.java
@@ -71,7 +71,6 @@ import 
org.apache.ignite.internal.placementdriver.message.PlacementDriverMessage
 import 
org.apache.ignite.internal.placementdriver.message.PlacementDriverMessagesFactory;
 import 
org.apache.ignite.internal.placementdriver.message.StopLeaseProlongationMessage;
 import 
org.apache.ignite.internal.placementdriver.message.StopLeaseProlongationMessageResponse;
-import 
org.apache.ignite.internal.placementdriver.metrics.PlacementDriverMetricSource;
 import org.apache.ignite.internal.placementdriver.negotiation.LeaseAgreement;
 import org.apache.ignite.internal.placementdriver.negotiation.LeaseNegotiator;
 import org.apache.ignite.internal.replicator.ReplicationGroupId;
@@ -122,8 +121,6 @@ public class LeaseUpdater {
     /** Cluster clock. */
     private final ClockService clockService;
 
-    private final PlacementDriverMetricSource placementDriverMetrics;
-
     /** Closure to update leases. */
     private final Updater updater;
 
@@ -175,13 +172,6 @@ public class LeaseUpdater {
         this.updater = new Updater();
         this.throttledLogExecutor = throttledLogExecutor;
 
-        this.placementDriverMetrics = new PlacementDriverMetricSource(
-                updater::activeLeaseCount,
-                updater::leaseWithoutCandidatesCount,
-                () -> assignmentsTracker.stableAssignments().size(),
-                () -> assignmentsTracker.pendingAssignments().size()
-        );
-
         
clusterService.messagingService().addMessageHandler(PlacementDriverMessageGroup.class,
 new PlacementDriverActorMessageHandler());
     }
 
@@ -385,10 +375,6 @@ public class LeaseUpdater {
         return active.get();
     }
 
-    PlacementDriverMetricSource placementDriverMetricSource() {
-        return placementDriverMetrics;
-    }
-
     /** Runnable to update lease in Meta storage. */
     private class Updater implements Runnable {
         private int activeLeaseCount;
@@ -666,8 +652,6 @@ public class LeaseUpdater {
 
             renewedLeases.put(grpId, renewedLease);
 
-            placementDriverMetrics.onLeaseCreate();
-
             return renewedLease;
         }
 
@@ -682,8 +666,6 @@ public class LeaseUpdater {
                 Lease lease,
                 HybridTimestamp newExpirationTimestamp
         ) {
-            placementDriverMetrics.onLeaseProlong();
-
             return lease.prolongLease(newExpirationTimestamp);
         }
 
@@ -705,8 +687,6 @@ public class LeaseUpdater {
             Lease renewedLease = lease.acceptLease(newTs);
 
             renewedLeases.put(grpId, renewedLease);
-
-            placementDriverMetrics.onLeasePublish();
         }
 
         /**
diff --git 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriverManager.java
 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriverManager.java
index d80b1f52286..dd696e90092 100644
--- 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriverManager.java
+++ 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/PlacementDriverManager.java
@@ -111,6 +111,8 @@ public class PlacementDriverManager implements 
IgniteComponent {
 
     private final MetricManager metricManager;
 
+    private final PlacementDriverMetricSource metricSource;
+
     /**
      * Constructor.
      *
@@ -189,6 +191,7 @@ public class PlacementDriverManager implements 
IgniteComponent {
 
         this.placementDriver = createPlacementDriver();
         this.metricManager = metricManager;
+        this.metricSource = new PlacementDriverMetricSource(leaseTracker, 
assignmentsTracker);
     }
 
     @Override
@@ -233,7 +236,7 @@ public class PlacementDriverManager implements 
IgniteComponent {
 
             recoverInternalComponentsBusy();
 
-            
metricManager.registerSource(leaseUpdater.placementDriverMetricSource());
+            metricManager.registerSource(metricSource);
             metricManager.enable(PlacementDriverMetricSource.SOURCE_NAME);
         });
 
diff --git 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/metrics/PlacementDriverMetricSource.java
 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/metrics/PlacementDriverMetricSource.java
index 30c6e5b472a..904a54ef068 100644
--- 
a/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/metrics/PlacementDriverMetricSource.java
+++ 
b/modules/placement-driver/src/main/java/org/apache/ignite/internal/placementdriver/metrics/PlacementDriverMetricSource.java
@@ -18,12 +18,12 @@
 package org.apache.ignite.internal.placementdriver.metrics;
 
 import java.util.List;
-import java.util.function.IntSupplier;
 import org.apache.ignite.internal.metrics.AbstractMetricSource;
 import org.apache.ignite.internal.metrics.IntGauge;
-import org.apache.ignite.internal.metrics.IntMetric;
-import org.apache.ignite.internal.metrics.LongAdderMetric;
 import org.apache.ignite.internal.metrics.Metric;
+import org.apache.ignite.internal.placementdriver.AssignmentsTracker;
+import org.apache.ignite.internal.placementdriver.leases.Lease;
+import org.apache.ignite.internal.placementdriver.leases.LeaseTracker;
 import 
org.apache.ignite.internal.placementdriver.metrics.PlacementDriverMetricSource.Holder;
 
 /**
@@ -33,31 +33,23 @@ public class PlacementDriverMetricSource extends 
AbstractMetricSource<Holder> {
     /** Source name. */
     public static final String SOURCE_NAME = "placement-driver";
 
-    private final IntSupplier activeLeaseSupplier;
-    private final IntSupplier leaseWithoutCandidatesSupplier;
-    private final IntSupplier currentStableAssignmentSizeSupplier;
-    private final IntSupplier currentPendingAssignmentSizeSupplier;
+    private final LeaseTracker leaseTracker;
+    private final AssignmentsTracker assignmentsTracker;
 
     /**
      * Constructor.
      *
-     * @param activeLeaseSupplier Supplier for active leases count.
-     * @param leaseWithoutCandidatesSupplier Supplier for leases without 
candidates count.
-     * @param currentStableAssignmentSizeSupplier Supplier for the stable 
assignments count.
-     * @param currentPendingAssignmentSizeSupplier Supplier for the pending 
assignments count.
+     * @param leaseTracker Lease tracker.
+     * @param assignmentsTracker Assignments tracker.
      */
     public PlacementDriverMetricSource(
-            IntSupplier activeLeaseSupplier,
-            IntSupplier leaseWithoutCandidatesSupplier,
-            IntSupplier currentStableAssignmentSizeSupplier,
-            IntSupplier currentPendingAssignmentSizeSupplier
+            LeaseTracker leaseTracker,
+            AssignmentsTracker assignmentsTracker
     ) {
         super(SOURCE_NAME, "Placement driver metrics.");
 
-        this.activeLeaseSupplier = activeLeaseSupplier;
-        this.leaseWithoutCandidatesSupplier = leaseWithoutCandidatesSupplier;
-        this.currentStableAssignmentSizeSupplier = 
currentStableAssignmentSizeSupplier;
-        this.currentPendingAssignmentSizeSupplier = 
currentPendingAssignmentSizeSupplier;
+        this.leaseTracker = leaseTracker;
+        this.assignmentsTracker = assignmentsTracker;
     }
 
     @Override
@@ -65,90 +57,47 @@ public class PlacementDriverMetricSource extends 
AbstractMetricSource<Holder> {
         return new Holder();
     }
 
-    /**
-     * Is called on lease creation.
-     */
-    public void onLeaseCreate() {
-        Holder holder = holder();
-        if (holder != null) {
-            holder.leasesCreated.increment();
-        }
-    }
-
-    /**
-     * Is called on lease prolongation.
-     */
-    public void onLeaseProlong() {
-        Holder holder = holder();
-        if (holder != null) {
-            holder.leasesProlonged.increment();
-        }
-    }
-
-    /**
-     * Is called on lease publishing.
-     */
-    public void onLeasePublish() {
-        Holder holder = holder();
-        if (holder != null) {
-            holder.leasesPublished.increment();
-        }
-    }
-
     /** Holder. */
     protected class Holder implements AbstractMetricSource.Holder<Holder> {
-        private final LongAdderMetric leasesCreated = new LongAdderMetric(
-                "LeasesCreated",
-                "Total number of created leases."
-        );
-
-        private final LongAdderMetric leasesPublished = new LongAdderMetric(
-                "LeasesPublished",
-                "Total number of published leases."
-        );
-
-        private final LongAdderMetric leasesProlonged = new LongAdderMetric(
-                "LeasesProlonged",
-                "Total number of prolonged leases."
-        );
-
-        private final IntMetric activeLeaseCount = new IntGauge(
-                "ActiveLeasesCount",
-                "Number of currently active leases.",
-                activeLeaseSupplier
+        private final IntGauge acceptedLeases = new IntGauge(
+                "AcceptedLeases",
+                "Number of accepted leases.",
+                () -> numberOfLeases(true)
         );
 
-        private final IntMetric leaseWithoutCandidates = new IntGauge(
-                "LeasesWithoutCandidates",
-                "Number of leases without candidates currently existing.",
-                leaseWithoutCandidatesSupplier
+        private final IntGauge leaseNegotiations = new IntGauge(
+                "LeaseNegotiations",
+                "Number of leases under negotiation.",
+                () -> numberOfLeases(false)
         );
 
-        private final IntMetric currentStableAssignmentSize = new IntGauge(
-                "CurrentStableAssignmentsSize",
-                "Current size of stable assignments over all partitions.",
-                currentStableAssignmentSizeSupplier
-        );
-
-        private final IntMetric currentPendingAssignmentSize = new IntGauge(
-                "CurrentPendingAssignmentsSize",
-                "Current size of pending assignments over all partitions.",
-                currentPendingAssignmentSizeSupplier
+        private final IntGauge replicationGroups = new IntGauge(
+                "ReplicationGroups",
+                "Current number of replication groups.",
+                () -> assignmentsTracker.stableAssignments().size()
         );
 
         private final List<Metric> metrics = List.of(
-                leasesCreated,
-                leasesPublished,
-                leasesProlonged,
-                leaseWithoutCandidates,
-                activeLeaseCount,
-                currentStableAssignmentSize,
-                currentPendingAssignmentSize
+                acceptedLeases,
+                leaseNegotiations,
+                replicationGroups
         );
 
         @Override
         public Iterable<Metric> metrics() {
             return metrics;
         }
+
+        private int numberOfLeases(boolean accepted) {
+            int count = 0;
+
+            for (Lease lease : 
leaseTracker.leasesCurrent().leaseByGroupId().values()) {
+                if (lease != null && accepted == lease.isAccepted()) {
+                    count++;
+                }
+            }
+
+            return count;
+        }
     }
 }
diff --git 
a/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/metrics/PlacementDriverMetricSourceTest.java
 
b/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/metrics/PlacementDriverMetricSourceTest.java
index d71de0c1ed4..39be8fff246 100644
--- 
a/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/metrics/PlacementDriverMetricSourceTest.java
+++ 
b/modules/placement-driver/src/test/java/org/apache/ignite/internal/placementdriver/metrics/PlacementDriverMetricSourceTest.java
@@ -23,17 +23,27 @@ import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import java.util.Set;
-import java.util.function.IntSupplier;
 import java.util.stream.StreamSupport;
 import org.apache.ignite.internal.metrics.Metric;
 import org.apache.ignite.internal.metrics.MetricSet;
+import org.apache.ignite.internal.placementdriver.AssignmentsTracker;
+import org.apache.ignite.internal.placementdriver.leases.LeaseTracker;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
 
 /**
  * Tests metric source name and metric names.
  */
+@ExtendWith(MockitoExtension.class)
 public class PlacementDriverMetricSourceTest extends BaseIgniteAbstractTest {
+    @Mock
+    private LeaseTracker leaseTracker;
+    @Mock
+    private AssignmentsTracker assignmentsTracker;
+
     @Test
     void testMetricSourceName() {
         assertThat(PlacementDriverMetricSource.SOURCE_NAME, 
is("placement-driver"));
@@ -41,22 +51,16 @@ public class PlacementDriverMetricSourceTest extends 
BaseIgniteAbstractTest {
 
     @Test
     void testMetricNames() {
-        IntSupplier is = () -> 0;
-
-        var metricSource = new PlacementDriverMetricSource(is, is, is, is);
+        var metricSource = new PlacementDriverMetricSource(leaseTracker, 
assignmentsTracker);
 
         MetricSet set = metricSource.enable();
 
         assertThat(set, is(notNullValue()));
 
         Set<String> expectedMetrics = Set.of(
-                "LeasesCreated",
-                "LeasesPublished",
-                "LeasesProlonged",
-                "ActiveLeasesCount",
-                "LeasesWithoutCandidates",
-                "CurrentStableAssignmentsSize",
-                "CurrentPendingAssignmentsSize"
+                "AcceptedLeases",
+                "LeaseNegotiations",
+                "ReplicationGroups"
         );
 
         var actualMetrics = StreamSupport.stream(set.spliterator(), 
false).map(Metric::name).collect(toSet());

Reply via email to