diff --git a/docs/changelog/137652.yaml b/docs/changelog/137652.yaml new file mode 100644 index 0000000000000..e683452163cac --- /dev/null +++ b/docs/changelog/137652.yaml @@ -0,0 +1,6 @@ +pr: 137652 +summary: Fix default value for some settings when filtered +area: Infra/Settings +type: bug +issues: + - 136333 diff --git a/server/src/internalClusterTest/java/org/elasticsearch/action/admin/indices/settings/get/GetSettingsIT.java b/server/src/internalClusterTest/java/org/elasticsearch/action/admin/indices/settings/get/GetSettingsIT.java new file mode 100644 index 0000000000000..91fd7a3ff5a67 --- /dev/null +++ b/server/src/internalClusterTest/java/org/elasticsearch/action/admin/indices/settings/get/GetSettingsIT.java @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +package org.elasticsearch.action.admin.indices.settings.get; + +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.test.ESIntegTestCase; +import org.elasticsearch.test.LambdaMatchers; + +import java.util.Map; + +import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; +import static org.hamcrest.Matchers.equalTo; + +@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.SUITE) +public class GetSettingsIT extends ESIntegTestCase { + public void testGetDefaultValueWhenDependentOnOtherSettings() { + final String indexName = "test-index-1"; + + Settings expectedSettings = Settings.builder() + .put("index.mapping.source.mode", "SYNTHETIC") + .put("index.mapping.total_fields.ignore_dynamic_beyond_limit", true) + .put("index.recovery.use_synthetic_source", true) + .put("index.mapping.ignore_above", 8191) + .build(); + + assertAcked(prepareCreate(indexName).setSettings(Settings.builder().put("index.mode", "logsdb")).get()); + GetSettingsResponse unfilteredResponse = indicesAdmin().getSettings( + new GetSettingsRequest(TEST_REQUEST_TIMEOUT).indices(indexName).includeDefaults(true) + ).actionGet(); + for (String key : expectedSettings.keySet()) { + assertThat(unfilteredResponse.getSetting(indexName, key), equalTo(expectedSettings.get(key))); + GetSettingsResponse filteredResponse = indicesAdmin().getSettings( + new GetSettingsRequest(TEST_REQUEST_TIMEOUT).indices(indexName).includeDefaults(true).names(key) + ).actionGet(); + + var expectedFilteredSettingsMap = Map.of(indexName, expectedSettings.filter(key::equals)); + assertThat( + filteredResponse, + LambdaMatchers.transformedMatch(GetSettingsResponse::getIndexToDefaultSettings, equalTo(expectedFilteredSettingsMap)) + ); + } + + } +} diff --git a/server/src/main/java/org/elasticsearch/action/admin/indices/settings/get/TransportGetSettingsAction.java b/server/src/main/java/org/elasticsearch/action/admin/indices/settings/get/TransportGetSettingsAction.java index 47c6f9b4fa6fb..80683978ab037 100644 --- a/server/src/main/java/org/elasticsearch/action/admin/indices/settings/get/TransportGetSettingsAction.java +++ b/server/src/main/java/org/elasticsearch/action/admin/indices/settings/get/TransportGetSettingsAction.java @@ -127,7 +127,7 @@ protected void localClusterStateOperation( indexToSettings.put(concreteIndex.getName(), indexSettings); if (indexToDefaultSettings != null) { - Settings defaultSettings = settingsFilter.filter(indexScopedSettings.diff(indexSettings, Settings.EMPTY)); + Settings defaultSettings = settingsFilter.filter(indexScopedSettings.diff(indexMetadata.getSettings(), Settings.EMPTY)); if (isFilteredRequest(request)) { defaultSettings = defaultSettings.filter(k -> Regex.simpleMatch(request.names(), k)); } diff --git a/x-pack/plugin/logsdb/src/yamlRestTest/resources/rest-api-spec/test/10_setting.yml b/x-pack/plugin/logsdb/src/yamlRestTest/resources/rest-api-spec/test/10_setting.yml index d597859c1e4d8..51db34ea27585 100644 --- a/x-pack/plugin/logsdb/src/yamlRestTest/resources/rest-api-spec/test/10_setting.yml +++ b/x-pack/plugin/logsdb/src/yamlRestTest/resources/rest-api-spec/test/10_setting.yml @@ -1,5 +1,4 @@ ---- -synthetic_source_keep defaults: +setup: - requires: test_runner_features: [ capabilities ] capabilities: @@ -8,6 +7,8 @@ synthetic_source_keep defaults: capabilities: [ logsdb_index_mode ] reason: "Support for 'logsdb' index mode capability required" +--- +synthetic_source_keep defaults: - do: indices.create: index: test1 @@ -37,3 +38,38 @@ synthetic_source_keep defaults: - is_true: test2 - is_false: test2.settings.index.mode - match: { test2.defaults.index.mapping.synthetic_source_keep: "none" } + +--- +total_fields.ignore_dynamic_beyond_limit defaults: + - do: + indices.put_index_template: + name: template-foo + body: + index_patterns: ["ds-foo*"] + data_stream: {} + priority: 700 + template: + settings: + index.mode: logsdb + + - do: + indices.create_data_stream: + name: ds-foo + + - do: + indices.get_data_stream: + name: ds-foo + - set: { data_streams.0.indices.0.index_name: backing_index } + + - do: + indices.get_settings: + index: ds-foo + include_defaults: true + - match: { .$backing_index.defaults.index.mapping.total_fields.ignore_dynamic_beyond_limit: "true" } + + - do: + indices.get_settings: + index: ds-foo + name: index.mapping.total_fields.ignore_dynamic_beyond_limit + include_defaults: true + - match: { .$backing_index.defaults.index.mapping.total_fields.ignore_dynamic_beyond_limit: "true" }