You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by jl...@apache.org on 2019/05/24 15:53:49 UTC
[incubator-pinot] branch master updated: Add metric on
ControllerLeadershipManager (#4236)
This is an automated email from the ASF dual-hosted git repository.
jlli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 45a8430 Add metric on ControllerLeadershipManager (#4236)
45a8430 is described below
commit 45a8430bc3d981b44e2d8e242c75480d7dc593e6
Author: Jialiang Li <jl...@linkedin.com>
AuthorDate: Fri May 24 08:53:43 2019 -0700
Add metric on ControllerLeadershipManager (#4236)
---
.../org/apache/pinot/common/metrics/ControllerGauge.java | 3 +++
.../pinot/controller/ControllerLeadershipManager.java | 13 ++++++++++++-
.../org/apache/pinot/controller/ControllerStarter.java | 5 +++--
.../realtime/PinotLLCRealtimeSegmentManagerTest.java | 9 +++++++--
.../helix/core/realtime/SegmentCompletionTest.java | 16 +++++++++++-----
5 files changed, 36 insertions(+), 10 deletions(-)
diff --git a/pinot-common/src/main/java/org/apache/pinot/common/metrics/ControllerGauge.java b/pinot-common/src/main/java/org/apache/pinot/common/metrics/ControllerGauge.java
index 052979a..97fc4b6 100644
--- a/pinot-common/src/main/java/org/apache/pinot/common/metrics/ControllerGauge.java
+++ b/pinot-common/src/main/java/org/apache/pinot/common/metrics/ControllerGauge.java
@@ -45,6 +45,9 @@ public enum ControllerGauge implements AbstractMetrics.Gauge {
DISABLED_TABLE_COUNT("TableCount", true),
PERIODIC_TASK_NUM_TABLES_PROCESSED("PeriodicTaskNumTablesProcessed", true),
+ // Pinot controller leader
+ PINOT_CONTROLLER_LEADER("PinotControllerLeader", true),
+
// Number of extra live instances needed
SHORT_OF_LIVE_INSTANCES("ShortOfLiveInstances", false),
diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/ControllerLeadershipManager.java b/pinot-controller/src/main/java/org/apache/pinot/controller/ControllerLeadershipManager.java
index 31eef72..035b22d 100644
--- a/pinot-controller/src/main/java/org/apache/pinot/controller/ControllerLeadershipManager.java
+++ b/pinot-controller/src/main/java/org/apache/pinot/controller/ControllerLeadershipManager.java
@@ -22,6 +22,8 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.helix.HelixManager;
import org.apache.helix.api.listeners.ControllerChangeListener;
+import org.apache.pinot.common.metrics.ControllerGauge;
+import org.apache.pinot.common.metrics.ControllerMetrics;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,13 +37,16 @@ public class ControllerLeadershipManager {
private static final Logger LOGGER = LoggerFactory.getLogger(ControllerLeadershipManager.class);
private HelixManager _helixManager;
+ private ControllerMetrics _controllerMetrics;
private volatile boolean _amILeader = false;
private Map<String, LeadershipChangeSubscriber> _subscribers = new ConcurrentHashMap<>();
- public ControllerLeadershipManager(HelixManager helixManager) {
+ public ControllerLeadershipManager(HelixManager helixManager, ControllerMetrics controllerMetrics) {
_helixManager = helixManager;
+ _controllerMetrics = controllerMetrics;
_helixManager.addControllerListener((ControllerChangeListener) notificationContext -> onControllerChange());
+ _controllerMetrics.setValueOfGlobalGauge(ControllerGauge.PINOT_CONTROLLER_LEADER, 0L);
}
/**
@@ -81,11 +86,17 @@ public class ControllerLeadershipManager {
}
private void onBecomingLeader() {
+ long startTimeMs = System.currentTimeMillis();
+ _controllerMetrics.setValueOfGlobalGauge(ControllerGauge.PINOT_CONTROLLER_LEADER, 1L);
_subscribers.forEach((k, v) -> v.onBecomingLeader());
+ LOGGER.info("Finished on becoming leader in {}ms", (System.currentTimeMillis() - startTimeMs));
}
private void onBecomingNonLeader() {
+ long startTimeMs = System.currentTimeMillis();
+ _controllerMetrics.setValueOfGlobalGauge(ControllerGauge.PINOT_CONTROLLER_LEADER, 0L);
_subscribers.forEach((k, v) -> v.onBecomingNonLeader());
+ LOGGER.info("Finished on becoming non-leader in {}ms", (System.currentTimeMillis() - startTimeMs));
}
/**
diff --git a/pinot-controller/src/main/java/org/apache/pinot/controller/ControllerStarter.java b/pinot-controller/src/main/java/org/apache/pinot/controller/ControllerStarter.java
index fd3169c..7e09e7a 100644
--- a/pinot-controller/src/main/java/org/apache/pinot/controller/ControllerStarter.java
+++ b/pinot-controller/src/main/java/org/apache/pinot/controller/ControllerStarter.java
@@ -224,6 +224,7 @@ public class ControllerStarter {
// Emit helix controller metrics
_controllerMetrics.addCallbackGauge(CommonConstants.Helix.INSTANCE_CONNECTED_METRIC_NAME,
() -> _helixControllerManager.isConnected() ? 1L : 0L);
+ // Deprecated, since getting the leadership of Helix does not mean Helix has been ready for pinot.
_controllerMetrics.addCallbackGauge("helix.leader", () -> _helixControllerManager.isLeader() ? 1L : 0L);
_helixControllerManager.addPreConnectCallback(
() -> _controllerMetrics.addMeteredGlobalValue(ControllerMeter.HELIX_ZOOKEEPER_RECONNECTS, 1L));
@@ -252,9 +253,9 @@ public class ControllerStarter {
// Note: Currently leadership depends on helix controller, thus assign helixControllerManager to ControllerLeadershipManager.
// TODO: In the future when Helix separation is completed, leadership only depends on the master in leadControllerResource, and ControllerLeadershipManager will be removed.
if (_helixControllerManager != null) {
- _controllerLeadershipManager = new ControllerLeadershipManager(_helixControllerManager);
+ _controllerLeadershipManager = new ControllerLeadershipManager(_helixControllerManager, _controllerMetrics);
} else {
- _controllerLeadershipManager = new ControllerLeadershipManager(helixParticipantManager);
+ _controllerLeadershipManager = new ControllerLeadershipManager(helixParticipantManager, _controllerMetrics);
}
LOGGER.info("Starting task resource manager");
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/realtime/PinotLLCRealtimeSegmentManagerTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/realtime/PinotLLCRealtimeSegmentManagerTest.java
index fd860c3..646d3bc 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/realtime/PinotLLCRealtimeSegmentManagerTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/realtime/PinotLLCRealtimeSegmentManagerTest.java
@@ -1359,8 +1359,13 @@ public class PinotLLCRealtimeSegmentManagerTest {
protected FakePinotLLCRealtimeSegmentManager(PinotHelixResourceManager pinotHelixResourceManager,
List<String> existingLLCSegments) {
- super(pinotHelixResourceManager, CONTROLLER_CONF, new ControllerMetrics(new MetricsRegistry()),
- new ControllerLeadershipManager(pinotHelixResourceManager.getHelixZkManager()));
+ this(pinotHelixResourceManager, existingLLCSegments, new ControllerMetrics(new MetricsRegistry()));
+ }
+
+ protected FakePinotLLCRealtimeSegmentManager(PinotHelixResourceManager pinotHelixResourceManager,
+ List<String> existingLLCSegments, ControllerMetrics controllerMetrics) {
+ super(pinotHelixResourceManager, CONTROLLER_CONF, controllerMetrics,
+ new ControllerLeadershipManager(pinotHelixResourceManager.getHelixZkManager(), controllerMetrics));
try {
TableConfigCache mockCache = mock(TableConfigCache.class);
diff --git a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/realtime/SegmentCompletionTest.java b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/realtime/SegmentCompletionTest.java
index e13fc87..b05f9bf 100644
--- a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/realtime/SegmentCompletionTest.java
+++ b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/realtime/SegmentCompletionTest.java
@@ -1146,8 +1146,13 @@ public class SegmentCompletionTest {
public HelixManager _helixManager = mock(HelixManager.class);
protected MockPinotLLCRealtimeSegmentManager(PinotHelixResourceManager pinotHelixResourceManager) {
- super(pinotHelixResourceManager, CONTROLLER_CONF, new ControllerMetrics(new MetricsRegistry()),
- new ControllerLeadershipManager(pinotHelixResourceManager.getHelixZkManager()));
+ this(pinotHelixResourceManager, new ControllerMetrics(new MetricsRegistry()));
+ }
+
+ protected MockPinotLLCRealtimeSegmentManager(PinotHelixResourceManager pinotHelixResourceManager,
+ ControllerMetrics controllerMetrics) {
+ super(pinotHelixResourceManager, CONTROLLER_CONF, controllerMetrics,
+ new ControllerLeadershipManager(pinotHelixResourceManager.getHelixZkManager(), controllerMetrics));
}
@Override
@@ -1199,12 +1204,13 @@ public class SegmentCompletionTest {
protected MockSegmentCompletionManager(HelixManager helixManager, PinotLLCRealtimeSegmentManager segmentManager,
boolean isLeader) {
- this(helixManager, segmentManager, isLeader, new ControllerLeadershipManager(helixManager));
+ this(helixManager, segmentManager, isLeader, new ControllerMetrics(new MetricsRegistry()));
}
protected MockSegmentCompletionManager(HelixManager helixManager, PinotLLCRealtimeSegmentManager segmentManager,
- boolean isLeader, ControllerLeadershipManager controllerLeadershipManager) {
- super(helixManager, segmentManager, new ControllerMetrics(new MetricsRegistry()), controllerLeadershipManager,
+ boolean isLeader, ControllerMetrics controllerMetrics) {
+ super(helixManager, segmentManager, controllerMetrics,
+ new ControllerLeadershipManager(helixManager, controllerMetrics),
SegmentCompletionProtocol.getDefaultMaxSegmentCommitTimeSeconds());
_isLeader = isLeader;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org