This is an automated email from the ASF dual-hosted git repository.

xiangfu 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 0a80ad613d Add Obfuscator for task config logging in minion builtin 
tasks (#16192)
0a80ad613d is described below

commit 0a80ad613d5b314b833df535a96fd7e909664cbb
Author: Xiang Fu <xiangfu.1...@gmail.com>
AuthorDate: Wed Jun 25 16:35:30 2025 +0800

    Add Obfuscator for task config logging in minion builtin tasks (#16192)
    
    - Add Obfuscator import to task executor files that log sensitive config 
data
    - Replace direct logging of configs with obfuscated versions using new 
Obfuscator().toJsonString(configs)
    - Wrap logger statements with appropriate level checks (isInfoEnabled, 
isErrorEnabled) for performance optimization
    - Updated files:
      - MergeRollupTaskExecutor
      - RealtimeToOfflineSegmentsTaskExecutor
      - RefreshSegmentTaskExecutor
      - SegmentGenerationAndPushTaskExecutor
      - SegmentGenerationAndPushTaskGenerator
      - UpsertCompactMergeTaskExecutor
      - UpsertCompactionTaskExecutor (already had partial implementation)
    
    This change improves security by preventing sensitive configuration data 
from being logged in plain text, while maintaining performance through proper 
logger level checks.
---
 .../org/apache/pinot/common/utils/PinotAppConfigs.java     |  2 +-
 .../controller/api/PinotControllerAppConfigsTest.java      |  3 +--
 .../pinot/minion/taskfactory/TaskFactoryRegistry.java      |  2 +-
 .../pinot/minion/taskfactory/TaskFactoryRegistryTest.java  |  6 ++----
 .../minion/tasks/mergerollup/MergeRollupTaskExecutor.java  | 10 ++++++++--
 .../RealtimeToOfflineSegmentsTaskExecutor.java             | 10 ++++++++--
 .../tasks/refreshsegment/RefreshSegmentTaskExecutor.java   | 11 ++++++++---
 .../SegmentGenerationAndPushTaskExecutor.java              |  6 +++++-
 .../SegmentGenerationAndPushTaskGenerator.java             | 14 ++++++++++----
 .../upsertcompaction/UpsertCompactionTaskExecutor.java     | 13 +++++++++----
 .../upsertcompactmerge/UpsertCompactMergeTaskExecutor.java | 10 ++++++++--
 .../apache/pinot/server/api/PinotServerAppConfigsTest.java |  3 +--
 .../java/org/apache/pinot/spi/env/PinotConfiguration.java  |  2 +-
 .../main/java/org/apache/pinot/spi/utils/Obfuscator.java   |  5 +++--
 14 files changed, 66 insertions(+), 31 deletions(-)

diff --git 
a/pinot-common/src/main/java/org/apache/pinot/common/utils/PinotAppConfigs.java 
b/pinot-common/src/main/java/org/apache/pinot/common/utils/PinotAppConfigs.java
index 6f93bf8a19..0f29c3a287 100644
--- 
a/pinot-common/src/main/java/org/apache/pinot/common/utils/PinotAppConfigs.java
+++ 
b/pinot-common/src/main/java/org/apache/pinot/common/utils/PinotAppConfigs.java
@@ -340,7 +340,7 @@ public class PinotAppConfigs {
 
   public String toJSONString() {
     try {
-      return JsonUtils.objectToPrettyString(new Obfuscator().toJson(this));
+      return JsonUtils.objectToPrettyString(Obfuscator.DEFAULT.toJson(this));
     } catch (JsonProcessingException e) {
       return e.getMessage();
     }
diff --git 
a/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotControllerAppConfigsTest.java
 
b/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotControllerAppConfigsTest.java
index 4d0ff555e9..9763a156d5 100644
--- 
a/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotControllerAppConfigsTest.java
+++ 
b/pinot-controller/src/test/java/org/apache/pinot/controller/api/PinotControllerAppConfigsTest.java
@@ -69,8 +69,7 @@ public class PinotControllerAppConfigsTest {
     assertEquals(actualSystemConfig.getTotalSwapSpace(), 
expectedSystemConfig.getTotalSwapSpace());
 
     // tests Equals on obfuscated expected and actual
-    Obfuscator obfuscator = new Obfuscator();
-    String obfuscatedExpectedJson = obfuscator.toJsonString(expected);
+    String obfuscatedExpectedJson = Obfuscator.DEFAULT.toJsonString(expected);
     PinotAppConfigs obfuscatedExpected = 
JsonUtils.stringToObject(obfuscatedExpectedJson, PinotAppConfigs.class);
     assertEquals(actual.getJvmConfig(), obfuscatedExpected.getJvmConfig());
     assertEquals(actual.getPinotConfig(), obfuscatedExpected.getPinotConfig());
diff --git 
a/pinot-minion/src/main/java/org/apache/pinot/minion/taskfactory/TaskFactoryRegistry.java
 
b/pinot-minion/src/main/java/org/apache/pinot/minion/taskfactory/TaskFactoryRegistry.java
index 08b192efce..209c33347d 100644
--- 
a/pinot-minion/src/main/java/org/apache/pinot/minion/taskfactory/TaskFactoryRegistry.java
+++ 
b/pinot-minion/src/main/java/org/apache/pinot/minion/taskfactory/TaskFactoryRegistry.java
@@ -148,7 +148,7 @@ public class TaskFactoryRegistry {
               _eventObserver.notifyTaskStart(pinotTaskConfig);
               if (LOGGER.isInfoEnabled()) {
                 LOGGER.info("Start running {}: {} with configs: {}", 
pinotTaskConfig.getTaskType(), _taskConfig.getId(),
-                    new 
Obfuscator().toJsonString(pinotTaskConfig.getConfigs()));
+                    
Obfuscator.DEFAULT.toJsonString(pinotTaskConfig.getConfigs()));
               }
 
               try {
diff --git 
a/pinot-minion/src/test/java/org/apache/pinot/minion/taskfactory/TaskFactoryRegistryTest.java
 
b/pinot-minion/src/test/java/org/apache/pinot/minion/taskfactory/TaskFactoryRegistryTest.java
index c4bd06461a..8a0c4e0f25 100644
--- 
a/pinot-minion/src/test/java/org/apache/pinot/minion/taskfactory/TaskFactoryRegistryTest.java
+++ 
b/pinot-minion/src/test/java/org/apache/pinot/minion/taskfactory/TaskFactoryRegistryTest.java
@@ -38,8 +38,7 @@ public class TaskFactoryRegistryTest {
     configs.put("apiKey", "sk-1234567890abcdef");
     configs.put("normalConfig", "normalValue");
 
-    Obfuscator obfuscator = new Obfuscator();
-    String obfuscatedJson = obfuscator.toJsonString(configs);
+    String obfuscatedJson = Obfuscator.DEFAULT.toJsonString(configs);
 
     // Verify that sensitive values are masked
     Assert.assertTrue(obfuscatedJson.contains("tableName"));
@@ -66,8 +65,7 @@ public class TaskFactoryRegistryTest {
     configs.put("password", "");
     configs.put("normalConfig", "value");
 
-    Obfuscator obfuscator = new Obfuscator();
-    String obfuscatedJson = obfuscator.toJsonString(configs);
+    String obfuscatedJson = Obfuscator.DEFAULT.toJsonString(configs);
 
     // Verify that null and empty values are handled properly
     Assert.assertTrue(obfuscatedJson.contains("\"authToken\":\"*****\""));
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/mergerollup/MergeRollupTaskExecutor.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/mergerollup/MergeRollupTaskExecutor.java
index ea0133b5e4..4a2e6bbc0b 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/mergerollup/MergeRollupTaskExecutor.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/mergerollup/MergeRollupTaskExecutor.java
@@ -39,6 +39,7 @@ import org.apache.pinot.spi.config.table.TableConfig;
 import org.apache.pinot.spi.data.Schema;
 import org.apache.pinot.spi.data.readers.RecordReader;
 import org.apache.pinot.spi.recordtransformer.RecordTransformer;
+import org.apache.pinot.spi.utils.Obfuscator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -61,7 +62,9 @@ public class MergeRollupTaskExecutor extends 
BaseMultipleSegmentsConversionExecu
     _eventObserver.notifyProgress(pinotTaskConfig, "Converting segments: " + 
numInputSegments);
     String taskType = pinotTaskConfig.getTaskType();
     Map<String, String> configs = pinotTaskConfig.getConfigs();
-    LOGGER.info("Starting task: {} with configs: {}", taskType, configs);
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Starting task: {} with configs: {}", taskType, 
Obfuscator.DEFAULT.toJsonString(configs));
+    }
     long startMillis = System.currentTimeMillis();
 
     String tableNameWithType = configs.get(MinionConstants.TABLE_NAME_KEY);
@@ -130,7 +133,10 @@ public class MergeRollupTaskExecutor extends 
BaseMultipleSegmentsConversionExecu
     }
 
     long endMillis = System.currentTimeMillis();
-    LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms", 
taskType, configs, (endMillis - startMillis));
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms", 
taskType,
+          Obfuscator.DEFAULT.toJsonString(configs), (endMillis - startMillis));
+    }
     List<SegmentConversionResult> results = new ArrayList<>();
     for (File outputSegmentDir : outputSegmentDirs) {
       String outputSegmentName = outputSegmentDir.getName();
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/realtimetoofflinesegments/RealtimeToOfflineSegmentsTaskExecutor.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/realtimetoofflinesegments/RealtimeToOfflineSegmentsTaskExecutor.java
index f355d94636..850cba6093 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/realtimetoofflinesegments/RealtimeToOfflineSegmentsTaskExecutor.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/realtimetoofflinesegments/RealtimeToOfflineSegmentsTaskExecutor.java
@@ -43,6 +43,7 @@ import 
org.apache.pinot.segment.local.segment.readers.PinotSegmentRecordReader;
 import org.apache.pinot.spi.config.table.TableConfig;
 import org.apache.pinot.spi.data.Schema;
 import org.apache.pinot.spi.data.readers.RecordReader;
+import org.apache.pinot.spi.utils.Obfuscator;
 import org.apache.pinot.spi.utils.builder.TableNameBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -116,7 +117,9 @@ public class RealtimeToOfflineSegmentsTaskExecutor extends 
BaseMultipleSegmentsC
     _eventObserver.notifyProgress(pinotTaskConfig, "Converting segments: " + 
numInputSegments);
     String taskType = pinotTaskConfig.getTaskType();
     Map<String, String> configs = pinotTaskConfig.getConfigs();
-    LOGGER.info("Starting task: {} with configs: {}", taskType, configs);
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Starting task: {} with configs: {}", taskType, 
Obfuscator.DEFAULT.toJsonString(configs));
+    }
     long startMillis = System.currentTimeMillis();
 
     String realtimeTableName = configs.get(MinionConstants.TABLE_NAME_KEY);
@@ -188,7 +191,10 @@ public class RealtimeToOfflineSegmentsTaskExecutor extends 
BaseMultipleSegmentsC
     }
 
     long endMillis = System.currentTimeMillis();
-    LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms", 
taskType, configs, (endMillis - startMillis));
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms", 
taskType,
+          Obfuscator.DEFAULT.toJsonString(configs), (endMillis - startMillis));
+    }
     List<SegmentConversionResult> results = new ArrayList<>();
     for (File outputSegmentDir : outputSegmentDirs) {
       String outputSegmentName = outputSegmentDir.getName();
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/refreshsegment/RefreshSegmentTaskExecutor.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/refreshsegment/RefreshSegmentTaskExecutor.java
index 9d1b2f7b8c..12e3e1a2c0 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/refreshsegment/RefreshSegmentTaskExecutor.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/refreshsegment/RefreshSegmentTaskExecutor.java
@@ -43,6 +43,7 @@ import org.apache.pinot.spi.config.table.TableConfig;
 import org.apache.pinot.spi.data.FieldSpec;
 import org.apache.pinot.spi.data.Schema;
 import org.apache.pinot.spi.env.PinotConfiguration;
+import org.apache.pinot.spi.utils.Obfuscator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -72,7 +73,9 @@ public class RefreshSegmentTaskExecutor extends 
BaseSingleSegmentConversionExecu
     String segmentName = configs.get(MinionConstants.SEGMENT_NAME_KEY);
     String taskType = pinotTaskConfig.getTaskType();
 
-    LOGGER.info("Starting task: {} with configs: {}", taskType, configs);
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Starting task: {} with configs: {}", taskType, 
Obfuscator.DEFAULT.toJsonString(configs));
+    }
 
     TableConfig tableConfig = getTableConfig(tableNameWithType);
     Schema schema = getSchema(tableNameWithType);
@@ -160,8 +163,10 @@ public class RefreshSegmentTaskExecutor extends 
BaseSingleSegmentConversionExecu
         .build();
 
     long endMillis = System.currentTimeMillis();
-    LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms", 
taskType, configs,
-        (endMillis - _taskStartTime));
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms", 
taskType,
+          Obfuscator.DEFAULT.toJsonString(configs), (endMillis - 
_taskStartTime));
+    }
 
     return result;
   }
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/segmentgenerationandpush/SegmentGenerationAndPushTaskExecutor.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/segmentgenerationandpush/SegmentGenerationAndPushTaskExecutor.java
index 0a800f3f64..fb97f90cc8 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/segmentgenerationandpush/SegmentGenerationAndPushTaskExecutor.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/segmentgenerationandpush/SegmentGenerationAndPushTaskExecutor.java
@@ -54,6 +54,7 @@ import org.apache.pinot.spi.ingestion.batch.spec.TableSpec;
 import org.apache.pinot.spi.utils.DataSizeUtils;
 import org.apache.pinot.spi.utils.IngestionConfigUtils;
 import org.apache.pinot.spi.utils.JsonUtils;
+import org.apache.pinot.spi.utils.Obfuscator;
 import org.apache.pinot.spi.utils.retry.AttemptsExceededException;
 import org.apache.pinot.spi.utils.retry.RetriableOperationException;
 import org.slf4j.Logger;
@@ -114,7 +115,10 @@ public class SegmentGenerationAndPushTaskExecutor extends 
BaseTaskExecutor {
   @Override
   public Object executeTask(PinotTaskConfig pinotTaskConfig)
       throws Exception {
-    LOGGER.info("Executing SegmentGenerationAndPushTask with task config: {}", 
pinotTaskConfig);
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Executing SegmentGenerationAndPushTask with task config: 
{}",
+          Obfuscator.DEFAULT.toJsonString(pinotTaskConfig));
+    }
     Map<String, String> taskConfigs = pinotTaskConfig.getConfigs();
     SegmentGenerationAndPushResult.Builder resultBuilder = new 
SegmentGenerationAndPushResult.Builder();
     File localTempDir = new File(new 
File(MinionContext.getInstance().getDataDir(), 
"SegmentGenerationAndPushResult"),
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/segmentgenerationandpush/SegmentGenerationAndPushTaskGenerator.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/segmentgenerationandpush/SegmentGenerationAndPushTaskGenerator.java
index 963ab2e369..a90635aab5 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/segmentgenerationandpush/SegmentGenerationAndPushTaskGenerator.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/segmentgenerationandpush/SegmentGenerationAndPushTaskGenerator.java
@@ -50,6 +50,7 @@ import org.apache.pinot.spi.filesystem.PinotFS;
 import org.apache.pinot.spi.ingestion.batch.BatchConfigProperties;
 import org.apache.pinot.spi.plugin.PluginManager;
 import org.apache.pinot.spi.utils.IngestionConfigUtils;
+import org.apache.pinot.spi.utils.Obfuscator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -169,8 +170,11 @@ public class SegmentGenerationAndPushTaskGenerator extends 
BaseTaskGenerator {
             }
           }
         } catch (Exception e) {
-          LOGGER.error("Unable to generate the SegmentGenerationAndPush task. 
[ table configs: {}, task configs: {} ]",
-              tableConfig, taskConfigs, e);
+          if (LOGGER.isErrorEnabled()) {
+            LOGGER.error(
+                "Unable to generate the SegmentGenerationAndPush task. [ table 
configs: {}, task configs: {} ]",
+                Obfuscator.DEFAULT.toJsonString(tableConfig), 
Obfuscator.DEFAULT.toJsonString(taskConfigs), e);
+          }
         }
       }
     }
@@ -224,8 +228,10 @@ public class SegmentGenerationAndPushTaskGenerator extends 
BaseTaskGenerator {
       }
       return pinotTaskConfigs;
     } catch (Exception e) {
-      LOGGER.error("Unable to generate the SegmentGenerationAndPush task. [ 
table configs: {}, task configs: {} ]",
-          tableConfig, taskConfigs, e);
+      if (LOGGER.isErrorEnabled()) {
+        LOGGER.error("Unable to generate the SegmentGenerationAndPush task. [ 
table configs: {}, task configs: {} ]",
+            Obfuscator.DEFAULT.toJsonString(tableConfig), 
Obfuscator.DEFAULT.toJsonString(taskConfigs), e);
+      }
       throw e;
     }
   }
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/upsertcompaction/UpsertCompactionTaskExecutor.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/upsertcompaction/UpsertCompactionTaskExecutor.java
index 1af5452ab8..1766d1c664 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/upsertcompaction/UpsertCompactionTaskExecutor.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/upsertcompaction/UpsertCompactionTaskExecutor.java
@@ -37,6 +37,7 @@ import 
org.apache.pinot.segment.spi.creator.SegmentGeneratorConfig;
 import org.apache.pinot.segment.spi.index.metadata.SegmentMetadataImpl;
 import org.apache.pinot.spi.config.table.TableConfig;
 import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.utils.Obfuscator;
 import org.roaringbitmap.RoaringBitmap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,7 +53,9 @@ public class UpsertCompactionTaskExecutor extends 
BaseSingleSegmentConversionExe
     Map<String, String> configs = pinotTaskConfig.getConfigs();
     String segmentName = configs.get(MinionConstants.SEGMENT_NAME_KEY);
     String taskType = pinotTaskConfig.getTaskType();
-    LOGGER.info("Starting task: {} with configs: {}", taskType, configs);
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Starting task: {} with configs: {}", taskType, 
Obfuscator.DEFAULT.toJsonString(configs));
+    }
     long startMillis = System.currentTimeMillis();
 
     String tableNameWithType = configs.get(MinionConstants.TABLE_NAME_KEY);
@@ -118,9 +121,11 @@ public class UpsertCompactionTaskExecutor extends 
BaseSingleSegmentConversionExe
             segmentMetadata.getTotalDocs() - totalDocsAfterCompaction);
 
     long endMillis = System.currentTimeMillis();
-    LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms. Total 
docs before compaction: {}. "
-            + "Total docs after compaction: {}.", taskType, configs, 
(endMillis - startMillis),
-            segmentMetadata.getTotalDocs(), totalDocsAfterCompaction);
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms. Total 
docs before compaction: {}. "
+              + "Total docs after compaction: {}.", taskType, 
Obfuscator.DEFAULT.toJsonString(configs),
+          (endMillis - startMillis), segmentMetadata.getTotalDocs(), 
totalDocsAfterCompaction);
+    }
 
     return result;
   }
diff --git 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/upsertcompactmerge/UpsertCompactMergeTaskExecutor.java
 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/upsertcompactmerge/UpsertCompactMergeTaskExecutor.java
index 21e7554de3..c3a898a799 100644
--- 
a/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/upsertcompactmerge/UpsertCompactMergeTaskExecutor.java
+++ 
b/pinot-plugins/pinot-minion-tasks/pinot-minion-builtin-tasks/src/main/java/org/apache/pinot/plugin/minion/tasks/upsertcompactmerge/UpsertCompactMergeTaskExecutor.java
@@ -46,6 +46,7 @@ import org.apache.pinot.spi.config.table.TableConfig;
 import org.apache.pinot.spi.data.Schema;
 import org.apache.pinot.spi.data.readers.RecordReader;
 import org.apache.pinot.spi.data.readers.RecordReaderFileConfig;
+import org.apache.pinot.spi.utils.Obfuscator;
 import org.apache.pinot.spi.utils.builder.TableNameBuilder;
 import org.roaringbitmap.RoaringBitmap;
 import org.slf4j.Logger;
@@ -73,7 +74,9 @@ public class UpsertCompactMergeTaskExecutor extends 
BaseMultipleSegmentsConversi
     _eventObserver.notifyProgress(pinotTaskConfig, "Converting segments: " + 
numInputSegments);
     String taskType = pinotTaskConfig.getTaskType();
     Map<String, String> configs = pinotTaskConfig.getConfigs();
-    LOGGER.info("Starting task: {} with configs: {}", taskType, configs);
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Starting task: {} with configs: {}", taskType, 
Obfuscator.DEFAULT.toJsonString(configs));
+    }
     long startMillis = System.currentTimeMillis();
 
     String tableNameWithType = configs.get(MinionConstants.TABLE_NAME_KEY);
@@ -146,7 +149,10 @@ public class UpsertCompactMergeTaskExecutor extends 
BaseMultipleSegmentsConversi
             .getSkippedRowsFound() + ", sanitized:" + 
framework.getSanitizedRowsFound());
 
     long endMillis = System.currentTimeMillis();
-    LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms", 
taskType, configs, (endMillis - startMillis));
+    if (LOGGER.isInfoEnabled()) {
+      LOGGER.info("Finished task: {} with configs: {}. Total time: {}ms", 
taskType,
+          Obfuscator.DEFAULT.toJsonString(configs), (endMillis - startMillis));
+    }
 
     List<SegmentConversionResult> results = new ArrayList<>();
     for (File outputSegmentDir : outputSegmentDirs) {
diff --git 
a/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
 
b/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
index fa498ab5fb..7722c2f56e 100644
--- 
a/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
+++ 
b/pinot-server/src/test/java/org/apache/pinot/server/api/PinotServerAppConfigsTest.java
@@ -71,8 +71,7 @@ public class PinotServerAppConfigsTest extends 
BaseResourceTest {
     Assert.assertEquals(actualSystemConfig.getTotalSwapSpace(), 
expectedSystemConfig.getTotalSwapSpace());
 
     // tests Equals on obfuscated expected and actual
-    Obfuscator obfuscator = new Obfuscator();
-    String obfuscatedExpectedJson = obfuscator.toJsonString(expected);
+    String obfuscatedExpectedJson = Obfuscator.DEFAULT.toJsonString(expected);
     PinotAppConfigs obfuscatedExpected = 
JsonUtils.stringToObject(obfuscatedExpectedJson, PinotAppConfigs.class);
     Assert.assertEquals(actual.getJvmConfig(), 
obfuscatedExpected.getJvmConfig());
     Assert.assertEquals(actual.getPinotConfig(), 
obfuscatedExpected.getPinotConfig());
diff --git 
a/pinot-spi/src/main/java/org/apache/pinot/spi/env/PinotConfiguration.java 
b/pinot-spi/src/main/java/org/apache/pinot/spi/env/PinotConfiguration.java
index d3ba835dc4..2bf0c2bb9e 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/env/PinotConfiguration.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/env/PinotConfiguration.java
@@ -500,7 +500,7 @@ public class PinotConfiguration {
 
   @Override
   public String toString() {
-    return new Obfuscator().toJsonString(toMap());
+    return Obfuscator.DEFAULT.toJsonString(toMap());
   }
 
   public boolean isEmpty() {
diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/Obfuscator.java 
b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/Obfuscator.java
index 03648c9d08..985f55255d 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/Obfuscator.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/Obfuscator.java
@@ -56,11 +56,13 @@ import java.util.stream.Stream;
  * </pre>
  */
 public final class Obfuscator {
+
   private static final String DEFAULT_MASKED_VALUE = "*****";
   private static final List<Pattern> DEFAULT_PATTERNS =
       Stream.of("(?i).*secret$", "(?i).*secret[\\s_-]*key$", 
"(?i).*api[\\s_-]*key$", "(?i).*password$",
               "(?i).*keytab$", "(?i).*token$")
           .map(Pattern::compile).collect(Collectors.toList());
+  public static final Obfuscator DEFAULT = new Obfuscator();
 
   private final String _maskedValue;
   private final List<Pattern> _patterns;
@@ -70,8 +72,7 @@ public final class Obfuscator {
    * values with '*****'
    */
   public Obfuscator() {
-    _maskedValue = DEFAULT_MASKED_VALUE;
-    _patterns = DEFAULT_PATTERNS;
+    this(DEFAULT_MASKED_VALUE, DEFAULT_PATTERNS);
   }
 
   /**


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

Reply via email to