|
@@ -20,6 +20,7 @@ package org.elasticsearch.index;
|
|
|
|
|
|
import org.elasticsearch.Version;
|
|
|
import org.elasticsearch.cluster.metadata.IndexMetaData;
|
|
|
+import org.elasticsearch.cluster.metadata.MetaDataIndexUpgradeService;
|
|
|
import org.elasticsearch.common.regex.Regex;
|
|
|
import org.elasticsearch.common.settings.IndexScopedSettings;
|
|
|
import org.elasticsearch.common.settings.Setting;
|
|
@@ -28,10 +29,12 @@ import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.common.unit.ByteSizeValue;
|
|
|
import org.elasticsearch.common.unit.TimeValue;
|
|
|
import org.elasticsearch.index.translog.Translog;
|
|
|
+import org.elasticsearch.indices.mapper.MapperRegistry;
|
|
|
import org.elasticsearch.test.ESTestCase;
|
|
|
import org.elasticsearch.test.VersionUtils;
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.HashSet;
|
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -40,10 +43,10 @@ import java.util.function.Function;
|
|
|
|
|
|
public class IndexSettingsTests extends ESTestCase {
|
|
|
|
|
|
-
|
|
|
public void testRunListener() {
|
|
|
Version version = VersionUtils.getPreviousVersion();
|
|
|
- Settings theSettings = Settings.settingsBuilder().put(IndexMetaData.SETTING_VERSION_CREATED, version).put(IndexMetaData.SETTING_INDEX_UUID, "0xdeadbeef").build();
|
|
|
+ Settings theSettings = Settings.settingsBuilder().put(IndexMetaData.SETTING_VERSION_CREATED, version)
|
|
|
+ .put(IndexMetaData.SETTING_INDEX_UUID, "0xdeadbeef").build();
|
|
|
final AtomicInteger integer = new AtomicInteger(0);
|
|
|
Setting<Integer> integerSetting = Setting.intSetting("index.test.setting.int", -1,
|
|
|
Property.Dynamic, Property.IndexScope);
|
|
@@ -57,7 +60,8 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
assertFalse(settings.updateIndexMetaData(metaData));
|
|
|
assertEquals(metaData.getSettings().getAsMap(), settings.getSettings().getAsMap());
|
|
|
assertEquals(0, integer.get());
|
|
|
- assertTrue(settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(theSettings).put("index.test.setting.int", 42).build())));
|
|
|
+ assertTrue(settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(theSettings).put("index.test.setting.int", 42)
|
|
|
+ .build())));
|
|
|
assertEquals(42, integer.get());
|
|
|
}
|
|
|
|
|
@@ -77,13 +81,15 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
settings.getScopedSettings().addSettingsUpdateConsumer(notUpdated, builder::append);
|
|
|
assertEquals(0, integer.get());
|
|
|
assertEquals("", builder.toString());
|
|
|
- IndexMetaData newMetaData = newIndexMeta("index", Settings.builder().put(settings.getIndexMetaData().getSettings()).put("index.test.setting.int", 42).build());
|
|
|
+ IndexMetaData newMetaData = newIndexMeta("index", Settings.builder().put(settings.getIndexMetaData().getSettings())
|
|
|
+ .put("index.test.setting.int", 42).build());
|
|
|
assertTrue(settings.updateIndexMetaData(newMetaData));
|
|
|
assertSame(settings.getIndexMetaData(), newMetaData);
|
|
|
assertEquals(42, integer.get());
|
|
|
assertEquals("", builder.toString());
|
|
|
integer.set(0);
|
|
|
- assertTrue(settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(settings.getIndexMetaData().getSettings()).put("index.not.updated", "boom").build())));
|
|
|
+ assertTrue(settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(settings.getIndexMetaData().getSettings())
|
|
|
+ .put("index.not.updated", "boom").build())));
|
|
|
assertEquals("boom", builder.toString());
|
|
|
assertEquals("not updated - we preserve the old settings", 0, integer.get());
|
|
|
|
|
@@ -91,21 +97,25 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
|
|
|
public void testSettingsConsistency() {
|
|
|
Version version = VersionUtils.getPreviousVersion();
|
|
|
- IndexMetaData metaData = newIndexMeta("index", Settings.settingsBuilder().put(IndexMetaData.SETTING_VERSION_CREATED, version).build());
|
|
|
+ IndexMetaData metaData = newIndexMeta("index", Settings.settingsBuilder().put(IndexMetaData.SETTING_VERSION_CREATED, version)
|
|
|
+ .build());
|
|
|
IndexSettings settings = new IndexSettings(metaData, Settings.EMPTY);
|
|
|
assertEquals(version, settings.getIndexVersionCreated());
|
|
|
assertEquals("_na_", settings.getUUID());
|
|
|
try {
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT).put("index.test.setting.int", 42).build()));
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED,
|
|
|
+ Version.CURRENT).put("index.test.setting.int", 42).build()));
|
|
|
fail("version has changed");
|
|
|
} catch (IllegalArgumentException ex) {
|
|
|
assertTrue(ex.getMessage(), ex.getMessage().startsWith("version mismatch on settings update expected: "));
|
|
|
}
|
|
|
|
|
|
- metaData = newIndexMeta("index", Settings.settingsBuilder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT).put(IndexMetaData.SETTING_INDEX_UUID, "0xdeadbeef").build());
|
|
|
+ metaData = newIndexMeta("index", Settings.settingsBuilder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
|
|
|
+ .put(IndexMetaData.SETTING_INDEX_UUID, "0xdeadbeef").build());
|
|
|
settings = new IndexSettings(metaData, Settings.EMPTY);
|
|
|
try {
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT).put("index.test.setting.int", 42).build()));
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED,
|
|
|
+ Version.CURRENT).put("index.test.setting.int", 42).build()));
|
|
|
fail("uuid missing/change");
|
|
|
} catch (IllegalArgumentException ex) {
|
|
|
assertEquals("uuid mismatch on settings update expected: 0xdeadbeef but was: _na_", ex.getMessage());
|
|
@@ -118,7 +128,8 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
if (settings.length > 0) {
|
|
|
settingSet.addAll(Arrays.asList(settings));
|
|
|
}
|
|
|
- return new IndexSettings(metaData, nodeSettings, (idx) -> Regex.simpleMatch(idx, metaData.getIndex().getName()), new IndexScopedSettings(Settings.EMPTY, settingSet));
|
|
|
+ return new IndexSettings(metaData, nodeSettings, (idx) -> Regex.simpleMatch(idx, metaData.getIndex().getName()),
|
|
|
+ new IndexScopedSettings(Settings.EMPTY, settingSet));
|
|
|
}
|
|
|
|
|
|
|
|
@@ -172,7 +183,8 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
.build());
|
|
|
IndexSettings settings = new IndexSettings(metaData, Settings.EMPTY);
|
|
|
assertEquals(Translog.Durability.ASYNC, settings.getTranslogDurability());
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_TRANSLOG_DURABILITY_SETTING.getKey(), "request").build()));
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_TRANSLOG_DURABILITY_SETTING.getKey(),
|
|
|
+ "request").build()));
|
|
|
assertEquals(Translog.Durability.REQUEST, settings.getTranslogDurability());
|
|
|
|
|
|
metaData = newIndexMeta("index", Settings.settingsBuilder()
|
|
@@ -189,7 +201,8 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
.build());
|
|
|
IndexSettings settings = new IndexSettings(metaData, Settings.EMPTY);
|
|
|
assertFalse(settings.isWarmerEnabled());
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_WARMER_ENABLED_SETTING.getKey(), "true").build()));
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_WARMER_ENABLED_SETTING.getKey(),
|
|
|
+ "true").build()));
|
|
|
assertTrue(settings.isWarmerEnabled());
|
|
|
metaData = newIndexMeta("index", Settings.settingsBuilder()
|
|
|
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
|
|
@@ -205,10 +218,13 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
.put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), refreshInterval)
|
|
|
.build());
|
|
|
IndexSettings settings = new IndexSettings(metaData, Settings.EMPTY);
|
|
|
- assertEquals(TimeValue.parseTimeValue(refreshInterval, new TimeValue(1, TimeUnit.DAYS), IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey()), settings.getRefreshInterval());
|
|
|
+ assertEquals(TimeValue.parseTimeValue(refreshInterval, new TimeValue(1, TimeUnit.DAYS),
|
|
|
+ IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey()), settings.getRefreshInterval());
|
|
|
String newRefreshInterval = getRandomTimeString();
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(), newRefreshInterval).build()));
|
|
|
- assertEquals(TimeValue.parseTimeValue(newRefreshInterval, new TimeValue(1, TimeUnit.DAYS), IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey()), settings.getRefreshInterval());
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey(),
|
|
|
+ newRefreshInterval).build()));
|
|
|
+ assertEquals(TimeValue.parseTimeValue(newRefreshInterval, new TimeValue(1, TimeUnit.DAYS),
|
|
|
+ IndexSettings.INDEX_REFRESH_INTERVAL_SETTING.getKey()), settings.getRefreshInterval());
|
|
|
}
|
|
|
|
|
|
private String getRandomTimeString() {
|
|
@@ -227,7 +243,8 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
.build());
|
|
|
IndexSettings settings = new IndexSettings(metaData, Settings.EMPTY);
|
|
|
assertEquals(15, settings.getMaxResultWindow());
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.MAX_RESULT_WINDOW_SETTING.getKey(), 42).build()));
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.MAX_RESULT_WINDOW_SETTING.getKey(),
|
|
|
+ 42).build()));
|
|
|
assertEquals(42, settings.getMaxResultWindow());
|
|
|
settings.updateIndexMetaData(newIndexMeta("index", Settings.EMPTY));
|
|
|
assertEquals(IndexSettings.MAX_RESULT_WINDOW_SETTING.get(Settings.EMPTY).intValue(), settings.getMaxResultWindow());
|
|
@@ -246,11 +263,15 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
.put(IndexSettings.INDEX_GC_DELETES_SETTING.getKey(), gcDeleteSetting.getStringRep())
|
|
|
.build());
|
|
|
IndexSettings settings = new IndexSettings(metaData, Settings.EMPTY);
|
|
|
- assertEquals(TimeValue.parseTimeValue(gcDeleteSetting.getStringRep(), new TimeValue(1, TimeUnit.DAYS), IndexSettings.INDEX_GC_DELETES_SETTING.getKey()).getMillis(), settings.getGcDeletesInMillis());
|
|
|
+ assertEquals(TimeValue.parseTimeValue(gcDeleteSetting.getStringRep(), new TimeValue(1, TimeUnit.DAYS),
|
|
|
+ IndexSettings.INDEX_GC_DELETES_SETTING.getKey()).getMillis(), settings.getGcDeletesInMillis());
|
|
|
TimeValue newGCDeleteSetting = new TimeValue(Math.abs(randomInt()), TimeUnit.MILLISECONDS);
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_GC_DELETES_SETTING.getKey(), newGCDeleteSetting.getStringRep()).build()));
|
|
|
- assertEquals(TimeValue.parseTimeValue(newGCDeleteSetting.getStringRep(), new TimeValue(1, TimeUnit.DAYS), IndexSettings.INDEX_GC_DELETES_SETTING.getKey()).getMillis(), settings.getGcDeletesInMillis());
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_GC_DELETES_SETTING.getKey(), randomBoolean() ? -1 : new TimeValue(-1, TimeUnit.MILLISECONDS)).build()));
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_GC_DELETES_SETTING.getKey(),
|
|
|
+ newGCDeleteSetting.getStringRep()).build()));
|
|
|
+ assertEquals(TimeValue.parseTimeValue(newGCDeleteSetting.getStringRep(), new TimeValue(1, TimeUnit.DAYS),
|
|
|
+ IndexSettings.INDEX_GC_DELETES_SETTING.getKey()).getMillis(), settings.getGcDeletesInMillis());
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_GC_DELETES_SETTING.getKey(),
|
|
|
+ randomBoolean() ? -1 : new TimeValue(-1, TimeUnit.MILLISECONDS)).build()));
|
|
|
assertEquals(-1, settings.getGcDeletesInMillis());
|
|
|
}
|
|
|
|
|
@@ -261,7 +282,8 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
.build());
|
|
|
IndexSettings settings = new IndexSettings(metaData, Settings.EMPTY);
|
|
|
assertFalse(settings.isTTLPurgeDisabled());
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_TTL_DISABLE_PURGE_SETTING.getKey(), "true").build()));
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_TTL_DISABLE_PURGE_SETTING.getKey(),
|
|
|
+ "true").build()));
|
|
|
assertTrue(settings.isTTLPurgeDisabled());
|
|
|
|
|
|
settings.updateIndexMetaData(newIndexMeta("index", Settings.EMPTY));
|
|
@@ -276,7 +298,8 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
|
|
|
public void testTranslogFlushSizeThreshold() {
|
|
|
ByteSizeValue translogFlushThresholdSize = new ByteSizeValue(Math.abs(randomInt()));
|
|
|
- ByteSizeValue actualValue = ByteSizeValue.parseBytesSizeValue(translogFlushThresholdSize.toString(), IndexSettings.INDEX_TRANSLOG_FLUSH_THRESHOLD_SIZE_SETTING.getKey());
|
|
|
+ ByteSizeValue actualValue = ByteSizeValue.parseBytesSizeValue(translogFlushThresholdSize.toString(),
|
|
|
+ IndexSettings.INDEX_TRANSLOG_FLUSH_THRESHOLD_SIZE_SETTING.getKey());
|
|
|
IndexMetaData metaData = newIndexMeta("index", Settings.settingsBuilder()
|
|
|
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
|
|
|
.put(IndexSettings.INDEX_TRANSLOG_FLUSH_THRESHOLD_SIZE_SETTING.getKey(), translogFlushThresholdSize.toString())
|
|
@@ -284,8 +307,33 @@ public class IndexSettingsTests extends ESTestCase {
|
|
|
IndexSettings settings = new IndexSettings(metaData, Settings.EMPTY);
|
|
|
assertEquals(actualValue, settings.getFlushThresholdSize());
|
|
|
ByteSizeValue newTranslogFlushThresholdSize = new ByteSizeValue(Math.abs(randomInt()));
|
|
|
- ByteSizeValue actualNewTranslogFlushThresholdSize = ByteSizeValue.parseBytesSizeValue(newTranslogFlushThresholdSize.toString(), IndexSettings.INDEX_TRANSLOG_FLUSH_THRESHOLD_SIZE_SETTING.getKey());
|
|
|
- settings.updateIndexMetaData(newIndexMeta("index", Settings.builder().put(IndexSettings.INDEX_TRANSLOG_FLUSH_THRESHOLD_SIZE_SETTING.getKey(), newTranslogFlushThresholdSize.toString()).build()));
|
|
|
+ ByteSizeValue actualNewTranslogFlushThresholdSize = ByteSizeValue.parseBytesSizeValue(newTranslogFlushThresholdSize.toString(),
|
|
|
+ IndexSettings.INDEX_TRANSLOG_FLUSH_THRESHOLD_SIZE_SETTING.getKey());
|
|
|
+ settings.updateIndexMetaData(newIndexMeta("index", Settings.builder()
|
|
|
+ .put(IndexSettings.INDEX_TRANSLOG_FLUSH_THRESHOLD_SIZE_SETTING.getKey(), newTranslogFlushThresholdSize.toString()).build()));
|
|
|
assertEquals(actualNewTranslogFlushThresholdSize, settings.getFlushThresholdSize());
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ public void testArchiveBrokenIndexSettings() {
|
|
|
+ Settings settings = IndexScopedSettings.DEFAULT_SCOPED_SETTINGS.archiveUnknownOrBrokenSettings(Settings.EMPTY);
|
|
|
+ assertSame(settings, Settings.EMPTY);
|
|
|
+ settings = IndexScopedSettings.DEFAULT_SCOPED_SETTINGS.archiveUnknownOrBrokenSettings(Settings.builder()
|
|
|
+ .put("index.refresh_interval", "-200").build());
|
|
|
+ assertEquals("-200", settings.get("archived.index.refresh_interval"));
|
|
|
+ assertNull(settings.get("index.refresh_interval"));
|
|
|
+
|
|
|
+ Settings prevSettings = settings; // no double archive
|
|
|
+ settings = IndexScopedSettings.DEFAULT_SCOPED_SETTINGS.archiveUnknownOrBrokenSettings(prevSettings);
|
|
|
+ assertSame(prevSettings, settings);
|
|
|
+
|
|
|
+ settings = IndexScopedSettings.DEFAULT_SCOPED_SETTINGS.archiveUnknownOrBrokenSettings(Settings.builder()
|
|
|
+ .put("index.version.created", Version.CURRENT.id) // private setting
|
|
|
+ .put("index.unknown", "foo")
|
|
|
+ .put("index.refresh_interval", "2s").build());
|
|
|
+
|
|
|
+ assertEquals("foo", settings.get("archived.index.unknown"));
|
|
|
+ assertEquals(Integer.toString(Version.CURRENT.id), settings.get("index.version.created"));
|
|
|
+ assertEquals("2s", settings.get("index.refresh_interval"));
|
|
|
+ }
|
|
|
}
|