Skip to content

Commit 74912d2

Browse files
authored
Add search backpressure cancellation at the coordinator level (opensearch-project#5605)
* Cancellation of in-flight search requests at coordinator level Signed-off-by: PritLadani <pritkladani@gmail.com>
1 parent e42b76f commit 74912d2

29 files changed

Lines changed: 1639 additions & 438 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
8484
- Added support to apply index create block ([#4603](https://github.com/opensearch-project/OpenSearch/issues/4603))
8585
- Adds support for minimum compatible version for extensions ([#6003](https://github.com/opensearch-project/OpenSearch/pull/6003))
8686
- Add a guardrail to limit maximum number of shard on the cluster ([#6143](https://github.com/opensearch-project/OpenSearch/pull/6143))
87+
- Add cancellation of in-flight SearchTasks based on resource consumption ([#5606](https://github.com/opensearch-project/OpenSearch/pull/5605))
8788

8889
### Dependencies
8990
- Update nebula-publishing-plugin to 19.2.0 ([#5704](https://github.com/opensearch-project/OpenSearch/pull/5704))

server/src/internalClusterTest/java/org/opensearch/search/backpressure/SearchBackpressureIT.java

Lines changed: 163 additions & 22 deletions
Large diffs are not rendered by default.

server/src/main/java/org/opensearch/action/search/SearchShardTask.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.opensearch.search.fetch.ShardFetchSearchRequest;
3737
import org.opensearch.search.internal.ShardSearchRequest;
3838
import org.opensearch.tasks.CancellableTask;
39+
import org.opensearch.tasks.SearchBackpressureTask;
3940
import org.opensearch.tasks.TaskId;
4041

4142
import java.util.Map;
@@ -47,7 +48,7 @@
4748
*
4849
* @opensearch.internal
4950
*/
50-
public class SearchShardTask extends CancellableTask {
51+
public class SearchShardTask extends CancellableTask implements SearchBackpressureTask {
5152
// generating metadata in a lazy way since source can be quite big
5253
private final MemoizedSupplier<String> metadataSupplier;
5354

server/src/main/java/org/opensearch/action/search/SearchTask.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434

3535
import org.opensearch.common.unit.TimeValue;
3636
import org.opensearch.tasks.CancellableTask;
37+
import org.opensearch.tasks.SearchBackpressureTask;
3738
import org.opensearch.tasks.TaskId;
3839

3940
import java.util.Map;
@@ -46,7 +47,7 @@
4647
*
4748
* @opensearch.internal
4849
*/
49-
public class SearchTask extends CancellableTask {
50+
public class SearchTask extends CancellableTask implements SearchBackpressureTask {
5051
// generating description in a lazy way since source can be quite big
5152
private final Supplier<String> descriptionSupplier;
5253
private SearchProgressListener progressListener = SearchProgressListener.NOOP;

server/src/main/java/org/opensearch/common/settings/ClusterSettings.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@
4444
import org.opensearch.search.backpressure.settings.NodeDuressSettings;
4545
import org.opensearch.search.backpressure.settings.SearchBackpressureSettings;
4646
import org.opensearch.search.backpressure.settings.SearchShardTaskSettings;
47-
import org.opensearch.search.backpressure.trackers.CpuUsageTracker;
48-
import org.opensearch.search.backpressure.trackers.ElapsedTimeTracker;
49-
import org.opensearch.search.backpressure.trackers.HeapUsageTracker;
47+
import org.opensearch.search.backpressure.settings.SearchTaskSettings;
5048
import org.opensearch.tasks.TaskManager;
5149
import org.opensearch.tasks.TaskResourceTrackingService;
5250
import org.opensearch.watcher.ResourceWatcherService;
@@ -600,18 +598,31 @@ public void apply(Settings value, Settings current, Settings previous) {
600598

601599
// Settings related to search backpressure
602600
SearchBackpressureSettings.SETTING_MODE,
603-
SearchBackpressureSettings.SETTING_CANCELLATION_RATIO,
604-
SearchBackpressureSettings.SETTING_CANCELLATION_RATE,
605-
SearchBackpressureSettings.SETTING_CANCELLATION_BURST,
601+
606602
NodeDuressSettings.SETTING_NUM_SUCCESSIVE_BREACHES,
607603
NodeDuressSettings.SETTING_CPU_THRESHOLD,
608604
NodeDuressSettings.SETTING_HEAP_THRESHOLD,
605+
SearchTaskSettings.SETTING_CANCELLATION_RATIO,
606+
SearchTaskSettings.SETTING_CANCELLATION_RATE,
607+
SearchTaskSettings.SETTING_CANCELLATION_BURST,
608+
SearchTaskSettings.SETTING_HEAP_PERCENT_THRESHOLD,
609+
SearchTaskSettings.SETTING_HEAP_VARIANCE_THRESHOLD,
610+
SearchTaskSettings.SETTING_HEAP_MOVING_AVERAGE_WINDOW_SIZE,
611+
SearchTaskSettings.SETTING_CPU_TIME_MILLIS_THRESHOLD,
612+
SearchTaskSettings.SETTING_ELAPSED_TIME_MILLIS_THRESHOLD,
613+
SearchTaskSettings.SETTING_TOTAL_HEAP_PERCENT_THRESHOLD,
614+
SearchShardTaskSettings.SETTING_CANCELLATION_RATIO,
615+
SearchShardTaskSettings.SETTING_CANCELLATION_RATE,
616+
SearchShardTaskSettings.SETTING_CANCELLATION_BURST,
617+
SearchShardTaskSettings.SETTING_HEAP_PERCENT_THRESHOLD,
618+
SearchShardTaskSettings.SETTING_HEAP_VARIANCE_THRESHOLD,
619+
SearchShardTaskSettings.SETTING_HEAP_MOVING_AVERAGE_WINDOW_SIZE,
620+
SearchShardTaskSettings.SETTING_CPU_TIME_MILLIS_THRESHOLD,
621+
SearchShardTaskSettings.SETTING_ELAPSED_TIME_MILLIS_THRESHOLD,
609622
SearchShardTaskSettings.SETTING_TOTAL_HEAP_PERCENT_THRESHOLD,
610-
HeapUsageTracker.SETTING_HEAP_PERCENT_THRESHOLD,
611-
HeapUsageTracker.SETTING_HEAP_VARIANCE_THRESHOLD,
612-
HeapUsageTracker.SETTING_HEAP_MOVING_AVERAGE_WINDOW_SIZE,
613-
CpuUsageTracker.SETTING_CPU_TIME_MILLIS_THRESHOLD,
614-
ElapsedTimeTracker.SETTING_ELAPSED_TIME_MILLIS_THRESHOLD
623+
SearchBackpressureSettings.SETTING_CANCELLATION_RATIO, // deprecated
624+
SearchBackpressureSettings.SETTING_CANCELLATION_RATE, // deprecated
625+
SearchBackpressureSettings.SETTING_CANCELLATION_BURST // deprecated
615626
)
616627
)
617628
);

server/src/main/java/org/opensearch/node/Node.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,8 @@ protected Node(
867867
final SearchBackpressureService searchBackpressureService = new SearchBackpressureService(
868868
searchBackpressureSettings,
869869
taskResourceTrackingService,
870-
threadPool
870+
threadPool,
871+
transportService.getTaskManager()
871872
);
872873

873874
final RecoverySettings recoverySettings = new RecoverySettings(settings, settingsModule.getClusterSettings());
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
*
4+
* The OpenSearch Contributors require contributions made to
5+
* this file be licensed under the Apache-2.0 license or a
6+
* compatible open source license.
7+
*/
8+
9+
package org.opensearch.search.backpressure;
10+
11+
/**
12+
* Listener for callbacks related to cancellation settings
13+
*/
14+
public interface CancellationSettingsListener {
15+
16+
void onRatioChanged(double ratio);
17+
18+
void onRateChanged(double rate);
19+
20+
void onBurstChanged(double burst);
21+
}

0 commit comments

Comments
 (0)