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/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 1a82ba6fc6 Add CPU metrics for minion purge task (#12337)
1a82ba6fc6 is described below

commit 1a82ba6fc6e9ac90f8149bf9432b8cc94eeab8b0
Author: Florence Zhang <flore...@gmail.com>
AuthorDate: Mon Jan 29 21:01:02 2024 -0800

    Add CPU metrics for minion purge task (#12337)
---
 .../org/apache/pinot/common/metrics/MinionTimer.java  |  2 +-
 .../plugin/minion/tasks/purge/PurgeTaskExecutor.java  | 19 +++++++++++++++++--
 .../minion/tasks/purge/PurgeTaskExecutorTest.java     |  3 ++-
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/metrics/MinionTimer.java 
b/pinot-common/src/main/java/org/apache/pinot/common/metrics/MinionTimer.java
index ff29a2c367..67d2830c81 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/common/metrics/MinionTimer.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/common/metrics/MinionTimer.java
@@ -22,7 +22,7 @@ import org.apache.pinot.common.Utils;
 
 
 public enum MinionTimer implements AbstractMetrics.Timer {
-  TASK_EXECUTION(false), TASK_QUEUEING(false);
+  TASK_EXECUTION(false), TASK_QUEUEING(false), TASK_THREAD_CPU_TIME_NS(false);
 
   private final String _timerName;
   private final boolean _global;
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/purge/PurgeTaskExecutor.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/purge/PurgeTaskExecutor.java
index bbc9af3b54..f6b0ca8e39 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/purge/PurgeTaskExecutor.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/purge/PurgeTaskExecutor.java
@@ -19,9 +19,14 @@
 package org.apache.pinot.plugin.minion.tasks.purge;
 
 import java.io.File;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
 import java.util.Collections;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 import 
org.apache.pinot.common.metadata.segment.SegmentZKMetadataCustomMapModifier;
+import org.apache.pinot.common.metrics.MinionMetrics;
+import org.apache.pinot.common.metrics.MinionTimer;
 import org.apache.pinot.core.common.MinionConstants;
 import org.apache.pinot.core.minion.PinotTaskConfig;
 import org.apache.pinot.core.minion.SegmentPurger;
@@ -30,13 +35,18 @@ import 
org.apache.pinot.plugin.minion.tasks.SegmentConversionResult;
 import org.apache.pinot.spi.config.table.TableConfig;
 import org.apache.pinot.spi.data.Schema;
 import org.apache.pinot.spi.utils.builder.TableNameBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 public class PurgeTaskExecutor extends BaseSingleSegmentConversionExecutor {
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(PurgeTaskExecutor.class);
+  protected final MinionMetrics _minionMetrics = MinionMetrics.get();
   public static final String RECORD_PURGER_KEY = "recordPurger";
   public static final String RECORD_MODIFIER_KEY = "recordModifier";
   public static final String NUM_RECORDS_PURGED_KEY = "numRecordsPurged";
   public static final String NUM_RECORDS_MODIFIED_KEY = "numRecordsModified";
+  private static final ThreadMXBean MX_BEAN = 
ManagementFactory.getThreadMXBean();
 
   @Override
   protected SegmentConversionResult convert(PinotTaskConfig pinotTaskConfig, 
File indexDir, File workingDir)
@@ -44,6 +54,7 @@ public class PurgeTaskExecutor extends 
BaseSingleSegmentConversionExecutor {
     Map<String, String> configs = pinotTaskConfig.getConfigs();
     String tableNameWithType = configs.get(MinionConstants.TABLE_NAME_KEY);
     String rawTableName = 
TableNameBuilder.extractRawTableName(tableNameWithType);
+    String taskType = pinotTaskConfig.getTaskType();
 
     SegmentPurger.RecordPurgerFactory recordPurgerFactory = 
MINION_CONTEXT.getRecordPurgerFactory();
     TableConfig tableConfig = getTableConfig(tableNameWithType);
@@ -57,7 +68,11 @@ public class PurgeTaskExecutor extends 
BaseSingleSegmentConversionExecutor {
     _eventObserver.notifyProgress(pinotTaskConfig, "Purging segment: " + 
indexDir);
     SegmentPurger segmentPurger =
         new SegmentPurger(indexDir, workingDir, tableConfig, schema, 
recordPurger, recordModifier);
+    long purgeTaskStartTimeNs = MX_BEAN.getCurrentThreadCpuTime();
     File purgedSegmentFile = segmentPurger.purgeSegment();
+    long purgeTaskEndTimeNs = MX_BEAN.getCurrentThreadCpuTime();
+    _minionMetrics.addTimedTableValue(tableNameWithType, taskType, 
MinionTimer.TASK_THREAD_CPU_TIME_NS,
+        purgeTaskEndTimeNs - purgeTaskStartTimeNs, TimeUnit.NANOSECONDS);
     if (purgedSegmentFile == null) {
       purgedSegmentFile = indexDir;
     }
@@ -73,8 +88,8 @@ public class PurgeTaskExecutor extends 
BaseSingleSegmentConversionExecutor {
   @Override
   protected SegmentZKMetadataCustomMapModifier 
getSegmentZKMetadataCustomMapModifier(PinotTaskConfig pinotTaskConfig,
       SegmentConversionResult segmentConversionResult) {
-    return new 
SegmentZKMetadataCustomMapModifier(SegmentZKMetadataCustomMapModifier.ModifyMode.UPDATE,
 Collections
-        .singletonMap(MinionConstants.PurgeTask.TASK_TYPE + 
MinionConstants.TASK_TIME_SUFFIX,
+    return new 
SegmentZKMetadataCustomMapModifier(SegmentZKMetadataCustomMapModifier.ModifyMode.UPDATE,
+        Collections.singletonMap(MinionConstants.PurgeTask.TASK_TYPE + 
MinionConstants.TASK_TIME_SUFFIX,
             String.valueOf(System.currentTimeMillis())));
   }
 }
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/test/java/org/apache/pinot/plugin/minion/tasks/purge/PurgeTaskExecutorTest.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/test/java/org/apache/pinot/plugin/minion/tasks/purge/PurgeTaskExecutorTest.java
index 29a2cdd25a..8cf0cb1414 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/test/java/org/apache/pinot/plugin/minion/tasks/purge/PurgeTaskExecutorTest.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/test/java/org/apache/pinot/plugin/minion/tasks/purge/PurgeTaskExecutorTest.java
@@ -26,6 +26,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.helix.AccessOption;
 import org.apache.helix.store.zk.ZkHelixPropertyStore;
 import org.apache.helix.zookeeper.datamodel.ZNRecord;
+import org.apache.pinot.common.metrics.MinionMetrics;
 import org.apache.pinot.common.utils.SchemaUtils;
 import org.apache.pinot.common.utils.config.TableConfigUtils;
 import org.apache.pinot.core.common.MinionConstants;
@@ -70,7 +71,7 @@ public class PurgeTaskExecutorTest {
   public void setUp()
       throws Exception {
     FileUtils.deleteDirectory(TEMP_DIR);
-
+    MinionMetrics.register(Mockito.mock(MinionMetrics.class));
     TableConfig tableConfig = new 
TableConfigBuilder(TableType.OFFLINE).setTableName(TABLE_NAME).build();
     Schema schema = new Schema.SchemaBuilder().addSingleValueDimension(D1, 
FieldSpec.DataType.INT).build();
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to