From 208f663278e15cde6c8be2a8c6d53d3c1b93a995 Mon Sep 17 00:00:00 2001 From: Nhat Nguyen Date: Mon, 27 Jan 2020 15:19:17 -0500 Subject: [PATCH 1/2] Deprecate translog retention settings --- .../reference/index-modules/translog.asciidoc | 4 +++ .../test/indices.stats/20_translog.yml | 35 +++++++++++++++++++ .../metadata/MetaDataCreateIndexService.java | 10 ++++++ .../MetaDataUpdateSettingsService.java | 7 ++++ .../MetaDataCreateIndexServiceTests.java | 16 +++++++++ 5 files changed, 72 insertions(+) diff --git a/docs/reference/index-modules/translog.asciidoc b/docs/reference/index-modules/translog.asciidoc index 48947b348a47c..e349875d14bee 100644 --- a/docs/reference/index-modules/translog.asciidoc +++ b/docs/reference/index-modules/translog.asciidoc @@ -80,6 +80,10 @@ update, or bulk request. This setting accepts the following parameters: [[index-modules-translog-retention]] ==== Translog retention +deprecated::[7.4.0, translog retention settings are deprecated in favor of +<>. These settings are +effectively ignored since 7.4 and will be removed in a future version]. + If an index is not using <> to retain historical operations then {es} recovers each replica shard by replaying operations from the primary's translog. This means it is important for the diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.stats/20_translog.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.stats/20_translog.yml index fbbc49bbe59eb..4788dd986f0cd 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.stats/20_translog.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.stats/20_translog.yml @@ -43,6 +43,41 @@ - lt: { indices.test.primaries.translog.uncommitted_size_in_bytes: $creation_size } - match: { indices.test.primaries.translog.uncommitted_operations: 0 } +--- +"Translog retention settings are deprecated": + - skip: + version: " - 7.99.99" + reason: "translog retention are deprecated in 8.0" + features: "warnings" + - do: + warnings: + - Translog retention settings [index.translog.retention.age] and [index.translog.retention.size] + are deprecated and effectively ignored. They will be removed in a future version. + indices.create: + index: test + body: + settings: + index.translog.retention.size: 128mb + - do: + indices.put_settings: + index: test + body: + index.number_of_replicas: 0 + - do: + warnings: + - Translog retention settings [index.translog.retention.age] and [index.translog.retention.size] + are deprecated and effectively ignored. They will be removed in a future version. + indices.put_settings: + index: test + body: + index.translog.retention.age: 1h + - do: + indices.put_settings: + index: test + body: + index.translog.retention.age: null + index.translog.retention.size: null + --- "Translog last modified age stats": diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java b/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java index 9ad1676c359f0..b14a74b834c89 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java @@ -472,6 +472,7 @@ static Settings aggregateIndexSettings(ClusterState currentState, CreateIndexClu throw new IllegalArgumentException("Creating indices with soft-deletes disabled is no longer supported. " + "Please do not specify a value for setting [index.soft_deletes.enabled]."); } + validateTranslogRetentionSettings(indexSettings); return indexSettings; } @@ -929,4 +930,13 @@ public static int calculateNumRoutingShards(int numShards, Version indexVersionC return numShards; } } + + public static void validateTranslogRetentionSettings(Settings indexSettings) { + if (IndexSettings.INDEX_SOFT_DELETES_SETTING.get(indexSettings) && + (IndexSettings.INDEX_TRANSLOG_RETENTION_AGE_SETTING.exists(indexSettings) + || IndexSettings.INDEX_TRANSLOG_RETENTION_SIZE_SETTING.exists(indexSettings))) { + deprecationLogger.deprecatedAndMaybeLog("translog_retention", "Translog retention settings [index.translog.retention.age] " + + "and [index.translog.retention.size] are deprecated and effectively ignored. They will be removed in a future version."); + } + } } diff --git a/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java b/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java index 4b644777496ed..aa1d894933ca1 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java @@ -43,6 +43,7 @@ import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.index.Index; +import org.elasticsearch.index.IndexSettings; import org.elasticsearch.indices.IndicesService; import org.elasticsearch.threadpool.ThreadPool; @@ -214,6 +215,12 @@ public ClusterState execute(ClusterState currentState) { } } + if (IndexSettings.INDEX_TRANSLOG_RETENTION_AGE_SETTING.exists(normalizedSettings) || + IndexSettings.INDEX_TRANSLOG_RETENTION_SIZE_SETTING.exists(normalizedSettings)) { + for (String index : actualIndices) { + MetaDataCreateIndexService.validateTranslogRetentionSettings(metaDataBuilder.get(index).getSettings()); + } + } // increment settings versions for (final String index : actualIndices) { if (same(currentState.metaData().index(index).getSettings(), metaDataBuilder.get(index).getSettings()) == false) { diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexServiceTests.java b/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexServiceTests.java index f6ba70e917f58..dd9316d66457f 100644 --- a/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexServiceTests.java +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexServiceTests.java @@ -46,6 +46,7 @@ import org.elasticsearch.common.settings.IndexScopedSettings; import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.util.BigArrays; import org.elasticsearch.common.xcontent.NamedXContentRegistry; import org.elasticsearch.common.xcontent.XContentFactory; @@ -910,6 +911,21 @@ public void testRejectWithSoftDeletesDisabled() { + "Please do not specify a value for setting [index.soft_deletes.enabled].")); } + public void testValidateTranslogRetentionSettings() { + request = new CreateIndexClusterStateUpdateRequest("create index", "test", "test"); + final Settings.Builder settings = Settings.builder(); + if (randomBoolean()) { + settings.put(IndexSettings.INDEX_TRANSLOG_RETENTION_AGE_SETTING.getKey(), TimeValue.timeValueMillis(between(1, 120))); + } else { + settings.put(IndexSettings.INDEX_TRANSLOG_RETENTION_SIZE_SETTING.getKey(), between(1, 128) + "mb"); + } + request.settings(settings.build()); + aggregateIndexSettings(ClusterState.EMPTY_STATE, request, List.of(), Map.of(), + null, Settings.EMPTY, IndexScopedSettings.DEFAULT_SCOPED_SETTINGS); + assertWarnings("Translog retention settings [index.translog.retention.age] " + + "and [index.translog.retention.size] are deprecated and effectively ignored. They will be removed in a future version."); + } + private IndexTemplateMetaData addMatchingTemplate(Consumer configurator) { IndexTemplateMetaData.Builder builder = templateMetaDataBuilder("template1", "te*"); configurator.accept(builder); From b53106f369340352181532c295d77bb19d040949 Mon Sep 17 00:00:00 2001 From: Nhat Nguyen Date: Wed, 29 Jan 2020 08:06:13 -0500 Subject: [PATCH 2/2] reason --- .../resources/rest-api-spec/test/indices.stats/20_translog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.stats/20_translog.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.stats/20_translog.yml index 4788dd986f0cd..0fdb7662559b6 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/indices.stats/20_translog.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/indices.stats/20_translog.yml @@ -47,7 +47,7 @@ "Translog retention settings are deprecated": - skip: version: " - 7.99.99" - reason: "translog retention are deprecated in 8.0" + reason: "translog retention settings are deprecated in 8.0" features: "warnings" - do: warnings: