diff options
author | Alexander Reelsen <alexander@reelsen.net> | 2017-06-21 09:30:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-21 09:30:46 +0200 |
commit | 68423989da17ddc127e412ed8d0712855d7bbdb7 (patch) | |
tree | 4e725048e48f7878d6adb9c832d99fd9dbf5a4af /core/src | |
parent | 86a544de3b250a22af51b18eba08465cbca42c8d (diff) |
IndexMetaData: Add internal format index setting (#25292)
This setting is supposed to ease index upgrades as it allows you
to check for a new setting called `index.internal.version` which
can be used to check before upgrading indices.
Diffstat (limited to 'core/src')
3 files changed, 44 insertions, 1 deletions
diff --git a/core/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java b/core/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java index 591b83c0ef..47fc2526c4 100644 --- a/core/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java +++ b/core/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java @@ -23,7 +23,6 @@ import com.carrotsearch.hppc.LongArrayList; import com.carrotsearch.hppc.cursors.IntObjectCursor; import com.carrotsearch.hppc.cursors.ObjectCursor; import com.carrotsearch.hppc.cursors.ObjectObjectCursor; - import org.elasticsearch.Version; import org.elasticsearch.action.support.ActiveShardCount; import org.elasticsearch.cluster.Diff; @@ -259,6 +258,13 @@ public class IndexMetaData implements Diffable<IndexMetaData>, ToXContent { Setting.Property.Dynamic, Setting.Property.IndexScope); + /** + * an internal index format description, allowing us to find out if this index is upgraded or needs upgrading + */ + private static final String INDEX_FORMAT = "index.format"; + public static final Setting<Integer> INDEX_FORMAT_SETTING = + Setting.intSetting(INDEX_FORMAT, 0, Setting.Property.IndexScope, Setting.Property.Final); + public static final String KEY_IN_SYNC_ALLOCATIONS = "in_sync_allocations"; static final String KEY_VERSION = "version"; static final String KEY_ROUTING_NUM_SHARDS = "routing_num_shards"; @@ -1051,6 +1057,7 @@ public class IndexMetaData implements Diffable<IndexMetaData>, ToXContent { } final String uuid = settings.get(SETTING_INDEX_UUID, INDEX_UUID_NA_VALUE); + return new IndexMetaData(new Index(index, uuid), version, primaryTerms, state, numberOfShards, numberOfReplicas, tmpSettings, mappings.build(), tmpAliases.build(), customs.build(), filledInSyncAllocationIds.build(), requireFilters, initialRecoveryFilters, includeFilters, excludeFilters, indexCreatedVersion, indexUpgradedVersion, getRoutingNumShards(), routingPartitionSize, waitForActiveShards); diff --git a/core/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java b/core/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java index ae4cf6cd41..890a43107c 100644 --- a/core/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java +++ b/core/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java @@ -77,6 +77,7 @@ public final class IndexScopedSettings extends AbstractScopedSettings { IndexMetaData.INDEX_BLOCKS_READ_ONLY_ALLOW_DELETE_SETTING, IndexMetaData.INDEX_PRIORITY_SETTING, IndexMetaData.INDEX_DATA_PATH_SETTING, + IndexMetaData.INDEX_FORMAT_SETTING, SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_DEBUG_SETTING, SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_WARN_SETTING, SearchSlowLog.INDEX_SEARCH_SLOWLOG_THRESHOLD_FETCH_INFO_SETTING, diff --git a/core/src/test/java/org/elasticsearch/cluster/metadata/IndexMetaDataTests.java b/core/src/test/java/org/elasticsearch/cluster/metadata/IndexMetaDataTests.java index 7b11f96ac4..fa56c756fc 100644 --- a/core/src/test/java/org/elasticsearch/cluster/metadata/IndexMetaDataTests.java +++ b/core/src/test/java/org/elasticsearch/cluster/metadata/IndexMetaDataTests.java @@ -32,6 +32,9 @@ import org.elasticsearch.test.ESTestCase; import java.io.IOException; import java.util.Set; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; + public class IndexMetaDataTests extends ESTestCase { public void testIndexMetaDataSerialization() throws IOException { @@ -121,4 +124,36 @@ public class IndexMetaDataTests extends ESTestCase { assertEquals("the number of target shards (8) must be greater than the shard id: 8", expectThrows(IllegalArgumentException.class, () -> IndexMetaData.selectShrinkShards(8, metaData, 8)).getMessage()); } + + public void testIndexFormat() { + Settings defaultSettings = Settings.builder() + .put("index.version.created", 1) + .put("index.number_of_shards", 1) + .put("index.number_of_replicas", 1) + .build(); + + // matching version + { + IndexMetaData metaData = IndexMetaData.builder("foo") + .settings(Settings.builder() + .put(defaultSettings) + // intentionally not using the constant, so upgrading requires you to look at this test + // where you have to update this part and the next one + .put("index.format", 6) + .build()) + .build(); + + assertThat(metaData.getSettings().getAsInt(IndexMetaData.INDEX_FORMAT_SETTING.getKey(), 0), is(6)); + } + + // no setting configured + { + IndexMetaData metaData = IndexMetaData.builder("foo") + .settings(Settings.builder() + .put(defaultSettings) + .build()) + .build(); + assertThat(metaData.getSettings().getAsInt(IndexMetaData.INDEX_FORMAT_SETTING.getKey(), 0), is(0)); + } + } } |