diff --git a/muted-tests.yml b/muted-tests.yml index 01d935b7340b2..a7b77c8807c56 100644 --- a/muted-tests.yml +++ b/muted-tests.yml @@ -78,9 +78,6 @@ tests: - class: org.elasticsearch.search.basic.SearchWithRandomDisconnectsIT method: testSearchWithRandomDisconnects issue: https://github.com/elastic/elasticsearch/issues/116175 -- class: org.elasticsearch.xpack.deprecation.DeprecationHttpIT - method: testDeprecatedSettingsReturnWarnings - issue: https://github.com/elastic/elasticsearch/issues/108628 - class: org.elasticsearch.xpack.shutdown.NodeShutdownIT method: testAllocationPreventedForRemoval issue: https://github.com/elastic/elasticsearch/issues/116363 diff --git a/server/src/main/java/org/elasticsearch/action/admin/cluster/settings/TransportClusterUpdateSettingsAction.java b/server/src/main/java/org/elasticsearch/action/admin/cluster/settings/TransportClusterUpdateSettingsAction.java index b5cd2d2c3dc48..4d5ddcab512de 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/cluster/settings/TransportClusterUpdateSettingsAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/cluster/settings/TransportClusterUpdateSettingsAction.java @@ -27,10 +27,12 @@ import org.elasticsearch.cluster.service.ClusterService; import org.elasticsearch.cluster.service.MasterService; import org.elasticsearch.common.Priority; +import org.elasticsearch.common.Strings; import org.elasticsearch.common.settings.ClusterSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.SettingsUpdater; import org.elasticsearch.common.util.concurrent.EsExecutors; +import org.elasticsearch.core.Nullable; import org.elasticsearch.core.SuppressForbidden; import org.elasticsearch.injection.guice.Inject; import org.elasticsearch.reservedstate.action.ReservedClusterSettingsAction; @@ -157,7 +159,12 @@ protected void masterOperation( final ClusterState state, final ActionListener listener ) { - submitUnbatchedTask(UPDATE_TASK_SOURCE, new ClusterUpdateSettingsTask(clusterSettings, Priority.IMMEDIATE, request, listener) { + // Force propagating the X-Opaque-Id to the settings update task if set, so we can correctly track deprecations. + String xOpaqueId = task.getHeader(Task.X_OPAQUE_ID_HTTP_HEADER); + Runnable contextUpdater = Strings.hasText(xOpaqueId) + ? () -> threadPool.getThreadContext().putHeader(Task.X_OPAQUE_ID_HTTP_HEADER, xOpaqueId) + : null; + submitUnbatchedTask(UPDATE_TASK_SOURCE, new ClusterUpdateSettingsTask(clusterSettings, request, listener, contextUpdater) { @Override protected ClusterUpdateSettingsResponse newResponse(boolean acknowledged) { return new ClusterUpdateSettingsResponse(acknowledged, updater.getTransientUpdates(), updater.getPersistentUpdate()); @@ -237,20 +244,25 @@ private static class ClusterUpdateSettingsTask extends AckedClusterStateUpdateTa protected volatile boolean reroute = false; protected final SettingsUpdater updater; protected final ClusterUpdateSettingsRequest request; + protected final @Nullable Runnable threadContextUpdater; ClusterUpdateSettingsTask( final ClusterSettings clusterSettings, - Priority priority, ClusterUpdateSettingsRequest request, - ActionListener listener + ActionListener listener, + @Nullable Runnable threadContextUpdater ) { - super(priority, request, listener); + super(Priority.IMMEDIATE, request, listener); this.updater = new SettingsUpdater(clusterSettings); this.request = request; + this.threadContextUpdater = threadContextUpdater; } @Override public ClusterState execute(final ClusterState currentState) { + if (threadContextUpdater != null) { + threadContextUpdater.run(); + } final ClusterState clusterState = updater.updateSettings( currentState, request.transientSettings(),