Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion docs/reference/migration/migrate_8_0/node.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,12 @@ each of these folders to an appropriate location and then configure the
corresponding node to use this location for its data path. If your nodes each
have more than one data path in their `path.data` settings then you should move
all the corresponding subfolders in parallel. Each node uses the same subfolder
(e.g. `nodes/2`) across all its data paths.
(e.g. `nodes/2`) across all its data paths.

[float]
==== Rejection of ancient closed indices

In earlier versions a node would start up even if it had data from indices
created in a version before the previous major version, as long as those
indices were closed. {es} now ensures that it is compatible with every index,
open or closed, at startup time.
Original file line number Diff line number Diff line change
Expand Up @@ -115,18 +115,15 @@ boolean isUpgraded(IndexMetaData indexMetaData) {
}

/**
* Elasticsearch v6.0 no longer supports indices created pre v5.0. All indices
* that were created before Elasticsearch v5.0 should be re-indexed in Elasticsearch 5.x
* before they can be opened by this version of elasticsearch.
* Elasticsearch does not support indices created before the previous major version. They must be reindexed using an earlier version
* before they can be opened here.
*/
private void checkSupportedVersion(IndexMetaData indexMetaData, Version minimumIndexCompatibilityVersion) {
if (indexMetaData.getState() == IndexMetaData.State.OPEN && isSupportedVersion(indexMetaData,
minimumIndexCompatibilityVersion) == false) {
throw new IllegalStateException("The index [" + indexMetaData.getIndex() + "] was created with version ["
if (isSupportedVersion(indexMetaData, minimumIndexCompatibilityVersion) == false) {
throw new IllegalStateException("The index " + indexMetaData.getIndex() + " was created with version ["
+ indexMetaData.getCreationVersion() + "] but the minimum compatible version is ["

+ minimumIndexCompatibilityVersion + "]. It should be re-indexed in Elasticsearch " + minimumIndexCompatibilityVersion.major
+ ".x before upgrading to " + Version.CURRENT + ".");
+ minimumIndexCompatibilityVersion + "]. It should be re-indexed in Elasticsearch "
+ minimumIndexCompatibilityVersion.major + ".x before upgrading to " + Version.CURRENT + ".");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
package org.elasticsearch.cluster.metadata;

import org.elasticsearch.Version;
import org.elasticsearch.common.UUIDs;
import org.elasticsearch.common.settings.IndexScopedSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.indices.mapper.MapperRegistry;
Expand Down Expand Up @@ -106,9 +107,9 @@ public void testFailUpgrade() {
.build());
String message = expectThrows(IllegalStateException.class, () -> service.upgradeIndexMetaData(metaData,
Version.CURRENT.minimumIndexCompatibilityVersion())).getMessage();
assertEquals(message, "The index [[foo/BOOM]] was created with version [" + indexCreated + "] " +
assertThat(message, equalTo("The index [foo/" + metaData.getIndexUUID() + "] was created with version [" + indexCreated + "] " +
"but the minimum compatible version is [" + minCompat + "]." +
" It should be re-indexed in Elasticsearch " + minCompat.major + ".x before upgrading to " + Version.CURRENT.toString() + ".");
" It should be re-indexed in Elasticsearch " + minCompat.major + ".x before upgrading to " + Version.CURRENT.toString() + "."));

indexCreated = VersionUtils.randomVersionBetween(random(), minCompat, Version.CURRENT);
indexUpgraded = VersionUtils.randomVersionBetween(random(), indexCreated, Version.CURRENT);
Expand Down Expand Up @@ -159,16 +160,25 @@ private MetaDataIndexUpgradeService getMetaDataIndexUpgradeService() {
Collections.emptyList());
}

public static IndexMetaData newIndexMeta(String name, Settings indexSettings) {
Settings build = Settings.builder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
.put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 1)
.put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
.put(IndexMetaData.SETTING_CREATION_DATE, 1)
.put(IndexMetaData.SETTING_INDEX_UUID, "BOOM")
.put(IndexMetaData.SETTING_VERSION_UPGRADED, Version.CURRENT.minimumIndexCompatibilityVersion())
public IndexMetaData newIndexMeta(String name, Settings indexSettings) {
final Version createdVersion = VersionUtils.randomVersionBetween(random(),
Version.CURRENT.minimumIndexCompatibilityVersion(), VersionUtils.getPreviousVersion());
final Version upgradedVersion = VersionUtils.randomVersionBetween(random(), createdVersion, VersionUtils.getPreviousVersion());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously, upgradedVersion was before created version. It seems it is now always equal or after. But the code does work for before too I think so maybe this should be a random version between minimum compatibility version and current?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I pushed 4c0ee9a. It doesn't really make sense (or at least represents an unsupported situation) because the index metadata can't have been upgraded in a version prior to the version in which the index was created, at least not without doing a downgrade. But nothing in these tests cares about that, so it's no big deal.


final Settings settings = Settings.builder()
.put(IndexMetaData.SETTING_VERSION_CREATED, createdVersion)
.put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, between(0, 5))
.put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, between(1, 5))
.put(IndexMetaData.SETTING_CREATION_DATE, randomNonNegativeLong())
.put(IndexMetaData.SETTING_INDEX_UUID, UUIDs.randomBase64UUID(random()))
.put(IndexMetaData.SETTING_VERSION_UPGRADED, upgradedVersion)
.put(indexSettings)
.build();
return IndexMetaData.builder(name).settings(build).build();
final IndexMetaData.Builder indexMetaDataBuilder = IndexMetaData.builder(name).settings(settings);
if (randomBoolean()) {
indexMetaDataBuilder.state(IndexMetaData.State.CLOSE);
}
return indexMetaDataBuilder.build();
}

}