summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorAlexander Reelsen <alexander@reelsen.net>2017-06-21 09:30:46 +0200
committerGitHub <noreply@github.com>2017-06-21 09:30:46 +0200
commit68423989da17ddc127e412ed8d0712855d7bbdb7 (patch)
tree4e725048e48f7878d6adb9c832d99fd9dbf5a4af /core/src
parent86a544de3b250a22af51b18eba08465cbca42c8d (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')
-rw-r--r--core/src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java9
-rw-r--r--core/src/main/java/org/elasticsearch/common/settings/IndexScopedSettings.java1
-rw-r--r--core/src/test/java/org/elasticsearch/cluster/metadata/IndexMetaDataTests.java35
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));
+ }
+ }
}