diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java index 9c7d7690faa4..627c432d3c5d 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/OzoneConfigKeys.java @@ -194,6 +194,11 @@ public final class OzoneConfigKeys { public static final String OZONE_BLOCK_DELETING_SERVICE_TIMEOUT_DEFAULT = "300s"; // 300s for default + public static final String OZONE_BLOCK_DELETING_SERVICE_WORKERS = + "ozone.block.deleting.service.workers"; + public static final int OZONE_BLOCK_DELETING_SERVICE_WORKERS_DEFAULT + = 10; + public static final String OZONE_KEY_PREALLOCATION_BLOCKS_MAX = "ozone.key.preallocation.max.blocks"; public static final int OZONE_KEY_PREALLOCATION_BLOCKS_MAX_DEFAULT diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml b/hadoop-hdds/common/src/main/resources/ozone-default.xml index 2f9d01da2b92..d1c8cfd03c56 100644 --- a/hadoop-hdds/common/src/main/resources/ozone-default.xml +++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml @@ -398,6 +398,14 @@ assumed. + + ozone.block.deleting.service.workers + 10 + OZONE, PERFORMANCE, SCM + Number of workers executed of block deletion service. This + configuration should be set to greater than 0. + + ozone.UnsafeByteOperations.enabled true diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java index 905918a2f924..e43fb9d925dd 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/statemachine/background/BlockDeletingService.java @@ -87,14 +87,13 @@ public class BlockDeletingService extends BackgroundService { // Task priority is useful when a to-delete block has weight. private static final int TASK_PRIORITY_DEFAULT = 1; - // Core pool size for container tasks - private static final int BLOCK_DELETING_SERVICE_CORE_POOL_SIZE = 10; public BlockDeletingService(OzoneContainer ozoneContainer, - long serviceInterval, long serviceTimeout, TimeUnit timeUnit, - ConfigurationSource conf) { + long serviceInterval, long serviceTimeout, + TimeUnit timeUnit, int workerSize, + ConfigurationSource conf) { super("BlockDeletingService", serviceInterval, timeUnit, - BLOCK_DELETING_SERVICE_CORE_POOL_SIZE, serviceTimeout); + workerSize, serviceTimeout); this.ozoneContainer = ozoneContainer; try { containerDeletionPolicy = conf.getClass( diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/OzoneContainer.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/OzoneContainer.java index d6c90d5563ac..5eaa01e2f2f7 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/OzoneContainer.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/ozoneimpl/OzoneContainer.java @@ -66,6 +66,8 @@ import com.google.common.collect.Maps; import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_TIMEOUT; import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_TIMEOUT_DEFAULT; +import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_WORKERS; +import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_WORKERS_DEFAULT; import static org.apache.hadoop.ozone.container.ozoneimpl.ContainerScrubberConfiguration.VOLUME_BYTES_PER_SECOND_KEY; import org.apache.hadoop.util.Timer; @@ -184,9 +186,13 @@ public OzoneContainer( .getTimeDuration(OZONE_BLOCK_DELETING_SERVICE_TIMEOUT, OZONE_BLOCK_DELETING_SERVICE_TIMEOUT_DEFAULT, TimeUnit.MILLISECONDS); + + int serviceWorkerSize = config + .getInt(OZONE_BLOCK_DELETING_SERVICE_WORKERS, + OZONE_BLOCK_DELETING_SERVICE_WORKERS_DEFAULT); blockDeletingService = new BlockDeletingService(this, svcInterval.toMillis(), serviceTimeout, - TimeUnit.MILLISECONDS, config); + TimeUnit.MILLISECONDS, serviceWorkerSize, config); if (certClient != null && secConf.isGrpcTlsEnabled()) { List x509Certificates = diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestBlockDeletingService.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestBlockDeletingService.java index 014913e806dd..de4bf92980fa 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestBlockDeletingService.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/TestBlockDeletingService.java @@ -530,7 +530,7 @@ public void testBlockDeletionTimeout() throws Exception { mockDependencies(containerSet, keyValueHandler); BlockDeletingService svc = new BlockDeletingService(ozoneContainer, TimeUnit.MILLISECONDS.toNanos(1000), timeout, TimeUnit.NANOSECONDS, - conf); + 10, conf); svc.start(); LogCapturer log = LogCapturer.captureLogs(BackgroundService.LOG); @@ -552,7 +552,7 @@ public void testBlockDeletionTimeout() throws Exception { timeout = 0; svc = new BlockDeletingService(ozoneContainer, TimeUnit.MILLISECONDS.toNanos(1000), timeout, TimeUnit.MILLISECONDS, - conf); + 10, conf); svc.start(); // get container meta data diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java index 92ebbcacc1e4..94f2e3ebaeda 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestContainerDeletionChoosingPolicy.java @@ -232,7 +232,7 @@ private BlockDeletingService getBlockDeletingService() { Mockito.when(ozoneContainer.getWriteChannel()).thenReturn(null); blockDeletingService = new BlockDeletingService(ozoneContainer, SERVICE_INTERVAL_IN_MILLISECONDS, SERVICE_TIMEOUT_IN_MILLISECONDS, - TimeUnit.MILLISECONDS, conf); + TimeUnit.MILLISECONDS, 10, conf); return blockDeletingService; } diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/testutils/BlockDeletingServiceTestImpl.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/testutils/BlockDeletingServiceTestImpl.java index ecb7af8054dd..ee2bcfee6d32 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/testutils/BlockDeletingServiceTestImpl.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/testutils/BlockDeletingServiceTestImpl.java @@ -45,7 +45,7 @@ public class BlockDeletingServiceTestImpl public BlockDeletingServiceTestImpl(OzoneContainer container, int serviceInterval, ConfigurationSource conf) { super(container, serviceInterval, SERVICE_TIMEOUT_IN_MILLISECONDS, - TimeUnit.MILLISECONDS, conf); + TimeUnit.MILLISECONDS, 10, conf); } @VisibleForTesting