From 27ee1abdcb3ae55b19bcf6c50026236a3a3396ef Mon Sep 17 00:00:00 2001 From: Rishikesh1159 Date: Wed, 5 Apr 2023 07:45:11 +0000 Subject: [PATCH 1/5] Add new SEGMENT_REPLICATION_CLUSTER_SETTING feature flag. Signed-off-by: Rishikesh1159 --- .../SegmentReplicationClusterSettingIT.java | 6 +++++- .../opensearch/cluster/metadata/IndexMetadata.java | 4 ---- .../opensearch/common/settings/ClusterSettings.java | 2 +- .../common/settings/FeatureFlagSettings.java | 1 + .../org/opensearch/common/util/FeatureFlags.java | 13 +++++++++++++ .../java/org/opensearch/index/IndexSettings.java | 2 +- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/server/src/internalClusterTest/java/org/opensearch/indices/replication/SegmentReplicationClusterSettingIT.java b/server/src/internalClusterTest/java/org/opensearch/indices/replication/SegmentReplicationClusterSettingIT.java index c612956a3066f..1bf451fd8d8fc 100644 --- a/server/src/internalClusterTest/java/org/opensearch/indices/replication/SegmentReplicationClusterSettingIT.java +++ b/server/src/internalClusterTest/java/org/opensearch/indices/replication/SegmentReplicationClusterSettingIT.java @@ -47,7 +47,11 @@ public Settings indexSettings() { @Override protected Settings featureFlagSettings() { - return Settings.builder().put(super.featureFlagSettings()).put(FeatureFlags.REPLICATION_TYPE, "true").build(); + return Settings.builder() + .put(super.featureFlagSettings()) + .put(FeatureFlags.SEGMENT_REPLICATION_CLUSTER_SETTING, "true") + .put(FeatureFlags.REPLICATION_TYPE, "true") + .build(); } @Override diff --git a/server/src/main/java/org/opensearch/cluster/metadata/IndexMetadata.java b/server/src/main/java/org/opensearch/cluster/metadata/IndexMetadata.java index f96eb9955593e..729882024831a 100644 --- a/server/src/main/java/org/opensearch/cluster/metadata/IndexMetadata.java +++ b/server/src/main/java/org/opensearch/cluster/metadata/IndexMetadata.java @@ -330,10 +330,6 @@ public void validate(final Boolean value, final Map, Object> settings + INDEX_REPLICATION_TYPE_SETTING.getKey() + " should be set to " + ReplicationType.SEGMENT - + " or " - + CLUSTER_REPLICATION_TYPE_SETTING.getKey() - + " should be set to " - + Boolean.TRUE ); } } diff --git a/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java b/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java index b7979407f97a0..26c85ab9b0456 100644 --- a/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java +++ b/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java @@ -646,7 +646,7 @@ public void apply(Settings value, Settings current, Settings previous) { public static final Map> FEATURE_FLAGGED_CLUSTER_SETTINGS = Map.of( FeatureFlags.SEARCHABLE_SNAPSHOT, List.of(Node.NODE_SEARCH_CACHE_SIZE_SETTING), - FeatureFlags.REPLICATION_TYPE, + FeatureFlags.SEGMENT_REPLICATION_CLUSTER_SETTING, List.of(IndicesService.CLUSTER_REPLICATION_TYPE_SETTING) ); diff --git a/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java b/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java index 8fb6cd115f24b..bf1e91e90249b 100644 --- a/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java +++ b/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java @@ -35,6 +35,7 @@ protected FeatureFlagSettings( new HashSet<>( Arrays.asList( FeatureFlags.REPLICATION_TYPE_SETTING, + FeatureFlags.SEGMENT_REPLICATION_CLUSTER_REPLICATION_TYPE_SETTING, FeatureFlags.REMOTE_STORE_SETTING, FeatureFlags.SEARCHABLE_SNAPSHOT_SETTING, FeatureFlags.EXTENSIONS_SETTING diff --git a/server/src/main/java/org/opensearch/common/util/FeatureFlags.java b/server/src/main/java/org/opensearch/common/util/FeatureFlags.java index 72b7349180bad..3058166479c3f 100644 --- a/server/src/main/java/org/opensearch/common/util/FeatureFlags.java +++ b/server/src/main/java/org/opensearch/common/util/FeatureFlags.java @@ -27,6 +27,13 @@ public class FeatureFlags { */ public static final String REPLICATION_TYPE = "opensearch.experimental.feature.replication_type.enabled"; + /** + * Gates the visibility of the segment replication cluster setting that allows changing of replication type. + * Once the feature is ready for production release, this feature flag can be removed. + */ + public static final String SEGMENT_REPLICATION_CLUSTER_SETTING = + "opensearch.experimental.feature.segment_replication.cluster_setting.enabled"; + /** * Gates the visibility of the index setting that allows persisting data to remote store along with local disk. * Once the feature is ready for production release, this feature flag can be removed. @@ -84,6 +91,12 @@ public static boolean isEnabled(String featureFlagName) { public static final Setting REPLICATION_TYPE_SETTING = Setting.boolSetting(REPLICATION_TYPE, false, Property.NodeScope); + public static final Setting SEGMENT_REPLICATION_CLUSTER_REPLICATION_TYPE_SETTING = Setting.boolSetting( + SEGMENT_REPLICATION_CLUSTER_SETTING, + false, + Property.NodeScope + ); + public static final Setting REMOTE_STORE_SETTING = Setting.boolSetting(REMOTE_STORE, false, Property.NodeScope); public static final Setting SEARCHABLE_SNAPSHOT_SETTING = Setting.boolSetting(SEARCHABLE_SNAPSHOT, false, Property.NodeScope); diff --git a/server/src/main/java/org/opensearch/index/IndexSettings.java b/server/src/main/java/org/opensearch/index/IndexSettings.java index 4b7cdeee5e2d8..bb3f9a8f7ab64 100644 --- a/server/src/main/java/org/opensearch/index/IndexSettings.java +++ b/server/src/main/java/org/opensearch/index/IndexSettings.java @@ -751,7 +751,7 @@ public IndexSettings(final IndexMetadata indexMetadata, final Settings nodeSetti nodeName = Node.NODE_NAME_SETTING.get(settings); this.indexMetadata = indexMetadata; numberOfShards = settings.getAsInt(IndexMetadata.SETTING_NUMBER_OF_SHARDS, null); - if (FeatureFlags.isEnabled(FeatureFlags.REPLICATION_TYPE) + if (FeatureFlags.isEnabled(FeatureFlags.SEGMENT_REPLICATION_CLUSTER_SETTING) && indexMetadata.isSystem() == false && settings.get(IndexMetadata.SETTING_REPLICATION_TYPE) == null) { replicationType = IndicesService.CLUSTER_REPLICATION_TYPE_SETTING.get(settings); From 50a2d638695d122c7f0c707a94fea9bd4cd2c0f3 Mon Sep 17 00:00:00 2001 From: Rishikesh1159 Date: Wed, 5 Apr 2023 14:54:48 +0000 Subject: [PATCH 2/5] Remove entry from changelog as the cluster setting introduced is noy ready for users to use. Signed-off-by: Rishikesh1159 --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 714b569456e93..31a72755942e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -85,7 +85,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Add wait_for_completion parameter to resize, open, and forcemerge APIs ([#6434](https://github.com/opensearch-project/OpenSearch/pull/6434)) - [Segment Replication] Apply backpressure when replicas fall behind ([#6563](https://github.com/opensearch-project/OpenSearch/pull/6563)) - [Remote Store] Integrate remote segment store in peer recovery flow ([#6664](https://github.com/opensearch-project/OpenSearch/pull/6664)) -- [Segment Replication] Add new cluster setting to set replication strategy by default for all indices in cluster. ([#6791](https://github.com/opensearch-project/OpenSearch/pull/6791)) - Enable sort optimization for all NumericTypes ([#6464](https://github.com/opensearch-project/OpenSearch/pull/6464) - Remove 'cluster_manager' role attachment when using 'node.master' deprecated setting ([#6331](https://github.com/opensearch-project/OpenSearch/pull/6331)) - Add new cluster settings to ignore weighted round-robin routing and fallback to default behaviour. ([#6834](https://github.com/opensearch-project/OpenSearch/pull/6834)) From cc892e4c677867ee216d9ee75d5b5927c330e8ca Mon Sep 17 00:00:00 2001 From: Rishikesh1159 Date: Wed, 5 Apr 2023 15:34:08 +0000 Subject: [PATCH 3/5] Fix failing unit tests. Signed-off-by: Rishikesh1159 --- .../java/org/opensearch/index/IndexSettingsTests.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/server/src/test/java/org/opensearch/index/IndexSettingsTests.java b/server/src/test/java/org/opensearch/index/IndexSettingsTests.java index 841231e82f8a2..5c9f76da52b31 100644 --- a/server/src/test/java/org/opensearch/index/IndexSettingsTests.java +++ b/server/src/test/java/org/opensearch/index/IndexSettingsTests.java @@ -869,10 +869,7 @@ public void testEnablingRemoteStoreFailsWhenReplicationTypeIsDocument() { IllegalArgumentException.class, () -> IndexMetadata.INDEX_REMOTE_STORE_ENABLED_SETTING.get(indexSettings) ); - assertEquals( - "To enable index.remote_store.enabled, index.replication.type should be set to SEGMENT or cluster.indices.replication.strategy should be set to true", - iae.getMessage() - ); + assertEquals("To enable index.remote_store.enabled, index.replication.type should be set to SEGMENT", iae.getMessage()); } public void testEnablingRemoteStoreFailsWhenReplicationTypeIsDefault() { @@ -881,10 +878,7 @@ public void testEnablingRemoteStoreFailsWhenReplicationTypeIsDefault() { IllegalArgumentException.class, () -> IndexMetadata.INDEX_REMOTE_STORE_ENABLED_SETTING.get(indexSettings) ); - assertEquals( - "To enable index.remote_store.enabled, index.replication.type should be set to SEGMENT or cluster.indices.replication.strategy should be set to true", - iae.getMessage() - ); + assertEquals("To enable index.remote_store.enabled, index.replication.type should be set to SEGMENT", iae.getMessage()); } public void testRemoteRepositoryDefaultSetting() { From f816fa2135351f6e9f4479db8b8f8132de9d23e8 Mon Sep 17 00:00:00 2001 From: Rishikesh1159 Date: Wed, 5 Apr 2023 22:34:41 +0000 Subject: [PATCH 4/5] Address comments on PR. Signed-off-by: Rishikesh1159 --- .../org/opensearch/common/settings/FeatureFlagSettings.java | 2 +- .../main/java/org/opensearch/common/util/FeatureFlags.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java b/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java index bf1e91e90249b..c6920dfb2a461 100644 --- a/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java +++ b/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java @@ -35,7 +35,7 @@ protected FeatureFlagSettings( new HashSet<>( Arrays.asList( FeatureFlags.REPLICATION_TYPE_SETTING, - FeatureFlags.SEGMENT_REPLICATION_CLUSTER_REPLICATION_TYPE_SETTING, + FeatureFlags.REPLICATION_TYPE_SEGMENT_REPLICATION_CLUSTER_SETTING, FeatureFlags.REMOTE_STORE_SETTING, FeatureFlags.SEARCHABLE_SNAPSHOT_SETTING, FeatureFlags.EXTENSIONS_SETTING diff --git a/server/src/main/java/org/opensearch/common/util/FeatureFlags.java b/server/src/main/java/org/opensearch/common/util/FeatureFlags.java index 3058166479c3f..123b90b9ab13d 100644 --- a/server/src/main/java/org/opensearch/common/util/FeatureFlags.java +++ b/server/src/main/java/org/opensearch/common/util/FeatureFlags.java @@ -28,7 +28,7 @@ public class FeatureFlags { public static final String REPLICATION_TYPE = "opensearch.experimental.feature.replication_type.enabled"; /** - * Gates the visibility of the segment replication cluster setting that allows changing of replication type. + * Gates the visibility of the segment replication cluster setting that allows changing of default replication type in a cluster. * Once the feature is ready for production release, this feature flag can be removed. */ public static final String SEGMENT_REPLICATION_CLUSTER_SETTING = @@ -91,7 +91,7 @@ public static boolean isEnabled(String featureFlagName) { public static final Setting REPLICATION_TYPE_SETTING = Setting.boolSetting(REPLICATION_TYPE, false, Property.NodeScope); - public static final Setting SEGMENT_REPLICATION_CLUSTER_REPLICATION_TYPE_SETTING = Setting.boolSetting( + public static final Setting REPLICATION_TYPE_SEGMENT_REPLICATION_CLUSTER_SETTING = Setting.boolSetting( SEGMENT_REPLICATION_CLUSTER_SETTING, false, Property.NodeScope From 20c2546c75ae41b35da53d4405f7f7ab2bbe66d9 Mon Sep 17 00:00:00 2001 From: Rishikesh1159 Date: Thu, 6 Apr 2023 22:40:08 +0000 Subject: [PATCH 5/5] Address comments on PR and chnage feature flag to SEGMENT_REPLICATION_EXPERIMENTAL. Signed-off-by: Rishikesh1159 --- .../SegmentReplicationClusterSettingIT.java | 2 +- .../opensearch/common/settings/ClusterSettings.java | 2 +- .../common/settings/FeatureFlagSettings.java | 2 +- .../java/org/opensearch/common/util/FeatureFlags.java | 11 +++++------ .../main/java/org/opensearch/index/IndexSettings.java | 2 +- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/server/src/internalClusterTest/java/org/opensearch/indices/replication/SegmentReplicationClusterSettingIT.java b/server/src/internalClusterTest/java/org/opensearch/indices/replication/SegmentReplicationClusterSettingIT.java index 1bf451fd8d8fc..3db1ffd655209 100644 --- a/server/src/internalClusterTest/java/org/opensearch/indices/replication/SegmentReplicationClusterSettingIT.java +++ b/server/src/internalClusterTest/java/org/opensearch/indices/replication/SegmentReplicationClusterSettingIT.java @@ -49,7 +49,7 @@ public Settings indexSettings() { protected Settings featureFlagSettings() { return Settings.builder() .put(super.featureFlagSettings()) - .put(FeatureFlags.SEGMENT_REPLICATION_CLUSTER_SETTING, "true") + .put(FeatureFlags.SEGMENT_REPLICATION_EXPERIMENTAL, "true") .put(FeatureFlags.REPLICATION_TYPE, "true") .build(); } diff --git a/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java b/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java index 26c85ab9b0456..efcddd9fa6075 100644 --- a/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java +++ b/server/src/main/java/org/opensearch/common/settings/ClusterSettings.java @@ -646,7 +646,7 @@ public void apply(Settings value, Settings current, Settings previous) { public static final Map> FEATURE_FLAGGED_CLUSTER_SETTINGS = Map.of( FeatureFlags.SEARCHABLE_SNAPSHOT, List.of(Node.NODE_SEARCH_CACHE_SIZE_SETTING), - FeatureFlags.SEGMENT_REPLICATION_CLUSTER_SETTING, + FeatureFlags.SEGMENT_REPLICATION_EXPERIMENTAL, List.of(IndicesService.CLUSTER_REPLICATION_TYPE_SETTING) ); diff --git a/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java b/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java index c6920dfb2a461..3d8b4aaa82aa5 100644 --- a/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java +++ b/server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java @@ -35,7 +35,7 @@ protected FeatureFlagSettings( new HashSet<>( Arrays.asList( FeatureFlags.REPLICATION_TYPE_SETTING, - FeatureFlags.REPLICATION_TYPE_SEGMENT_REPLICATION_CLUSTER_SETTING, + FeatureFlags.SEGMENT_REPLICATION_EXPERIMENTAL_SETTING, FeatureFlags.REMOTE_STORE_SETTING, FeatureFlags.SEARCHABLE_SNAPSHOT_SETTING, FeatureFlags.EXTENSIONS_SETTING diff --git a/server/src/main/java/org/opensearch/common/util/FeatureFlags.java b/server/src/main/java/org/opensearch/common/util/FeatureFlags.java index 123b90b9ab13d..9cd3685606ff6 100644 --- a/server/src/main/java/org/opensearch/common/util/FeatureFlags.java +++ b/server/src/main/java/org/opensearch/common/util/FeatureFlags.java @@ -28,11 +28,10 @@ public class FeatureFlags { public static final String REPLICATION_TYPE = "opensearch.experimental.feature.replication_type.enabled"; /** - * Gates the visibility of the segment replication cluster setting that allows changing of default replication type in a cluster. - * Once the feature is ready for production release, this feature flag can be removed. + * Gates the visibility of the segment replication experimental features that allows users to test unreleased beta features. */ - public static final String SEGMENT_REPLICATION_CLUSTER_SETTING = - "opensearch.experimental.feature.segment_replication.cluster_setting.enabled"; + public static final String SEGMENT_REPLICATION_EXPERIMENTAL = + "opensearch.experimental.feature.segment_replication_experimental.enabled"; /** * Gates the visibility of the index setting that allows persisting data to remote store along with local disk. @@ -91,8 +90,8 @@ public static boolean isEnabled(String featureFlagName) { public static final Setting REPLICATION_TYPE_SETTING = Setting.boolSetting(REPLICATION_TYPE, false, Property.NodeScope); - public static final Setting REPLICATION_TYPE_SEGMENT_REPLICATION_CLUSTER_SETTING = Setting.boolSetting( - SEGMENT_REPLICATION_CLUSTER_SETTING, + public static final Setting SEGMENT_REPLICATION_EXPERIMENTAL_SETTING = Setting.boolSetting( + SEGMENT_REPLICATION_EXPERIMENTAL, false, Property.NodeScope ); diff --git a/server/src/main/java/org/opensearch/index/IndexSettings.java b/server/src/main/java/org/opensearch/index/IndexSettings.java index bb3f9a8f7ab64..c10de678054d0 100644 --- a/server/src/main/java/org/opensearch/index/IndexSettings.java +++ b/server/src/main/java/org/opensearch/index/IndexSettings.java @@ -751,7 +751,7 @@ public IndexSettings(final IndexMetadata indexMetadata, final Settings nodeSetti nodeName = Node.NODE_NAME_SETTING.get(settings); this.indexMetadata = indexMetadata; numberOfShards = settings.getAsInt(IndexMetadata.SETTING_NUMBER_OF_SHARDS, null); - if (FeatureFlags.isEnabled(FeatureFlags.SEGMENT_REPLICATION_CLUSTER_SETTING) + if (FeatureFlags.isEnabled(FeatureFlags.SEGMENT_REPLICATION_EXPERIMENTAL) && indexMetadata.isSystem() == false && settings.get(IndexMetadata.SETTING_REPLICATION_TYPE) == null) { replicationType = IndicesService.CLUSTER_REPLICATION_TYPE_SETTING.get(settings);