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

erose pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new b1a058aca3 HDDS-8720. Improve thread names in SCM (#5447)
b1a058aca3 is described below

commit b1a058aca313cf9b02b5ed0f6f76ddc5aca7af9b
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Sat Oct 21 01:59:21 2023 +0200

    HDDS-8720. Improve thread names in SCM (#5447)
---
 .../scm/container/balancer/ContainerBalancer.java   |  3 ++-
 .../container/replication/ReplicationManager.java   |  7 ++++---
 .../hadoop/hdds/scm/ha/BackgroundSCMService.java    |  2 +-
 .../apache/hadoop/hdds/scm/ha/SCMStateMachine.java  |  9 +++++++--
 .../hdds/scm/node/NodeDecommissionManager.java      |  8 ++++++--
 .../hadoop/hdds/scm/node/NodeStateManager.java      |  8 ++++++--
 .../scm/pipeline/BackgroundPipelineCreator.java     | 21 ++++++++++++---------
 .../hdds/scm/security/RootCARotationManager.java    |  6 +++++-
 .../hdds/scm/security/SecretKeyManagerService.java  |  7 +++++--
 .../scm/server/upgrade/FinalizationManagerImpl.java | 10 +++++++++-
 10 files changed, 57 insertions(+), 24 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
index 1030c0eab0..7b5cbe9f21 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
@@ -271,10 +271,11 @@ public class ContainerBalancer extends StatefulService {
    */
   private void startBalancingThread(int nextIterationIndex,
       boolean delayStart) {
+    String prefix = scmContext.threadNamePrefix();
     task = new ContainerBalancerTask(scm, nextIterationIndex, this, metrics,
         config, delayStart);
     Thread thread = new Thread(task);
-    thread.setName("ContainerBalancerTask-" + ID.incrementAndGet());
+    thread.setName(prefix + "ContainerBalancerTask-" + ID.incrementAndGet());
     thread.setDaemon(true);
     thread.start();
     currentBalancingThread = thread;
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
index 8002776918..734de07df3 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
@@ -340,18 +340,19 @@ public class ReplicationManager implements SCMService {
    */
   @VisibleForTesting
   protected void startSubServices() {
+    final String prefix = scmContext.threadNamePrefix();
     replicationMonitor = new Thread(this::run);
-    replicationMonitor.setName("ReplicationMonitor");
+    replicationMonitor.setName(prefix + "ReplicationMonitor");
     replicationMonitor.setDaemon(true);
     replicationMonitor.start();
 
     underReplicatedProcessorThread = new Thread(underReplicatedProcessor);
-    underReplicatedProcessorThread.setName("Under Replicated Processor");
+    underReplicatedProcessorThread.setName(prefix + 
"UnderReplicatedProcessor");
     underReplicatedProcessorThread.setDaemon(true);
     underReplicatedProcessorThread.start();
 
     overReplicatedProcessorThread = new Thread(overReplicatedProcessor);
-    overReplicatedProcessorThread.setName("Over Replicated Processor");
+    overReplicatedProcessorThread.setName(prefix + "OverReplicatedProcessor");
     overReplicatedProcessorThread.setDaemon(true);
     overReplicatedProcessorThread.start();
   }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/BackgroundSCMService.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/BackgroundSCMService.java
index ab476f84c5..03e2a15938 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/BackgroundSCMService.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/BackgroundSCMService.java
@@ -68,7 +68,7 @@ public final class BackgroundSCMService implements SCMService 
{
     log.info("Starting {} Service.", getServiceName());
 
     backgroundThread = new Thread(this::run);
-    backgroundThread.setName(serviceName + "Thread");
+    backgroundThread.setName(scmContext.threadNamePrefix() + serviceName);
     backgroundThread.setDaemon(true);
     backgroundThread.start();
   }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
index 9384661537..52320719e6 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/ha/SCMStateMachine.java
@@ -32,6 +32,7 @@ import java.util.concurrent.atomic.AtomicLong;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import com.google.protobuf.InvalidProtocolBufferException;
 import org.apache.hadoop.hdds.scm.block.DeletedBlockLog;
 import org.apache.hadoop.hdds.scm.block.DeletedBlockLogImpl;
@@ -90,7 +91,7 @@ public class SCMStateMachine extends BaseStateMachine {
   private List<ManagedSecretKey> installingSecretKeys = null;
 
   private AtomicLong currentLeaderTerm = new AtomicLong(-1L);
-  private AtomicBoolean refreshedAfterLeaderReady = new AtomicBoolean(false);
+  private AtomicBoolean refreshedAfterLeaderReady = new AtomicBoolean();
 
   public SCMStateMachine(final StorageContainerManager scm,
       SCMHADBTransactionBuffer buffer) {
@@ -104,7 +105,11 @@ public class SCMStateMachine extends BaseStateMachine {
       LOG.info("Updated lastAppliedTermIndex {} with transactionInfo term and" 
+
           "Index", latestTrxInfo);
     }
-    this.installSnapshotExecutor = HadoopExecutors.newSingleThreadExecutor();
+    this.installSnapshotExecutor = HadoopExecutors.newSingleThreadExecutor(
+        new ThreadFactoryBuilder()
+            .setNameFormat(scm.threadNamePrefix() + "SCMInstallSnapshot-%d")
+            .build()
+    );
     isInitialized = true;
   }
 
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeDecommissionManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeDecommissionManager.java
index cedca7d3bf..3e0ac9372d 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeDecommissionManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeDecommissionManager.java
@@ -250,8 +250,12 @@ public class NodeDecommissionManager {
     this.metrics = null;
 
     executor = Executors.newScheduledThreadPool(1,
-        new ThreadFactoryBuilder().setNameFormat("DatanodeAdminManager-%d")
-            .setDaemon(true).build());
+        new ThreadFactoryBuilder()
+            .setNameFormat(
+                scmContext.threadNamePrefix() + "DatanodeAdminManager-%d")
+            .setDaemon(true)
+            .build()
+    );
 
     useHostnames = conf.getBoolean(
         DFSConfigKeys.DFS_DATANODE_USE_DN_HOSTNAME,
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
index 3e1173d98a..2f5f93c116 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
@@ -196,8 +196,12 @@ public class NodeStateManager implements Runnable, 
Closeable {
         OZONE_SCM_STALENODE_INTERVAL + " should be less than" +
             OZONE_SCM_DEADNODE_INTERVAL);
     executorService = HadoopExecutors.newScheduledThreadPool(1,
-        new ThreadFactoryBuilder().setDaemon(true)
-            .setNameFormat("SCM Heartbeat Processing Thread - %d").build());
+        new ThreadFactoryBuilder()
+            .setDaemon(true)
+            .setNameFormat(
+                scmContext.threadNamePrefix() + "SCMHeartbeatProcessor-%d")
+            .build()
+    );
 
     skippedHealthChecks = 0;
     checkPaused = false; // accessed only from test functions
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
index 5abe07a022..4e68605c68 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/pipeline/BackgroundPipelineCreator.java
@@ -71,6 +71,7 @@ public class BackgroundPipelineCreator implements SCMService {
    *    no matter in safe mode or not.
    */
   private final Lock serviceLock = new ReentrantLock();
+  private final String threadName;
   private ServiceStatus serviceStatus = ServiceStatus.PAUSING;
   private final boolean createPipelineInSafeMode;
   private final long waitTimeInMillis;
@@ -109,6 +110,8 @@ public class BackgroundPipelineCreator implements 
SCMService {
         ScmConfigKeys.OZONE_SCM_PIPELINE_CREATION_INTERVAL,
         ScmConfigKeys.OZONE_SCM_PIPELINE_CREATION_INTERVAL_DEFAULT,
         TimeUnit.MILLISECONDS);
+
+    threadName = scmContext.threadNamePrefix() + THREAD_NAME;
   }
 
   /**
@@ -117,18 +120,18 @@ public class BackgroundPipelineCreator implements 
SCMService {
   @Override
   public void start() {
     if (!running.compareAndSet(false, true)) {
-      LOG.warn("{} is already started, just ignore.", THREAD_NAME);
+      LOG.warn("{} is already started, just ignore.", threadName);
       return;
     }
 
-    LOG.info("Starting {}.", THREAD_NAME);
+    LOG.info("Starting {}.", threadName);
 
     thread = new ThreadFactoryBuilder()
         .setDaemon(false)
-        .setNameFormat(THREAD_NAME + " - %d")
+        .setNameFormat(threadName + "-%d")
         .setUncaughtExceptionHandler((Thread t, Throwable ex) -> {
           String message = "Terminate SCM, encounter uncaught exception"
-              + " in RatisPipelineUtilsThread";
+              + " in " + threadName;
           scmContext.getScm().shutDown(message);
         })
         .build()
@@ -142,11 +145,11 @@ public class BackgroundPipelineCreator implements 
SCMService {
    */
   public void stop() {
     if (!running.compareAndSet(true, false)) {
-      LOG.warn("{} is not running, just ignore.", THREAD_NAME);
+      LOG.warn("{} is not running, just ignore.", threadName);
       return;
     }
 
-    LOG.info("Stopping {}.", THREAD_NAME);
+    LOG.info("Stopping {}.", threadName);
 
     // in case RatisPipelineUtilsThread is sleeping
     thread.interrupt();
@@ -154,7 +157,7 @@ public class BackgroundPipelineCreator implements 
SCMService {
     try {
       thread.join();
     } catch (InterruptedException e) {
-      LOG.warn("Interrupted during join {}.", THREAD_NAME);
+      LOG.warn("Interrupted during join {}.", threadName);
       Thread.currentThread().interrupt();
     }
   }
@@ -177,7 +180,7 @@ public class BackgroundPipelineCreator implements 
SCMService {
           }
         }
       } catch (InterruptedException e) {
-        LOG.warn("{} is interrupted.", THREAD_NAME);
+        LOG.warn("{} is interrupted.", threadName);
         running.set(false);
         Thread.currentThread().interrupt();
       }
@@ -274,7 +277,7 @@ public class BackgroundPipelineCreator implements 
SCMService {
             || event == NODE_ADDRESS_UPDATE_HANDLER_TRIGGERED
             || event == UNHEALTHY_TO_HEALTHY_NODE_HANDLER_TRIGGERED
             || event == PRE_CHECK_COMPLETED) {
-      LOG.info("trigger a one-shot run on {}.", THREAD_NAME);
+      LOG.info("trigger a one-shot run on {}.", threadName);
 
       serviceLock.lock();
       try {
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/RootCARotationManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/RootCARotationManager.java
index 08f8fc928d..c46e6e8b1d 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/RootCARotationManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/RootCARotationManager.java
@@ -83,6 +83,9 @@ public class RootCARotationManager extends StatefulService {
   public static final Logger LOG =
       LoggerFactory.getLogger(RootCARotationManager.class);
 
+  private static final String SERVICE_NAME =
+      RootCARotationManager.class.getSimpleName();
+
   private final StorageContainerManager scm;
   private final OzoneConfiguration ozoneConf;
   private final SecurityConfig secConf;
@@ -99,7 +102,7 @@ public class RootCARotationManager extends StatefulService {
   private final AtomicReference<Long> processStartTime =
       new AtomicReference<>();
   private final AtomicBoolean isPostProcessing = new AtomicBoolean(false);
-  private final String threadName = this.getClass().getSimpleName();
+  private final String threadName;
   private final String newCAComponent = SCM_ROOT_CA_COMPONENT_NAME +
       HDDS_NEW_KEY_CERT_DIR_NAME_SUFFIX +
       HDDS_NEW_KEY_CERT_DIR_NAME_PROGRESS_SUFFIX;
@@ -150,6 +153,7 @@ public class RootCARotationManager extends StatefulService {
         .atZone(ZoneId.systemDefault()).toInstant());
     rootCertPollInterval = secConf.getRootCaCertificatePollingInterval();
 
+    threadName = scm.threadNamePrefix() + SERVICE_NAME;
     executorService = Executors.newScheduledThreadPool(1,
         new ThreadFactoryBuilder().setNameFormat(threadName)
             .setDaemon(true).build());
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/SecretKeyManagerService.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/SecretKeyManagerService.java
index 0df2ddef81..c1f52914f4 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/SecretKeyManagerService.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/security/SecretKeyManagerService.java
@@ -45,6 +45,9 @@ public class SecretKeyManagerService implements SCMService, 
Runnable {
   public static final Logger LOG =
       LoggerFactory.getLogger(SecretKeyManagerService.class);
 
+  private static final String SERVICE_NAME =
+      SecretKeyManagerService.class.getSimpleName();
+
   private final SCMContext scmContext;
   private final SecretKeyManager secretKeyManager;
   private final SecretKeyConfig secretKeyConfig;
@@ -77,7 +80,7 @@ public class SecretKeyManagerService implements SCMService, 
Runnable {
 
     scheduler = Executors.newScheduledThreadPool(1,
         new ThreadFactoryBuilder().setDaemon(true)
-            .setNameFormat(getServiceName())
+            .setNameFormat(scmContext.threadNamePrefix() + getServiceName())
             .build());
 
     start();
@@ -134,7 +137,7 @@ public class SecretKeyManagerService implements SCMService, 
Runnable {
 
   @Override
   public String getServiceName() {
-    return SecretKeyManagerService.class.getSimpleName();
+    return SERVICE_NAME;
   }
 
   @Override
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationManagerImpl.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationManagerImpl.java
index 0a6c347658..a3ea5189c3 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationManagerImpl.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/upgrade/FinalizationManagerImpl.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hdds.scm.server.upgrade;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.scm.ha.SCMContext;
 import org.apache.hadoop.hdds.scm.ha.SCMHAManager;
@@ -39,6 +40,7 @@ import org.slf4j.LoggerFactory;
 import java.io.IOException;
 import java.util.Collections;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 /**
  * Class to initiate SCM finalization and query its progress.
@@ -53,6 +55,7 @@ public class FinalizationManagerImpl implements 
FinalizationManager {
   private OzoneConfiguration conf;
   private HDDSLayoutVersionManager versionManager;
   private final FinalizationStateManager finalizationStateManager;
+  private ThreadFactory threadFactory;
 
   /**
    * For test classes to inject their own state manager.
@@ -98,6 +101,11 @@ public class FinalizationManagerImpl implements 
FinalizationManager {
             .build();
 
     finalizationStateManager.setUpgradeContext(this.context);
+
+    String prefix = scmContext != null ? scmContext.threadNamePrefix() : "";
+    this.threadFactory = new ThreadFactoryBuilder()
+        .setNameFormat(prefix + "FinalizationManager-%d")
+        .build();
   }
 
   @Override
@@ -150,7 +158,7 @@ public class FinalizationManagerImpl implements 
FinalizationManager {
   @Override
   public void onLeaderReady() {
     // Launch a background thread to drive finalization.
-    Executors.newSingleThreadExecutor().submit(() -> {
+    Executors.newSingleThreadExecutor(threadFactory).submit(() -> {
       FinalizationCheckpoint currentCheckpoint = getCheckpoint();
       if (currentCheckpoint.hasCrossed(
           FinalizationCheckpoint.FINALIZATION_STARTED) &&


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to