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