From 9be87adb9524d6547f354e9a342aa1abf945ef89 Mon Sep 17 00:00:00 2001 From: Jason Tedor Date: Wed, 17 Oct 2018 18:00:17 -0400 Subject: [PATCH] Increment settings version when upgrading index (#34566) When we upgrade an index, we set the settings version upgraded setting. This should be considered a settings change, and therefore we need to increment the settings version. This commit addresses that. --- .../MetaDataUpdateSettingsService.java | 16 +++--- .../metadata/UpgradeIndexSettingsIT.java | 50 +++++++++++++++++++ 2 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 server/src/test/java/org/elasticsearch/cluster/metadata/UpgradeIndexSettingsIT.java 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 0015e103c55..75fcdced678 100644 --- a/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java +++ b/server/src/main/java/org/elasticsearch/cluster/metadata/MetaDataUpdateSettingsService.java @@ -259,12 +259,16 @@ public class MetaDataUpdateSettingsService extends AbstractComponent { IndexMetaData indexMetaData = metaDataBuilder.get(index); if (indexMetaData != null) { if (Version.CURRENT.equals(indexMetaData.getCreationVersion()) == false) { - // No reason to pollute the settings, we didn't really upgrade anything - metaDataBuilder.put(IndexMetaData.builder(indexMetaData) - .settings(Settings.builder().put(indexMetaData.getSettings()) - .put(IndexMetaData.SETTING_VERSION_UPGRADED, entry.getValue().v1()) - ) - ); + // no reason to pollute the settings, we didn't really upgrade anything + metaDataBuilder.put( + IndexMetaData + .builder(indexMetaData) + .settings( + Settings + .builder() + .put(indexMetaData.getSettings()) + .put(IndexMetaData.SETTING_VERSION_UPGRADED, entry.getValue().v1())) + .settingsVersion(1 + indexMetaData.getSettingsVersion())); } } } diff --git a/server/src/test/java/org/elasticsearch/cluster/metadata/UpgradeIndexSettingsIT.java b/server/src/test/java/org/elasticsearch/cluster/metadata/UpgradeIndexSettingsIT.java new file mode 100644 index 00000000000..feb7777a1d6 --- /dev/null +++ b/server/src/test/java/org/elasticsearch/cluster/metadata/UpgradeIndexSettingsIT.java @@ -0,0 +1,50 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.cluster.metadata; + +import org.elasticsearch.Version; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.test.ESSingleNodeTestCase; + +import static org.hamcrest.Matchers.equalTo; + +public class UpgradeIndexSettingsIT extends ESSingleNodeTestCase { + + @Override + protected boolean forbidPrivateIndexSettings() { + return false; + } + + public void testSettingsVersion() { + createIndex( + "test", + Settings + .builder() + .put(IndexMetaData.SETTING_INDEX_VERSION_CREATED.getKey(), Version.CURRENT.minimumIndexCompatibilityVersion()) + .build()); + final long settingsVersion = + client().admin().cluster().prepareState().get().getState().metaData().index("test").getSettingsVersion(); + client().admin().indices().prepareUpgrade("test").get(); + assertThat( + client().admin().cluster().prepareState().get().getState().metaData().index("test").getSettingsVersion(), + equalTo(1 + settingsVersion)); + } + +}