From 84be8265c37f645e242eed17e47191494c3ecd7a Mon Sep 17 00:00:00 2001 From: Andrew Ross Date: Fri, 25 Jul 2025 15:12:27 -0700 Subject: [PATCH] Ignore archived settings on update Prior to this change all settings updates would fail if archived settings were present, even when attempting to update unrelated settings. This change ignores archived settings when validating a settings update. Signed-off-by: Andrew Ross --- CHANGELOG.md | 1 + .../indices/settings/ArchivedIndexSettingsIT.java | 8 ++++++++ .../metadata/MetadataUpdateSettingsService.java | 10 ++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb136d0121d53..003ca15ccdffa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,6 +89,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Field-level ignore_malformed should override index-level setting ([#18706](https://github.com/opensearch-project/OpenSearch/pull/18706)) - Fixed Staggered merge - load average replace with AverageTrackers, some Default thresholds modified ([#18666](https://github.com/opensearch-project/OpenSearch/pull/18666)) - Use `new SecureRandom()` to avoid blocking ([18729](https://github.com/opensearch-project/OpenSearch/issues/18729)) +- Ignore archived settings on update ([#8714](https://github.com/opensearch-project/OpenSearch/issues/8714)) - Use ScoreDoc instead of FieldDoc when creating TopScoreDocCollectorManager to avoid unnecessary conversion ([#18802](https://github.com/opensearch-project/OpenSearch/pull/18802)) - Fix leafSorter optimization for ReadOnlyEngine and NRTReplicationEngine ([#18639](https://github.com/opensearch-project/OpenSearch/pull/18639)) diff --git a/server/src/internalClusterTest/java/org/opensearch/indices/settings/ArchivedIndexSettingsIT.java b/server/src/internalClusterTest/java/org/opensearch/indices/settings/ArchivedIndexSettingsIT.java index 8dc343abf8da2..79a75bfdabed5 100644 --- a/server/src/internalClusterTest/java/org/opensearch/indices/settings/ArchivedIndexSettingsIT.java +++ b/server/src/internalClusterTest/java/org/opensearch/indices/settings/ArchivedIndexSettingsIT.java @@ -88,6 +88,14 @@ public void testArchiveSettings() throws Exception { startsWith("Can't update non dynamic settings [[archived.index.dummy]] for open indices [[test") ); + // Verify that a random unrelated setting can be updated when archived settings are present. + client().admin() + .indices() + .prepareUpdateSettings("test") + .setSettings(Settings.builder().put("index.max_terms_count", 1024).build()) + .execute() + .actionGet(); + // close the index. client().admin().indices().prepareClose("test").get(); diff --git a/server/src/main/java/org/opensearch/cluster/metadata/MetadataUpdateSettingsService.java b/server/src/main/java/org/opensearch/cluster/metadata/MetadataUpdateSettingsService.java index 3e35ee90dad6c..9f594e9ad2ff8 100644 --- a/server/src/main/java/org/opensearch/cluster/metadata/MetadataUpdateSettingsService.java +++ b/server/src/main/java/org/opensearch/cluster/metadata/MetadataUpdateSettingsService.java @@ -357,7 +357,9 @@ public ClusterState execute(ClusterState currentState) { Settings finalSettings = indexSettings.build(); indexScopedSettings.validate( finalSettings.filter(k -> indexScopedSettings.isPrivateSetting(k) == false), - true + true, // validateDependencies + false, // ignorePrivateSettings + true // ignoreArchivedSettings ); metadataBuilder.put(IndexMetadata.builder(indexMetadata).settings(finalSettings)); } @@ -389,9 +391,9 @@ public ClusterState execute(ClusterState currentState) { Settings finalSettings = indexSettings.build(); indexScopedSettings.validate( finalSettings.filter(k -> indexScopedSettings.isPrivateSetting(k) == false), - true, - false, - true + true, // validateDependencies + false, // ignorePrivateSettings + true // ignoreArchivedSettings ); metadataBuilder.put(IndexMetadata.builder(indexMetadata).settings(finalSettings)); }