Ensure elasticsearch doesn't start with unuspported indices (#20514)
If an index was created with pre 2.0 we should not treat it as supported even if all segments have been upgraded to a supported lucene version. Closes #20512
This commit is contained in:
parent
f5daa165f1
commit
3aabda6752
|
@ -100,16 +100,7 @@ public class MetaDataIndexUpgradeService extends AbstractComponent {
|
||||||
* Returns true if this index can be supported by the current version of elasticsearch
|
* Returns true if this index can be supported by the current version of elasticsearch
|
||||||
*/
|
*/
|
||||||
private static boolean isSupportedVersion(IndexMetaData indexMetaData) {
|
private static boolean isSupportedVersion(IndexMetaData indexMetaData) {
|
||||||
if (indexMetaData.getCreationVersion().onOrAfter(Version.V_2_0_0_beta1)) {
|
return indexMetaData.getCreationVersion().onOrAfter(Version.V_2_0_0_beta1);
|
||||||
// The index was created with elasticsearch that was using Lucene 5.2.1
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (indexMetaData.getMinimumCompatibleVersion() != null &&
|
|
||||||
indexMetaData.getMinimumCompatibleVersion().onOrAfter(org.apache.lucene.util.Version.LUCENE_5_0_0)) {
|
|
||||||
//The index was upgraded we can work with it
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -56,7 +56,8 @@ public class MetaDataIndexUpgradeServiceTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testUpgrade() {
|
public void testUpgrade() {
|
||||||
MetaDataIndexUpgradeService service = new MetaDataIndexUpgradeService(Settings.EMPTY, new MapperRegistry(Collections.emptyMap(), Collections.emptyMap()), IndexScopedSettings.DEFAULT_SCOPED_SETTINGS);
|
MetaDataIndexUpgradeService service = new MetaDataIndexUpgradeService(Settings.EMPTY, new MapperRegistry(Collections.emptyMap(),
|
||||||
|
Collections.emptyMap()), IndexScopedSettings.DEFAULT_SCOPED_SETTINGS);
|
||||||
IndexMetaData src = newIndexMeta("foo", Settings.builder().put("index.refresh_interval", "-200").build());
|
IndexMetaData src = newIndexMeta("foo", Settings.builder().put("index.refresh_interval", "-200").build());
|
||||||
assertFalse(service.isUpgraded(src));
|
assertFalse(service.isUpgraded(src));
|
||||||
src = service.upgradeIndexMetaData(src);
|
src = service.upgradeIndexMetaData(src);
|
||||||
|
@ -67,7 +68,8 @@ public class MetaDataIndexUpgradeServiceTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testIsUpgraded() {
|
public void testIsUpgraded() {
|
||||||
MetaDataIndexUpgradeService service = new MetaDataIndexUpgradeService(Settings.EMPTY, new MapperRegistry(Collections.emptyMap(), Collections.emptyMap()), IndexScopedSettings.DEFAULT_SCOPED_SETTINGS);
|
MetaDataIndexUpgradeService service = new MetaDataIndexUpgradeService(Settings.EMPTY, new MapperRegistry(Collections.emptyMap(),
|
||||||
|
Collections.emptyMap()), IndexScopedSettings.DEFAULT_SCOPED_SETTINGS);
|
||||||
IndexMetaData src = newIndexMeta("foo", Settings.builder().put("index.refresh_interval", "-200").build());
|
IndexMetaData src = newIndexMeta("foo", Settings.builder().put("index.refresh_interval", "-200").build());
|
||||||
assertFalse(service.isUpgraded(src));
|
assertFalse(service.isUpgraded(src));
|
||||||
Version version = VersionUtils.randomVersionBetween(random(), VersionUtils.getFirstVersion(), VersionUtils.getPreviousVersion());
|
Version version = VersionUtils.randomVersionBetween(random(), VersionUtils.getFirstVersion(), VersionUtils.getPreviousVersion());
|
||||||
|
@ -77,6 +79,26 @@ public class MetaDataIndexUpgradeServiceTests extends ESTestCase {
|
||||||
assertTrue(service.isUpgraded(src));
|
assertTrue(service.isUpgraded(src));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testFailUpgrade() {
|
||||||
|
MetaDataIndexUpgradeService service = new MetaDataIndexUpgradeService(Settings.EMPTY, new MapperRegistry(Collections.emptyMap(),
|
||||||
|
Collections.emptyMap()), IndexScopedSettings.DEFAULT_SCOPED_SETTINGS);
|
||||||
|
final IndexMetaData metaData = newIndexMeta("foo", Settings.builder()
|
||||||
|
.put(IndexMetaData.SETTING_VERSION_UPGRADED, Version.V_2_0_0_beta1)
|
||||||
|
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.fromString("1.7.0"))
|
||||||
|
.put(IndexMetaData.SETTING_VERSION_MINIMUM_COMPATIBLE,
|
||||||
|
Version.CURRENT.luceneVersion.toString()).build());
|
||||||
|
String message = expectThrows(IllegalStateException.class, () -> service.upgradeIndexMetaData(metaData)).getMessage();
|
||||||
|
assertEquals(message, "The index [[foo/BOOM]] was created before v2.0.0.beta1. It should be reindexed in Elasticsearch 2.x " +
|
||||||
|
"before upgrading to " + Version.CURRENT.toString() + ".");
|
||||||
|
|
||||||
|
IndexMetaData goodMeta = newIndexMeta("foo", Settings.builder()
|
||||||
|
.put(IndexMetaData.SETTING_VERSION_UPGRADED, Version.V_2_0_0_beta1)
|
||||||
|
.put(IndexMetaData.SETTING_VERSION_CREATED, Version.fromString("2.1.0"))
|
||||||
|
.put(IndexMetaData.SETTING_VERSION_MINIMUM_COMPATIBLE,
|
||||||
|
Version.CURRENT.luceneVersion.toString()).build());
|
||||||
|
service.upgradeIndexMetaData(goodMeta);
|
||||||
|
}
|
||||||
|
|
||||||
public static IndexMetaData newIndexMeta(String name, Settings indexSettings) {
|
public static IndexMetaData newIndexMeta(String name, Settings indexSettings) {
|
||||||
Settings build = Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
|
Settings build = Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
|
||||||
.put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 1)
|
.put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 1)
|
||||||
|
|
Loading…
Reference in New Issue