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 <j...@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-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org