Skip to content

[BUG] Unable to apply search_backpressure cluster settings #16432

Closed
@andrross

Description

@andrross

Describe the bug

Attempting to apply search_backpressure.search_shard_task.cancellation_burst or search_backpressure.search_task.cancellation_burst settings results in the cluster manager getting stuck in a loop emitting an error that says "java.lang.IllegalArgumentException: rate must be greater than zero".

Related component

Search

To Reproduce

Download the OpenSearch 2.17 min distribution tarball, extract it, then launch the process with ./bin/opensearch. Send the following command:

PUT {{endpoint}}/_cluster/settings
{
    "persistent" :{
        "search_backpressure.search_shard_task.cancellation_burst": 5.0,
        "search_backpressure.search_task.cancellation_burst": 5.0
    },
    "transient" :{
        "search_backpressure.search_shard_task.cancellation_burst": 5.0,
        "search_backpressure.search_task.cancellation_burst": 5.0
    }
}

The cluster manager gets stuck in a loop continually printing the following error:

[2024-10-22T17:04:48,028][WARN ][o.o.c.s.ClusterApplierService] [ip-172-31-30-74] failed to apply updated cluster state in [0s]:
version [12], uuid [Ijs3Brl0S-iEtMlifjtcmA], source [becoming candidate: clusterApplier#onNewClusterState]
org.opensearch.OpenSearchException: java.lang.IllegalArgumentException: rate must be greater than zero
        at org.opensearch.ExceptionsHelper.maybeThrowRuntimeAndSuppress(ExceptionsHelper.java:209) ~[opensearch-core-2.17.0.jar:2.17.0]                                                                                       at org.opensearch.search.backpressure.settings.SearchShardTaskSettings.notifyListeners(SearchShardTaskSettings.java:270) ~[opensearch-2.17.0.jar:2.17.0]                                                              at org.opensearch.search.backpressure.settings.SearchShardTaskSettings.setCancellationBurst(SearchShardTaskSettings.java:252) ~[opensearch-2.17.0.jar:2.17.0]                                                         at org.opensearch.common.settings.Setting$Updater.apply(Setting.java:1257) ~[opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.common.settings.AbstractScopedSettings$SettingUpdater.lambda$updater$0(AbstractScopedSettings.java:696) ~[opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.common.settings.AbstractScopedSettings.applySettings(AbstractScopedSettings.java:232) ~[opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.cluster.service.ClusterApplierService.applyChanges(ClusterApplierService.java:575) ~[opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.cluster.service.ClusterApplierService.runTask(ClusterApplierService.java:503) [opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.cluster.service.ClusterApplierService$UpdateTask.run(ClusterApplierService.java:205) [opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:946) [opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.common.util.concurrent.PrioritizedOpenSearchThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedOpenSearchThreadPoolExecutor.java:283) [opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.common.util.concurrent.PrioritizedOpenSearchThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedOpenSearchThreadPoolExecutor.java:246) [opensearch-2.17.0.jar:2.17.0]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) [?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) [?:?]                                                                                                                    at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]                                                                                                                                                     Caused by: java.lang.IllegalArgumentException: rate must be greater than zero                                                                                                                                                 at org.opensearch.common.util.TokenBucket.<init>(TokenBucket.java:52) ~[opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.common.util.TokenBucket.<init>(TokenBucket.java:47) ~[opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.search.backpressure.SearchBackpressureState.onRateChanged(SearchBackpressureState.java:95) ~[opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.search.backpressure.SearchBackpressureState.onBurstChanged(SearchBackpressureState.java:101) ~[opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.search.backpressure.settings.SearchShardTaskSettings.lambda$setCancellationBurst$2(SearchShardTaskSettings.java:252) ~[opensearch-2.17.0.jar:2.17.0]
        at org.opensearch.search.backpressure.settings.SearchShardTaskSettings.notifyListeners(SearchShardTaskSettings.java:264) ~[opensearch-2.17.0.jar:2.17.0]
        ... 13 more

Expected behavior

Settings are applied without error.

Additional Details

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    SearchSearch query, autocomplete ...etcbugSomething isn't workinguntriaged

    Type

    No type

    Projects

    Status

    ✅ Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions