This is an automated email from the ASF dual-hosted git repository.
adoroszlai 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 a29e2b186af HDDS-14023. Extract utility for resizing thread pool
(#9387)
a29e2b186af is described below
commit a29e2b186af4151307d6b49ba27c0644ef6199de
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Thu Nov 27 19:10:19 2025 +0100
HDDS-14023. Extract utility for resizing thread pool (#9387)
---
.../commandhandler/DeleteBlocksCommandHandler.java | 19 ++--------------
.../container/replication/ReplicationServer.java | 19 ++--------------
.../apache/hadoop/hdds/utils/HddsServerUtil.java | 26 ++++++++++++++++++++++
3 files changed, 30 insertions(+), 34 deletions(-)
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/DeleteBlocksCommandHandler.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/DeleteBlocksCommandHandler.java
index 78a8db03c6b..4d5f7931e21 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/DeleteBlocksCommandHandler.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/DeleteBlocksCommandHandler.java
@@ -46,6 +46,7 @@
import
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.SCMCommandProto;
import
org.apache.hadoop.hdds.scm.container.common.helpers.StorageContainerException;
import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
+import org.apache.hadoop.hdds.utils.HddsServerUtil;
import org.apache.hadoop.hdds.utils.db.BatchOperation;
import org.apache.hadoop.hdds.utils.db.Table;
import org.apache.hadoop.metrics2.lib.MetricsRegistry;
@@ -763,22 +764,6 @@ public ThreadPoolExecutor getExecutor() {
}
public void setPoolSize(int size) {
- if (size <= 0) {
- throw new IllegalArgumentException("Pool size must be positive.");
- }
-
- int currentCorePoolSize = executor.getCorePoolSize();
-
- // In ThreadPoolExecutor, maximumPoolSize must always be greater than or
- // equal to the corePoolSize. We must make sure this invariant holds when
- // changing the pool size. Therefore, we take into account whether the
- // new size is greater or smaller than the current core pool size.
- if (size > currentCorePoolSize) {
- executor.setMaximumPoolSize(size);
- executor.setCorePoolSize(size);
- } else {
- executor.setCorePoolSize(size);
- executor.setMaximumPoolSize(size);
- }
+ HddsServerUtil.setPoolSize(executor, size, LOG);
}
}
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/replication/ReplicationServer.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/replication/ReplicationServer.java
index 4a1f405bd05..380a8fc7870 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/replication/ReplicationServer.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/replication/ReplicationServer.java
@@ -35,6 +35,7 @@
import org.apache.hadoop.hdds.security.SecurityConfig;
import
org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient;
import org.apache.hadoop.hdds.tracing.GrpcServerInterceptor;
+import org.apache.hadoop.hdds.utils.HddsServerUtil;
import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.ozone.container.ozoneimpl.ContainerController;
import org.apache.ratis.thirdparty.io.grpc.Server;
@@ -153,23 +154,7 @@ public int getPort() {
}
public void setPoolSize(int size) {
- if (size <= 0) {
- throw new IllegalArgumentException("Pool size must be positive.");
- }
-
- int currentCorePoolSize = executor.getCorePoolSize();
-
- // In ThreadPoolExecutor, maximumPoolSize must always be greater than or
- // equal to the corePoolSize. We must make sure this invariant holds when
- // changing the pool size. Therefore, we take into account whether the
- // new size is greater or smaller than the current core pool size.
- if (size > currentCorePoolSize) {
- executor.setMaximumPoolSize(size);
- executor.setCorePoolSize(size);
- } else {
- executor.setCorePoolSize(size);
- executor.setMaximumPoolSize(size);
- }
+ HddsServerUtil.setPoolSize(executor, size, LOG);
}
@VisibleForTesting
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HddsServerUtil.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HddsServerUtil.java
index 2da151faed6..3b96660df10 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HddsServerUtil.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/HddsServerUtil.java
@@ -62,6 +62,7 @@
import java.util.Optional;
import java.util.OptionalInt;
import java.util.Set;
+import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -104,6 +105,7 @@
import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.util.ShutdownHookManager;
+import org.apache.ratis.util.Preconditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -730,4 +732,28 @@ private static String createStartupMessage(VersionInfo
versionInfo,
" conf = " + conf);
}
+ public static void setPoolSize(ThreadPoolExecutor executor, int size, Logger
logger) {
+ Preconditions.assertTrue(size > 0, () -> "Pool size must be positive: " +
size);
+
+ int currentCorePoolSize = executor.getCorePoolSize();
+
+ // In ThreadPoolExecutor, maximumPoolSize must always be greater than or
+ // equal to the corePoolSize. We must make sure this invariant holds when
+ // changing the pool size. Therefore, we take into account whether the
+ // new size is greater or smaller than the current core pool size.
+ String change = "unchanged";
+ if (size > currentCorePoolSize) {
+ change = "increased";
+ executor.setMaximumPoolSize(size);
+ executor.setCorePoolSize(size);
+ } else if (size < currentCorePoolSize) {
+ change = "decreased";
+ executor.setCorePoolSize(size);
+ executor.setMaximumPoolSize(size);
+ }
+ if (logger != null) {
+ logger.info("pool size {} from {} to {}", change, currentCorePoolSize,
size);
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]