From 91d89eb26fa503fac6c6b64e815d2029f64aa685 Mon Sep 17 00:00:00 2001 From: Lee Hinman Date: Tue, 17 Sep 2019 13:54:12 -0600 Subject: [PATCH] Add node setting for disabling SLM This adds the `xpack.slm.enabled` setting to allow disabling of SLM functionality as well as its HTTP API endpoints. Relates to #38461 --- docs/reference/ilm/apis/slm-api.asciidoc | 4 +- docs/reference/settings/ilm-settings.asciidoc | 9 ++ .../xpack/core/XPackSettings.java | 7 ++ .../xpack/ilm/IndexLifecycle.java | 82 +++++++++++-------- 4 files changed, 67 insertions(+), 35 deletions(-) diff --git a/docs/reference/ilm/apis/slm-api.asciidoc b/docs/reference/ilm/apis/slm-api.asciidoc index 51cbb0f8968e0..59c1601ab9b30 100644 --- a/docs/reference/ilm/apis/slm-api.asciidoc +++ b/docs/reference/ilm/apis/slm-api.asciidoc @@ -14,7 +14,9 @@ policies, a way to retrieve policies, and a way to delete unwanted policies, as well as a separate API for immediately invoking a snapshot based on a policy. Since SLM falls under the same category as ILM, it is stopped and started by -using the <> ILM APIs. +using the <> ILM APIs. It is, however, managed +by a different enable setting. To disable SLM's functionality, set the cluster +setting `xpack.slm.enabled` to `false` in elasticsearch.yml. [[slm-api-put]] === Put Snapshot Lifecycle Policy API diff --git a/docs/reference/settings/ilm-settings.asciidoc b/docs/reference/settings/ilm-settings.asciidoc index e089ddc259f10..80c20b59b2bfc 100644 --- a/docs/reference/settings/ilm-settings.asciidoc +++ b/docs/reference/settings/ilm-settings.asciidoc @@ -2,6 +2,15 @@ [[ilm-settings]] === {ilm-cap} settings +These are the settings available for configuring Index Lifecycle Management + +==== Cluster level settings + +`xpack.ilm.enabled`:: +Whether ILM is enabled or disabled, setting this to `false` disables any +ILM REST API endpoints and functionality. Defaults to `true`. + +==== Index level settings These index-level {ilm-init} settings are typically configured through index templates. For more information, see <>. diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackSettings.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackSettings.java index 618b4c86a9126..70e6aebd15db5 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackSettings.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/XPackSettings.java @@ -87,6 +87,12 @@ private XPackSettings() { public static final Setting INDEX_LIFECYCLE_ENABLED = Setting.boolSetting("xpack.ilm.enabled", true, Setting.Property.NodeScope); + /** + * Setting for enabling or disabling the snapshot lifecycle extension. Defaults to true. + */ + public static final Setting SNAPSHOT_LIFECYCLE_ENABLED = Setting.boolSetting("xpack.slm.enabled", true, + Setting.Property.NodeScope); + /** Setting for enabling or disabling TLS. Defaults to false. */ public static final Setting TRANSPORT_SSL_ENABLED = Setting.boolSetting("xpack.security.transport.ssl.enabled", false, Property.NodeScope); @@ -210,6 +216,7 @@ public static List> getAllSettings() { settings.add(ROLLUP_ENABLED); settings.add(PASSWORD_HASHING_ALGORITHM); settings.add(INDEX_LIFECYCLE_ENABLED); + settings.add(SNAPSHOT_LIFECYCLE_ENABLED); settings.add(DATA_FRAME_ENABLED); settings.add(FLATTENED_ENABLED); settings.add(VECTORS_ENABLED); diff --git a/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/IndexLifecycle.java b/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/IndexLifecycle.java index 1527eeb96a32c..2577e71921873 100644 --- a/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/IndexLifecycle.java +++ b/x-pack/plugin/ilm/src/main/java/org/elasticsearch/xpack/ilm/IndexLifecycle.java @@ -106,13 +106,13 @@ import java.io.IOException; import java.time.Clock; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.function.Supplier; -import static java.util.Collections.emptyList; import static org.elasticsearch.xpack.core.ClientHelper.INDEX_LIFECYCLE_ORIGIN; public class IndexLifecycle extends Plugin implements ActionPlugin { @@ -121,11 +121,13 @@ public class IndexLifecycle extends Plugin implements ActionPlugin { private final SetOnce snapshotRetentionService = new SetOnce<>(); private final SetOnce snapshotHistoryStore = new SetOnce<>(); private Settings settings; - private boolean enabled; + private boolean ilmEnabled; + private boolean slmEnabled; public IndexLifecycle(Settings settings) { this.settings = settings; - this.enabled = XPackSettings.INDEX_LIFECYCLE_ENABLED.get(settings); + this.ilmEnabled = XPackSettings.INDEX_LIFECYCLE_ENABLED.get(settings); + this.slmEnabled = XPackSettings.SNAPSHOT_LIFECYCLE_ENABLED.get(settings); } // overridable by tests @@ -150,22 +152,25 @@ public Collection createComponents(Client client, ClusterService cluster ResourceWatcherService resourceWatcherService, ScriptService scriptService, NamedXContentRegistry xContentRegistry, Environment environment, NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry) { - if (enabled == false) { - return emptyList(); - } - indexLifecycleInitialisationService.set(new IndexLifecycleService(settings, client, clusterService, threadPool, + final List components = new ArrayList<>(); + if (ilmEnabled) { + indexLifecycleInitialisationService.set(new IndexLifecycleService(settings, client, clusterService, threadPool, getClock(), System::currentTimeMillis, xContentRegistry)); - SnapshotLifecycleTemplateRegistry templateRegistry = new SnapshotLifecycleTemplateRegistry(settings, clusterService, threadPool, - client, xContentRegistry); - snapshotHistoryStore.set(new SnapshotHistoryStore(settings, new OriginSettingClient(client, INDEX_LIFECYCLE_ORIGIN), clusterService - )); - snapshotLifecycleService.set(new SnapshotLifecycleService(settings, - () -> new SnapshotLifecycleTask(client, clusterService, snapshotHistoryStore.get()), clusterService, getClock())); - snapshotRetentionService.set(new SnapshotRetentionService(settings, - () -> new SnapshotRetentionTask(client, clusterService, System::nanoTime, snapshotHistoryStore.get(), threadPool), - clusterService, getClock())); - return Arrays.asList(indexLifecycleInitialisationService.get(), snapshotLifecycleService.get(), snapshotHistoryStore.get(), - snapshotRetentionService.get()); + components.add(indexLifecycleInitialisationService.get()); + } + if (slmEnabled) { + SnapshotLifecycleTemplateRegistry templateRegistry = new SnapshotLifecycleTemplateRegistry(settings, clusterService, threadPool, + client, xContentRegistry); + snapshotHistoryStore.set(new SnapshotHistoryStore(settings, new OriginSettingClient(client, INDEX_LIFECYCLE_ORIGIN), + clusterService)); + snapshotLifecycleService.set(new SnapshotLifecycleService(settings, + () -> new SnapshotLifecycleTask(client, clusterService, snapshotHistoryStore.get()), clusterService, getClock())); + snapshotRetentionService.set(new SnapshotRetentionService(settings, + () -> new SnapshotRetentionTask(client, clusterService, System::nanoTime, snapshotHistoryStore.get(), threadPool), + clusterService, getClock())); + components.addAll(Arrays.asList(snapshotLifecycleService.get(), snapshotHistoryStore.get(), snapshotRetentionService.get())); + } + return components; } @Override @@ -201,10 +206,9 @@ public List getNa public List getRestHandlers(Settings settings, RestController restController, ClusterSettings clusterSettings, IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter, IndexNameExpressionResolver indexNameExpressionResolver, Supplier nodesInCluster) { - if (enabled == false) { - return emptyList(); - } - return Arrays.asList( + List handlers = new ArrayList<>(); + if (ilmEnabled) { + handlers.addAll(Arrays.asList( new RestPutLifecycleAction(restController), new RestGetLifecycleAction(restController), new RestDeleteLifecycleAction(restController), @@ -214,14 +218,19 @@ public List getRestHandlers(Settings settings, RestController restC new RestRetryAction(restController), new RestStopAction(restController), new RestStartILMAction(restController), - new RestGetStatusAction(restController), - // Snapshot lifecycle actions + new RestGetStatusAction(restController) + )); + } + if (slmEnabled) { + handlers.addAll(Arrays.asList( new RestPutSnapshotLifecycleAction(restController), new RestDeleteSnapshotLifecycleAction(restController), new RestGetSnapshotLifecycleAction(restController), new RestExecuteSnapshotLifecycleAction(restController), new RestGetSnapshotLifecycleStatsAction(restController) - ); + )); + } + return handlers; } @Override @@ -230,10 +239,11 @@ public List getRestHandlers(Settings settings, RestController restC new ActionHandler<>(XPackUsageFeatureAction.INDEX_LIFECYCLE, IndexLifecycleUsageTransportAction.class); var infoAction = new ActionHandler<>(XPackInfoFeatureAction.INDEX_LIFECYCLE, IndexLifecycleInfoTransportAction.class); - if (enabled == false) { - return Arrays.asList(usageAction, infoAction); - } - return Arrays.asList( + List> actions = new ArrayList<>(); + actions.add(usageAction); + actions.add(infoAction); + if (ilmEnabled) { + actions.addAll(Arrays.asList( new ActionHandler<>(PutLifecycleAction.INSTANCE, TransportPutLifecycleAction.class), new ActionHandler<>(GetLifecycleAction.INSTANCE, TransportGetLifecycleAction.class), new ActionHandler<>(DeleteLifecycleAction.INSTANCE, TransportDeleteLifecycleAction.class), @@ -243,15 +253,19 @@ public List getRestHandlers(Settings settings, RestController restC new ActionHandler<>(RetryAction.INSTANCE, TransportRetryAction.class), new ActionHandler<>(StartILMAction.INSTANCE, TransportStartILMAction.class), new ActionHandler<>(StopILMAction.INSTANCE, TransportStopILMAction.class), - new ActionHandler<>(GetStatusAction.INSTANCE, TransportGetStatusAction.class), - // Snapshot lifecycle actions + new ActionHandler<>(GetStatusAction.INSTANCE, TransportGetStatusAction.class) + )); + } + if (slmEnabled) { + actions.addAll(Arrays.asList( new ActionHandler<>(PutSnapshotLifecycleAction.INSTANCE, TransportPutSnapshotLifecycleAction.class), new ActionHandler<>(DeleteSnapshotLifecycleAction.INSTANCE, TransportDeleteSnapshotLifecycleAction.class), new ActionHandler<>(GetSnapshotLifecycleAction.INSTANCE, TransportGetSnapshotLifecycleAction.class), new ActionHandler<>(ExecuteSnapshotLifecycleAction.INSTANCE, TransportExecuteSnapshotLifecycleAction.class), - new ActionHandler<>(GetSnapshotLifecycleStatsAction.INSTANCE, TransportGetSnapshotLifecycleStatsAction.class), - usageAction, - infoAction); + new ActionHandler<>(GetSnapshotLifecycleStatsAction.INSTANCE, TransportGetSnapshotLifecycleStatsAction.class) + )); + } + return actions; } @Override