diff --git a/server/src/main/java/org/opensearch/threadpool/ThreadPool.java b/server/src/main/java/org/opensearch/threadpool/ThreadPool.java index 59d3b110aeca8..b67b00bb42054 100644 --- a/server/src/main/java/org/opensearch/threadpool/ThreadPool.java +++ b/server/src/main/java/org/opensearch/threadpool/ThreadPool.java @@ -278,7 +278,10 @@ public ThreadPool( Names.FETCH_SHARD_STARTED, new ScalingExecutorBuilder(Names.FETCH_SHARD_STARTED, 1, 2 * allocatedProcessors, TimeValue.timeValueMinutes(5)) ); - builders.put(Names.FORCE_MERGE, new FixedExecutorBuilder(settings, Names.FORCE_MERGE, 1, -1)); + builders.put( + Names.FORCE_MERGE, + new FixedExecutorBuilder(settings, Names.FORCE_MERGE, oneEighthAllocatedProcessors(allocatedProcessors), -1) + ); builders.put( Names.FETCH_SHARD_STORE, new ScalingExecutorBuilder(Names.FETCH_SHARD_STORE, 1, 2 * allocatedProcessors, TimeValue.timeValueMinutes(5)) @@ -678,6 +681,10 @@ static int boundedBy(int value, int min, int max) { return Math.min(max, Math.max(min, value)); } + static int oneEighthAllocatedProcessors(final int allocatedProcessors) { + return boundedBy(allocatedProcessors / 8, 1, Integer.MAX_VALUE); + } + static int halfAllocatedProcessors(int allocatedProcessors) { return (allocatedProcessors + 1) / 2; } diff --git a/server/src/test/java/org/opensearch/threadpool/ThreadPoolTests.java b/server/src/test/java/org/opensearch/threadpool/ThreadPoolTests.java index 205bf7621c576..fd79115ad5872 100644 --- a/server/src/test/java/org/opensearch/threadpool/ThreadPoolTests.java +++ b/server/src/test/java/org/opensearch/threadpool/ThreadPoolTests.java @@ -196,4 +196,12 @@ public void testThreadPoolResizeFail() { terminate(threadPool); } } + + public void testOneEighthAllocatedProcessors() { + assertThat(ThreadPool.oneEighthAllocatedProcessors(1), equalTo(1)); + assertThat(ThreadPool.oneEighthAllocatedProcessors(4), equalTo(1)); + assertThat(ThreadPool.oneEighthAllocatedProcessors(8), equalTo(1)); + assertThat(ThreadPool.oneEighthAllocatedProcessors(32), equalTo(4)); + assertThat(ThreadPool.oneEighthAllocatedProcessors(128), equalTo(16)); + } }