This is an automated email from the ASF dual-hosted git repository.
kharekartik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 894e56e0a2 Expose metric for table rebalance (#12270)
894e56e0a2 is described below
commit 894e56e0a2f3623ed21661caea749d065348256f
Author: Prashant Pandey <[email protected]>
AuthorDate: Fri Jan 19 17:42:30 2024 +0530
Expose metric for table rebalance (#12270)
---
.../etc/jmx_prometheus_javaagent/configs/controller.yml | 12 ------------
.../org/apache/pinot/common/metrics/ControllerGauge.java | 4 +++-
.../apache/pinot/controller/helix/SegmentStatusChecker.java | 1 +
.../helix/core/rebalance/ZkBasedTableRebalanceObserver.java | 8 ++++++++
.../core/rebalance/TestZkBasedTableRebalanceObserver.java | 3 +++
5 files changed, 15 insertions(+), 13 deletions(-)
diff --git
a/docker/images/pinot/etc/jmx_prometheus_javaagent/configs/controller.yml
b/docker/images/pinot/etc/jmx_prometheus_javaagent/configs/controller.yml
index c5c9809d2e..45ff802de3 100644
--- a/docker/images/pinot/etc/jmx_prometheus_javaagent/configs/controller.yml
+++ b/docker/images/pinot/etc/jmx_prometheus_javaagent/configs/controller.yml
@@ -204,18 +204,6 @@ rules:
cache: true
labels:
version: "$2"
-- pattern: "\"org.apache.pinot.common.metrics\"<type=\"ControllerMetrics\",
name=\"pinot.controller.tableConsumptionPaused.([^\\.]*?)_(OFFLINE|REALTIME)\"><>(\\w+)"
- name: "pinot_controller_tableConsumptionPaused_$3"
- cache: true
- labels:
- tableName: "$1"
- tableType: "$2"
-- pattern: "\"org.apache.pinot.common.metrics\"<type=\"ControllerMetrics\",
name=\"pinot.controller.tableDisabled.([^\\.]*?)_(OFFLINE|REALTIME)\"><>(\\w+)"
- name: "pinot_controller_tableDisabled_$3"
- cache: true
- labels:
- tableName: "$1"
- tableType: "$2"
## Metrics that fit the catch-all patterns above should not be added to this
file.
## In case a metric does not fit the catch-all patterns, add them before
this comment
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 3444ffae5f..ca8c141447 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
@@ -153,7 +153,9 @@ public enum ControllerGauge implements
AbstractMetrics.Gauge {
TABLE_CONSUMPTION_PAUSED("tableConsumptionPaused", false),
- TABLE_DISABLED("tableDisabled", false);
+ TABLE_DISABLED("tableDisabled", false),
+
+ TABLE_REBALANCE_IN_PROGRESS("tableRebalanceInProgress", false);
private final String _gaugeName;
private final String _unit;
diff --git
a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/SegmentStatusChecker.java
b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/SegmentStatusChecker.java
index 617564757e..d0af31044f 100644
---
a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/SegmentStatusChecker.java
+++
b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/SegmentStatusChecker.java
@@ -363,6 +363,7 @@ public class SegmentStatusChecker extends
ControllerPeriodicTask<SegmentStatusCh
_controllerMetrics.removeTableGauge(tableNameWithType,
ControllerGauge.PERCENT_SEGMENTS_AVAILABLE);
_controllerMetrics.removeTableGauge(tableNameWithType,
ControllerGauge.TABLE_DISABLED);
_controllerMetrics.removeTableGauge(tableNameWithType,
ControllerGauge.TABLE_CONSUMPTION_PAUSED);
+ _controllerMetrics.removeTableGauge(tableNameWithType,
ControllerGauge.TABLE_REBALANCE_IN_PROGRESS);
}
private void setStatusToDefault() {
diff --git
a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/ZkBasedTableRebalanceObserver.java
b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/ZkBasedTableRebalanceObserver.java
index 7b57147ec0..f02a62cdee 100644
---
a/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/ZkBasedTableRebalanceObserver.java
+++
b/pinot-controller/src/main/java/org/apache/pinot/controller/helix/core/rebalance/ZkBasedTableRebalanceObserver.java
@@ -24,6 +24,8 @@ import com.google.common.base.Preconditions;
import java.util.HashMap;
import java.util.Map;
import org.apache.pinot.common.metadata.controllerjob.ControllerJobType;
+import org.apache.pinot.common.metrics.ControllerGauge;
+import org.apache.pinot.common.metrics.ControllerMetrics;
import org.apache.pinot.controller.helix.core.PinotHelixResourceManager;
import org.apache.pinot.spi.utils.CommonConstants;
import org.apache.pinot.spi.utils.JsonUtils;
@@ -48,6 +50,8 @@ public class ZkBasedTableRebalanceObserver implements
TableRebalanceObserver {
private boolean _isStopped = false;
private RebalanceResult.Status _stopStatus;
+ private final ControllerMetrics _controllerMetrics;
+
public ZkBasedTableRebalanceObserver(String tableNameWithType, String
rebalanceJobId,
TableRebalanceContext tableRebalanceContext, PinotHelixResourceManager
pinotHelixResourceManager) {
Preconditions.checkState(tableNameWithType != null, "Table name cannot be
null");
@@ -59,12 +63,14 @@ public class ZkBasedTableRebalanceObserver implements
TableRebalanceObserver {
_tableRebalanceProgressStats = new TableRebalanceProgressStats();
_tableRebalanceContext = tableRebalanceContext;
_numUpdatesToZk = 0;
+ _controllerMetrics = ControllerMetrics.get();
}
@Override
public void onTrigger(Trigger trigger, Map<String, Map<String, String>>
currentState,
Map<String, Map<String, String>> targetState) {
boolean updatedStatsInZk = false;
+ _controllerMetrics.setValueOfTableGauge(_tableNameWithType,
ControllerGauge.TABLE_REBALANCE_IN_PROGRESS, 1);
switch (trigger) {
case START_TRIGGER:
updateOnStart(currentState, targetState);
@@ -119,6 +125,7 @@ public class ZkBasedTableRebalanceObserver implements
TableRebalanceObserver {
public void onSuccess(String msg) {
Preconditions.checkState(RebalanceResult.Status.DONE !=
_tableRebalanceProgressStats.getStatus(),
"Table Rebalance already completed");
+ _controllerMetrics.setValueOfTableGauge(_tableNameWithType,
ControllerGauge.TABLE_REBALANCE_IN_PROGRESS, 0);
long timeToFinishInSeconds = (System.currentTimeMillis() -
_tableRebalanceProgressStats.getStartTimeMs()) / 1000L;
_tableRebalanceProgressStats.setCompletionStatusMsg(msg);
_tableRebalanceProgressStats.setTimeToFinishInSeconds(timeToFinishInSeconds);
@@ -132,6 +139,7 @@ public class ZkBasedTableRebalanceObserver implements
TableRebalanceObserver {
@Override
public void onError(String errorMsg) {
+ _controllerMetrics.setValueOfTableGauge(_tableNameWithType,
ControllerGauge.TABLE_REBALANCE_IN_PROGRESS, 0);
long timeToFinishInSeconds = (System.currentTimeMillis() -
_tableRebalanceProgressStats.getStartTimeMs()) / 1000;
_tableRebalanceProgressStats.setTimeToFinishInSeconds(timeToFinishInSeconds);
_tableRebalanceProgressStats.setStatus(RebalanceResult.Status.FAILED);
diff --git
a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TestZkBasedTableRebalanceObserver.java
b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TestZkBasedTableRebalanceObserver.java
index 143caebf2b..245aa73aee 100644
---
a/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TestZkBasedTableRebalanceObserver.java
+++
b/pinot-controller/src/test/java/org/apache/pinot/controller/helix/core/rebalance/TestZkBasedTableRebalanceObserver.java
@@ -21,8 +21,10 @@ package org.apache.pinot.controller.helix.core.rebalance;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
+import org.apache.pinot.common.metrics.ControllerMetrics;
import org.apache.pinot.controller.helix.core.PinotHelixResourceManager;
import
org.apache.pinot.controller.helix.core.assignment.segment.SegmentAssignmentUtils;
+import org.mockito.Mockito;
import org.testng.annotations.Test;
import static
org.apache.pinot.spi.utils.CommonConstants.Helix.StateModel.SegmentStateModel.ERROR;
@@ -41,6 +43,7 @@ public class TestZkBasedTableRebalanceObserver {
PinotHelixResourceManager pinotHelixResourceManager =
mock(PinotHelixResourceManager.class);
// Mocking this. We will verify using numZkUpdate stat
when(pinotHelixResourceManager.addControllerJobToZK(any(), any(),
any())).thenReturn(true);
+ ControllerMetrics controllerMetrics =
Mockito.mock(ControllerMetrics.class);
TableRebalanceContext retryCtx = new TableRebalanceContext();
retryCtx.setConfig(new RebalanceConfig());
ZkBasedTableRebalanceObserver observer =
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]