Skip to content

Commit 83dd930

Browse files
[8.19] Deprecate indices.merge.scheduler.use_thread_pool setting (#129464) (#129628)
* Deprecate indices.merge.scheduler.use_thread_pool setting (#129464) This deprecates the `indices.merge.scheduler.use_thread_pool` setting that was introduced in #120869 because this setting should not normally be used, unless instructed so by engineering to get around temporary issues with the new threadpool-based merge scheduler. * Update warning msg
1 parent fd2bac4 commit 83dd930

File tree

9 files changed

+90
-2
lines changed

9 files changed

+90
-2
lines changed

docs/changelog/129464.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
pr: 129464
2+
summary: Deprecate `indices.merge.scheduler.use_thread_pool` setting
3+
area: Engine
4+
type: deprecation
5+
issues: []
6+
deprecation:
7+
title: Deprecate `indices.merge.scheduler.use_thread_pool` setting
8+
area: Ingest
9+
details: This deprecates the `indices.merge.scheduler.use_thread_pool` node setting that was introduced in #120869. This setting should not normally be used, unless instructed so by engineering to get around temporary issues with the new threadpool-based merge scheduler.
10+
impact: There should be no impact to users since the setting was not released before its deprecation here (and is not documented).

server/src/main/java/org/elasticsearch/index/engine/ElasticsearchConcurrentMergeScheduler.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@
3131
/**
3232
* An extension to the {@link ConcurrentMergeScheduler} that provides tracking on merge times, total
3333
* and current merges.
34+
* @deprecated Replaced by {@link org.elasticsearch.index.engine.ThreadPoolMergeScheduler}. This merge scheduler
35+
* implementation should only be used to get around unexpected issues with the {@link ThreadPoolMergeScheduler},
36+
* which is the default one.
3437
*/
38+
@Deprecated
3539
public class ElasticsearchConcurrentMergeScheduler extends ConcurrentMergeScheduler implements ElasticsearchMergeScheduler {
3640

3741
protected final Logger logger;

server/src/main/java/org/elasticsearch/index/engine/ThreadPoolMergeScheduler.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,22 @@
4343
import java.util.concurrent.atomic.AtomicLong;
4444

4545
public class ThreadPoolMergeScheduler extends MergeScheduler implements ElasticsearchMergeScheduler {
46+
/**
47+
* This setting switches between the original {@link ElasticsearchConcurrentMergeScheduler}
48+
* and the new {@link ThreadPoolMergeScheduler} merge scheduler implementations (the latter is switched ON by default).
49+
* This setting is purposefully undocumented, because we expect that only the new {@link ThreadPoolMergeScheduler} implementation
50+
* (which is enabled by default) be used from now on. Our users should not touch this setting in their deployments,
51+
* unless consulting with engineering, because the original implementation should only be used (by setting this to {@code false})
52+
* to get around unexpected issues with the new one.
53+
* The setting is also <b>deprecated</b> in the hope that any unexpected issues with the new merge scheduler implementation are
54+
* promptly resolved, such that, in the near future, there's never a need to switch to the original implementation,
55+
* which will then be removed together with this setting.
56+
*/
4657
public static final Setting<Boolean> USE_THREAD_POOL_MERGE_SCHEDULER_SETTING = Setting.boolSetting(
4758
"indices.merge.scheduler.use_thread_pool",
4859
true,
49-
Setting.Property.NodeScope
60+
Setting.Property.NodeScope,
61+
Setting.Property.Deprecated
5062
);
5163
private final ShardId shardId;
5264
private final MergeSchedulerConfig config;

server/src/test/java/org/elasticsearch/action/support/replication/TransportReplicationAllPermitsAcquisitionTests.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,9 @@ void runWithPrimaryShardReference(final TransportReplicationAction.PrimaryShardR
391391
}
392392
}
393393
}
394+
assertWarnings(
395+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
396+
);
394397
}
395398

396399
private void assertSuccessfulOperation(final TestAction action, final Response response) {

server/src/test/java/org/elasticsearch/index/engine/ThreadPoolMergeExecutorServiceDiskSpaceTests.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public class ThreadPoolMergeExecutorServiceDiskSpaceTests extends ESTestCase {
6767
private static Settings settings;
6868
private static TestCapturingThreadPool testThreadPool;
6969
private static NodeEnvironment nodeEnvironment;
70+
private static boolean setThreadPoolMergeSchedulerSetting;
7071

7172
@BeforeClass
7273
public static void installMockUsableSpaceFS() throws Exception {
@@ -86,7 +87,8 @@ public static void installMockUsableSpaceFS() throws Exception {
8687
// the default of "5s" slows down testing
8788
.put(ThreadPoolMergeExecutorService.INDICES_MERGE_DISK_CHECK_INTERVAL_SETTING.getKey(), "50ms")
8889
.put(EsExecutors.NODE_PROCESSORS_SETTING.getKey(), mergeExecutorThreadCount);
89-
if (randomBoolean()) {
90+
setThreadPoolMergeSchedulerSetting = randomBoolean();
91+
if (setThreadPoolMergeSchedulerSetting) {
9092
settingsBuilder.put(ThreadPoolMergeScheduler.USE_THREAD_POOL_MERGE_SCHEDULER_SETTING.getKey(), true);
9193
}
9294
settings = settingsBuilder.build();
@@ -520,6 +522,11 @@ public void testAvailableDiskSpaceMonitorSettingsUpdate() throws Exception {
520522
}
521523
}, 5, TimeUnit.SECONDS);
522524
}
525+
if (setThreadPoolMergeSchedulerSetting) {
526+
assertWarnings(
527+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
528+
);
529+
}
523530
}
524531

525532
public void testAbortingOrRunningMergeTaskHoldsUpBudget() throws Exception {
@@ -593,6 +600,11 @@ public void testAbortingOrRunningMergeTaskHoldsUpBudget() throws Exception {
593600
assertThat(threadPoolMergeExecutorService.allDone(), is(true));
594601
});
595602
}
603+
if (setThreadPoolMergeSchedulerSetting) {
604+
assertWarnings(
605+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
606+
);
607+
}
596608
}
597609

598610
public void testBackloggedMergeTasksDoNotHoldUpBudget() throws Exception {
@@ -731,6 +743,11 @@ && randomBoolean()) {
731743
assertThat(threadPoolMergeExecutorService.allDone(), is(true));
732744
});
733745
}
746+
if (setThreadPoolMergeSchedulerSetting) {
747+
assertWarnings(
748+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
749+
);
750+
}
734751
}
735752

736753
public void testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution() throws Exception {
@@ -868,6 +885,11 @@ public void testUnavailableBudgetBlocksNewMergeTasksFromStartingExecution() thro
868885
assertThat(threadPoolMergeExecutorService.allDone(), is(true));
869886
});
870887
}
888+
if (setThreadPoolMergeSchedulerSetting) {
889+
assertWarnings(
890+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
891+
);
892+
}
871893
}
872894

873895
public void testMergeTasksAreUnblockedWhenMoreDiskSpaceBecomesAvailable() throws Exception {
@@ -1019,6 +1041,11 @@ public void testMergeTasksAreUnblockedWhenMoreDiskSpaceBecomesAvailable() throws
10191041
);
10201042
});
10211043
}
1044+
if (setThreadPoolMergeSchedulerSetting) {
1045+
assertWarnings(
1046+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
1047+
);
1048+
}
10221049
}
10231050

10241051
private static <T> T getLast(final Iterable<T> elements) {

server/src/test/java/org/elasticsearch/index/engine/ThreadPoolMergeExecutorServiceTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,9 @@ public void testEnqueuedAndBackloggedMergesAreStillExecutedWhenThreadPoolIsShutd
211211
});
212212
assertThat(countingListener.aborted.get() + countingListener.completed.get(), equalTo(doneMergesCount.get()));
213213
assertThat(countingListener.aborted.get(), equalTo(abortedMergesCount.get()));
214+
assertWarnings(
215+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
216+
);
214217
}
215218

216219
public void testTargetIORateChangesWhenSubmittingMergeTasks() throws Exception {
@@ -298,6 +301,9 @@ public void testTargetIORateChangesWhenSubmittingMergeTasks() throws Exception {
298301
}
299302
assertBusy(() -> assertTrue(threadPoolMergeExecutorService.allDone()));
300303
}
304+
assertWarnings(
305+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
306+
);
301307
}
302308

303309
public void testIORateIsAdjustedForAllRunningMergeTasks() throws Exception {
@@ -386,6 +392,9 @@ public void testIORateIsAdjustedForAllRunningMergeTasks() throws Exception {
386392
}
387393
assertBusy(() -> assertTrue(threadPoolMergeExecutorService.allDone()));
388394
}
395+
assertWarnings(
396+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
397+
);
389398
}
390399

391400
public void testIORateAdjustedForSubmittedTasksWhenExecutionRateIsSpeedy() throws IOException {
@@ -567,6 +576,9 @@ public void testMergeTasksRunConcurrently() throws Exception {
567576
}
568577
assertBusy(() -> assertTrue(threadPoolMergeExecutorService.allDone()));
569578
}
579+
assertWarnings(
580+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
581+
);
570582
}
571583

572584
public void testThreadPoolStatsWithBackloggedMergeTasks() throws Exception {
@@ -626,6 +638,9 @@ public void testThreadPoolStatsWithBackloggedMergeTasks() throws Exception {
626638
assertTrue(threadPoolMergeExecutorService.allDone());
627639
});
628640
}
641+
assertWarnings(
642+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
643+
);
629644
}
630645

631646
public void testBackloggedMergeTasksExecuteExactlyOnce() throws Exception {
@@ -697,6 +712,9 @@ public void testBackloggedMergeTasksExecuteExactlyOnce() throws Exception {
697712
assertTrue(threadPoolMergeExecutorService.allDone());
698713
});
699714
}
715+
assertWarnings(
716+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
717+
);
700718
}
701719

702720
public void testMergeTasksExecuteInSizeOrder() throws IOException {

server/src/test/java/org/elasticsearch/index/replication/IndexLevelReplicationTests.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,9 @@ public void testLateDeliveryAfterGCTriggeredOnReplica() throws Exception {
666666
indexOnReplica(indexRequest, shards, replica); // index arrives on replica lately.
667667
shards.assertAllEqual(0);
668668
}
669+
assertWarnings(
670+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
671+
);
669672
}
670673

671674
private void updateGCDeleteCycle(IndexShard shard, TimeValue interval) {

server/src/test/java/org/elasticsearch/index/shard/RefreshListenersTests.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,9 @@ public void onFailedEngine(String reason, @Nullable Exception e) {
185185

186186
@After
187187
public void tearDownListeners() throws Exception {
188+
assertWarnings(
189+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
190+
);
188191
IOUtils.close(engine, store, nodeEnvironment, () -> terminate(threadPool));
189192
}
190193

x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/ccr/repository/CcrRestoreSourceServiceTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.elasticsearch.index.store.Store;
2525
import org.elasticsearch.index.store.StoreFileMetadata;
2626
import org.elasticsearch.xpack.ccr.CcrSettings;
27+
import org.junit.After;
2728
import org.junit.Before;
2829

2930
import java.io.IOException;
@@ -49,6 +50,13 @@ public void setUp() throws Exception {
4950
restoreSourceService = new CcrRestoreSourceService(taskQueue.getThreadPool(), new CcrSettings(Settings.EMPTY, clusterSettings));
5051
}
5152

53+
@After
54+
public void assertWarnings() {
55+
assertWarnings(
56+
"[indices.merge.scheduler.use_thread_pool] setting was deprecated in Elasticsearch and will be removed in a future release."
57+
);
58+
}
59+
5260
public void testOpenSession() throws IOException {
5361
IndexShard indexShard1 = newStartedShard(true);
5462
IndexShard indexShard2 = newStartedShard(true);

0 commit comments

Comments
 (0)