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.
This commit is contained in:
parent
86a544de3b
commit
68423989da
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue