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

Reply via email to