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 2018/11/29 19:12:37 UTC
[incubator-pinot] 01/01: Add metric gauge to track the number of
llc simultaneous segment builds
This is an automated email from the ASF dual-hosted git repository.
jlli pushed a commit to branch add-guage-for-llc-simultaneous-segment-builds
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
commit e35f4cdecc111341c5acb73935b56db6a9a18871
Author: Jack Li(Analytics Engineering) <jl...@jlli-mn1.linkedin.biz>
AuthorDate: Thu Nov 29 11:12:11 2018 -0800
Add metric gauge to track the number of llc simultaneous segment builds
---
.../pinot/common/metrics/AbstractMetrics.java | 29 +++++++++++++++++++++-
.../linkedin/pinot/common/metrics/ServerGauge.java | 3 ++-
.../realtime/LLRealtimeSegmentDataManager.java | 5 ++++
3 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/pinot-common/src/main/java/com/linkedin/pinot/common/metrics/AbstractMetrics.java b/pinot-common/src/main/java/com/linkedin/pinot/common/metrics/AbstractMetrics.java
index a9f7f4a..8b26ad6 100644
--- a/pinot-common/src/main/java/com/linkedin/pinot/common/metrics/AbstractMetrics.java
+++ b/pinot-common/src/main/java/com/linkedin/pinot/common/metrics/AbstractMetrics.java
@@ -350,7 +350,6 @@ public abstract class AbstractMetrics<QP extends AbstractMetrics.QueryPhase, M e
* @param value The value to set the gauge to
*/
public void setValueOfGlobalGauge(final G gauge, final long value) {
- final String fullGaugeName;
final String gaugeName = gauge.getGaugeName();
if (!_gaugeValues.containsKey(gaugeName)) {
@@ -372,6 +371,34 @@ public abstract class AbstractMetrics<QP extends AbstractMetrics.QueryPhase, M e
}
}
+ /**
+ * Logs a value to a table gauge.
+ *
+ * @param gauge The gauge to use
+ * @param unitCount The number of units to add to the gauge
+ */
+ public void addValueToGlobalGauge(final G gauge, final long unitCount) {
+ String gaugeName = gauge.getGaugeName();
+
+ if (!_gaugeValues.containsKey(gaugeName)) {
+ synchronized (_gaugeValues) {
+ if(!_gaugeValues.containsKey(gaugeName)) {
+ _gaugeValues.put(gaugeName, new AtomicLong(unitCount));
+ addCallbackGauge(gaugeName, new Callable<Long>() {
+ @Override
+ public Long call() throws Exception {
+ return _gaugeValues.get(gaugeName).get();
+ }
+ });
+ } else {
+ _gaugeValues.get(gaugeName).addAndGet(unitCount);
+ }
+ }
+ } else {
+ _gaugeValues.get(gaugeName).addAndGet(unitCount);
+ }
+ }
+
@VisibleForTesting
public long getValueOfGlobalGauge(final G gauge) {
String gaugeName = gauge.getGaugeName();
diff --git a/pinot-common/src/main/java/com/linkedin/pinot/common/metrics/ServerGauge.java b/pinot-common/src/main/java/com/linkedin/pinot/common/metrics/ServerGauge.java
index c562ad7..38e848f 100644
--- a/pinot-common/src/main/java/com/linkedin/pinot/common/metrics/ServerGauge.java
+++ b/pinot-common/src/main/java/com/linkedin/pinot/common/metrics/ServerGauge.java
@@ -41,7 +41,8 @@ public enum ServerGauge implements AbstractMetrics.Gauge {
STREAM_PARTITION_OFFSET_LAG("messages", false),
REALTIME_OFFHEAP_MEMORY_USED("bytes", false),
RUNNING_QUERIES("runningQueries", false),
- REALTIME_SEGMENT_PARTITION_WIDTH("realtimeSegmentPartitionWidth", false);
+ REALTIME_SEGMENT_PARTITION_WIDTH("realtimeSegmentPartitionWidth", false),
+ LLC_SIMULTANEOUS_SEGMENT_BUILDS("llcSimultaneousSegmentBuilds", true);
private final String gaugeName;
private final String unit;
diff --git a/pinot-core/src/main/java/com/linkedin/pinot/core/data/manager/realtime/LLRealtimeSegmentDataManager.java b/pinot-core/src/main/java/com/linkedin/pinot/core/data/manager/realtime/LLRealtimeSegmentDataManager.java
index ec19064..9e88ccb 100644
--- a/pinot-core/src/main/java/com/linkedin/pinot/core/data/manager/realtime/LLRealtimeSegmentDataManager.java
+++ b/pinot-core/src/main/java/com/linkedin/pinot/core/data/manager/realtime/LLRealtimeSegmentDataManager.java
@@ -626,6 +626,9 @@ public class LLRealtimeSegmentDataManager extends RealtimeSegmentDataManager {
segmentLogger.info("Waiting to acquire semaphore for building segment");
_segBuildSemaphore.acquire();
}
+ // Increment llc simultaneous segment builds.
+ _serverMetrics.addValueToGlobalGauge(ServerGauge.LLC_SIMULTANEOUS_SEGMENT_BUILDS, 1L);
+
final long lockAquireTimeMillis = now();
// Build a segment from in-memory rows.If buildTgz is true, then build the tar.gz file as well
// TODO Use an auto-closeable object to delete temp resources.
@@ -681,6 +684,8 @@ public class LLRealtimeSegmentDataManager extends RealtimeSegmentDataManager {
if (_segBuildSemaphore != null) {
_segBuildSemaphore.release();
}
+ // Decrement llc simultaneous segment builds.
+ _serverMetrics.addValueToGlobalGauge(ServerGauge.LLC_SIMULTANEOUS_SEGMENT_BUILDS, -1L);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org