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]