|
30 | 30 | import org.elasticsearch.common.settings.Settings; |
31 | 31 | import org.elasticsearch.common.settings.SettingsUpdater; |
32 | 32 | import org.elasticsearch.common.util.concurrent.EsExecutors; |
| 33 | +import org.elasticsearch.common.util.concurrent.ThreadContext; |
33 | 34 | import org.elasticsearch.core.SuppressForbidden; |
34 | 35 | import org.elasticsearch.injection.guice.Inject; |
35 | 36 | import org.elasticsearch.reservedstate.action.ReservedClusterSettingsAction; |
|
40 | 41 | import java.util.HashSet; |
41 | 42 | import java.util.Optional; |
42 | 43 | import java.util.Set; |
| 44 | +import java.util.function.Supplier; |
43 | 45 |
|
44 | 46 | import static org.elasticsearch.common.settings.AbstractScopedSettings.ARCHIVED_SETTINGS_PREFIX; |
45 | 47 |
|
@@ -155,7 +157,8 @@ protected void masterOperation( |
155 | 157 | final ClusterState state, |
156 | 158 | final ActionListener<ClusterUpdateSettingsResponse> listener |
157 | 159 | ) { |
158 | | - submitUnbatchedTask(UPDATE_TASK_SOURCE, new ClusterUpdateSettingsTask(clusterSettings, Priority.IMMEDIATE, request, listener) { |
| 160 | + var storedContext = threadPool.getThreadContext().newRestorableContext(false, true); |
| 161 | + var updateSettingsTask = new ClusterUpdateSettingsTask(clusterSettings, Priority.IMMEDIATE, request, storedContext, listener) { |
159 | 162 | @Override |
160 | 163 | protected ClusterUpdateSettingsResponse newResponse(boolean acknowledged) { |
161 | 164 | return new ClusterUpdateSettingsResponse(acknowledged, updater.getTransientUpdates(), updater.getPersistentUpdate()); |
@@ -228,35 +231,41 @@ public void onFailure(Exception e) { |
228 | 231 | logger.debug(() -> "failed to perform [" + UPDATE_TASK_SOURCE + "]", e); |
229 | 232 | super.onFailure(e); |
230 | 233 | } |
231 | | - }); |
| 234 | + }; |
| 235 | + submitUnbatchedTask(UPDATE_TASK_SOURCE, updateSettingsTask); |
232 | 236 | } |
233 | 237 |
|
234 | 238 | private static class ClusterUpdateSettingsTask extends AckedClusterStateUpdateTask { |
235 | 239 | protected volatile boolean reroute = false; |
236 | 240 | protected final SettingsUpdater updater; |
237 | 241 | protected final ClusterUpdateSettingsRequest request; |
| 242 | + private final Supplier<ThreadContext.StoredContext> storedContext; |
238 | 243 |
|
239 | 244 | ClusterUpdateSettingsTask( |
240 | 245 | final ClusterSettings clusterSettings, |
241 | 246 | Priority priority, |
242 | 247 | ClusterUpdateSettingsRequest request, |
| 248 | + Supplier<ThreadContext.StoredContext> storedContext, |
243 | 249 | ActionListener<? extends AcknowledgedResponse> listener |
244 | 250 | ) { |
245 | 251 | super(priority, request, listener); |
246 | 252 | this.updater = new SettingsUpdater(clusterSettings); |
247 | 253 | this.request = request; |
| 254 | + this.storedContext = storedContext; |
248 | 255 | } |
249 | 256 |
|
250 | 257 | @Override |
251 | 258 | public ClusterState execute(final ClusterState currentState) { |
252 | | - final ClusterState clusterState = updater.updateSettings( |
253 | | - currentState, |
254 | | - request.transientSettings(), |
255 | | - request.persistentSettings(), |
256 | | - logger |
257 | | - ); |
258 | | - reroute = clusterState != currentState; |
259 | | - return clusterState; |
| 259 | + try (var ignored = storedContext.get()) { |
| 260 | + final ClusterState clusterState = updater.updateSettings( |
| 261 | + currentState, |
| 262 | + request.transientSettings(), |
| 263 | + request.persistentSettings(), |
| 264 | + logger |
| 265 | + ); |
| 266 | + reroute = clusterState != currentState; |
| 267 | + return clusterState; |
| 268 | + } |
260 | 269 | } |
261 | 270 | } |
262 | 271 |
|
|
0 commit comments