Skip to content

Refactor IndexAbstraction to not use IndexMetadata #79246

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 15, 2021
Merged
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -668,8 +668,9 @@ public void testSameAlias() throws Exception {
assertThat(stopWatch.stop().lastTaskTime().millis(), lessThan(timeout.millis()));

logger.info("--> verify that filter was updated");
IndexAbstraction ia = internalCluster().clusterService().state().metadata().getIndicesLookup().get("alias1");
AliasMetadata aliasMetadata = AliasMetadata.getFirstAliasMetadata(ia);
Metadata metadata = internalCluster().clusterService().state().metadata();
IndexAbstraction ia = metadata.getIndicesLookup().get("alias1");
AliasMetadata aliasMetadata = AliasMetadata.getFirstAliasMetadata(metadata, ia);
assertThat(aliasMetadata.getFilter().toString(), equalTo("{\"term\":{\"name\":{\"value\":\"bar\",\"boost\":1.0}}}"));

logger.info("--> deleting alias1");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.io.stream.Writeable;
import org.elasticsearch.common.util.concurrent.CountDown;
import org.elasticsearch.index.Index;
import org.elasticsearch.xcontent.ParseField;
import org.elasticsearch.xcontent.ToXContentObject;
import org.elasticsearch.xcontent.XContentBuilder;
Expand Down Expand Up @@ -506,7 +507,7 @@ static void resolveIndices(String[] names, IndicesOptions indicesOptions, Metada
includeDataStreams);
SortedMap<String, IndexAbstraction> lookup = metadata.getIndicesLookup();
for (String s : resolvedIndexAbstractions) {
enrichIndexAbstraction(s, lookup, indices, aliases, dataStreams);
enrichIndexAbstraction(metadata, s, lookup, indices, aliases, dataStreams);
}
indices.sort(Comparator.comparing(ResolvedIndexAbstraction::getName));
aliases.sort(Comparator.comparing(ResolvedIndexAbstraction::getName));
Expand All @@ -531,42 +532,41 @@ private static void mergeResults(Map<String, Response> remoteResponses, List<Res
}
}

private static void enrichIndexAbstraction(String indexAbstraction, SortedMap<String, IndexAbstraction> lookup,
private static void enrichIndexAbstraction(Metadata metadata, String indexAbstraction, SortedMap<String, IndexAbstraction> lookup,
List<ResolvedIndex> indices, List<ResolvedAlias> aliases,
List<ResolvedDataStream> dataStreams) {
IndexAbstraction ia = lookup.get(indexAbstraction);
if (ia != null) {
switch (ia.getType()) {
case CONCRETE_INDEX:
IndexAbstraction.Index index = (IndexAbstraction.Index) ia;

String[] aliasNames = index.getWriteIndex().getAliases().keySet().stream().sorted().toArray(String[]::new);
IndexMetadata writeIndex = metadata.index(ia.getWriteIndex());
String[] aliasNames = writeIndex.getAliases().keySet().stream().sorted().toArray(String[]::new);

List<String> attributes = new ArrayList<>();
attributes.add(index.getWriteIndex().getState() == IndexMetadata.State.OPEN ? "open" : "closed");
attributes.add(writeIndex.getState() == IndexMetadata.State.OPEN ? "open" : "closed");
if (ia.isHidden()) {
attributes.add("hidden");
}
final boolean isFrozen = Boolean.parseBoolean(ia.getWriteIndex().getSettings().get("index.frozen"));
final boolean isFrozen = Boolean.parseBoolean(writeIndex.getSettings().get("index.frozen"));
if (isFrozen) {
attributes.add("frozen");
}
attributes.sort(String::compareTo);

indices.add(new ResolvedIndex(
index.getName(),
ia.getName(),
aliasNames,
attributes.toArray(Strings.EMPTY_ARRAY),
index.getParentDataStream() == null ? null : index.getParentDataStream().getName()));
ia.getParentDataStream() == null ? null : ia.getParentDataStream().getName()));
break;
case ALIAS:
String[] indexNames = ia.getIndices().stream().map(i -> i.getIndex().getName()).toArray(String[]::new);
String[] indexNames = ia.getIndices().stream().map(Index::getName).toArray(String[]::new);
Arrays.sort(indexNames);
aliases.add(new ResolvedAlias(ia.getName(), indexNames));
break;
case DATA_STREAM:
IndexAbstraction.DataStream dataStream = (IndexAbstraction.DataStream) ia;
String[] backingIndices = dataStream.getIndices().stream().map(i -> i.getIndex().getName()).toArray(String[]::new);
String[] backingIndices = dataStream.getIndices().stream().map(Index::getName).toArray(String[]::new);
dataStreams.add(new ResolvedDataStream(
dataStream.getName(),
backingIndices,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.Index;
import org.elasticsearch.indices.SystemDataStreamDescriptor;
import org.elasticsearch.indices.SystemIndices;
import org.elasticsearch.snapshots.SnapshotInProgressException;
Expand Down Expand Up @@ -128,7 +129,7 @@ public NameResolution resolveRolloverNames(ClusterState currentState, String rol
final IndexAbstraction indexAbstraction = currentState.metadata().getIndicesLookup().get(rolloverTarget);
switch (indexAbstraction.getType()) {
case ALIAS:
return resolveAliasRolloverNames((IndexAbstraction.Alias) indexAbstraction, newIndexName);
return resolveAliasRolloverNames(currentState.metadata(), indexAbstraction, newIndexName);
case DATA_STREAM:
return resolveDataStreamRolloverNames(currentState, (IndexAbstraction.DataStream) indexAbstraction);
default:
Expand All @@ -150,8 +151,8 @@ public static class NameResolution {
}
}

private NameResolution resolveAliasRolloverNames(IndexAbstraction.Alias alias, String newIndexName) {
final IndexMetadata writeIndex = alias.getWriteIndex();
private NameResolution resolveAliasRolloverNames(Metadata metadata, IndexAbstraction alias, String newIndexName) {
final IndexMetadata writeIndex = metadata.index(alias.getWriteIndex());
final String sourceProvidedName = writeIndex.getSettings().get(IndexMetadata.SETTING_INDEX_PROVIDED_NAME,
writeIndex.getIndex().getName());
final String sourceIndexName = writeIndex.getIndex().getName();
Expand All @@ -165,20 +166,20 @@ private NameResolution resolveAliasRolloverNames(IndexAbstraction.Alias alias, S
private NameResolution resolveDataStreamRolloverNames(ClusterState currentState, IndexAbstraction.DataStream dataStream) {
final Version minNodeVersion = currentState.nodes().getMinNodeVersion();
final DataStream ds = dataStream.getDataStream();
final IndexMetadata originalWriteIndex = dataStream.getWriteIndex();
final IndexMetadata originalWriteIndex = currentState.metadata().index(dataStream.getWriteIndex());
final DataStream rolledDataStream = ds.rollover(currentState.getMetadata(), "uuid", minNodeVersion);
return new NameResolution(originalWriteIndex.getIndex().getName(), null, rolledDataStream.getWriteIndex().getName());
}

private RolloverResult rolloverAlias(ClusterState currentState, IndexAbstraction.Alias alias, String aliasName,
String newIndexName, CreateIndexRequest createIndexRequest, List<Condition<?>> metConditions,
boolean silent, boolean onlyValidate) throws Exception {
final NameResolution names = resolveAliasRolloverNames(alias, newIndexName);
final NameResolution names = resolveAliasRolloverNames(currentState.metadata(), alias, newIndexName);
final String sourceIndexName = names.sourceName;
final String rolloverIndexName = names.rolloverName;
final String unresolvedName = names.unresolvedName;
final Metadata metadata = currentState.metadata();
final IndexMetadata writeIndex = alias.getWriteIndex();
final IndexMetadata writeIndex = currentState.metadata().index(alias.getWriteIndex());
final AliasMetadata aliasMetadata = writeIndex.getAliases().get(alias.getName());
final boolean explicitWriteIndex = Boolean.TRUE.equals(aliasMetadata.writeIndex());
final Boolean isHidden = IndexMetadata.INDEX_HIDDEN_SETTING.exists(createIndexRequest.settings()) ?
Expand Down Expand Up @@ -232,11 +233,11 @@ private RolloverResult rolloverDataStream(ClusterState currentState, IndexAbstra

final Version minNodeVersion = currentState.nodes().getMinNodeVersion();
final DataStream ds = dataStream.getDataStream();
final IndexMetadata originalWriteIndex = dataStream.getWriteIndex();
final Index originalWriteIndex = dataStream.getWriteIndex();
DataStream rolledDataStream = ds.rollover(currentState.metadata(), "uuid", minNodeVersion);
createIndexService.validateIndexName(rolledDataStream.getWriteIndex().getName(), currentState); // fails if the index already exists
if (onlyValidate) {
return new RolloverResult(rolledDataStream.getWriteIndex().getName(), originalWriteIndex.getIndex().getName(), currentState);
return new RolloverResult(rolledDataStream.getWriteIndex().getName(), originalWriteIndex.getName(), currentState);
}

CreateIndexClusterStateUpdateRequest createIndexClusterStateRequest = prepareDataStreamCreateIndexRequest(
Expand All @@ -251,11 +252,11 @@ private RolloverResult rolloverDataStream(ClusterState currentState, IndexAbstra
RolloverInfo rolloverInfo = new RolloverInfo(dataStreamName, metConditions, threadPool.absoluteTimeInMillis());
newState = ClusterState.builder(newState)
.metadata(Metadata.builder(newState.metadata())
.put(IndexMetadata.builder(newState.metadata().index(originalWriteIndex.getIndex()))
.put(IndexMetadata.builder(newState.metadata().index(originalWriteIndex))
.putRolloverInfo(rolloverInfo)))
.build();

return new RolloverResult(rolledDataStream.getWriteIndex().getName(), originalWriteIndex.getIndex().getName(), newState);
return new RolloverResult(rolledDataStream.getWriteIndex().getName(), originalWriteIndex.getName(), newState);
}

static String generateRolloverIndexName(String sourceIndexName, IndexNameExpressionResolver indexNameExpressionResolver) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -241,12 +241,13 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
return builder;
}

public static AliasMetadata getFirstAliasMetadata(IndexAbstraction ia) {
public static AliasMetadata getFirstAliasMetadata(Metadata metadata, IndexAbstraction ia) {
if (ia.getType() != IndexAbstraction.Type.ALIAS) {
throw new IllegalArgumentException("unexpected type: [" + ia.getType() + "]");
}

return ia.getIndices().get(0).getAliases().get(ia.getName());
IndexMetadata firstIndex = metadata.index(ia.getIndices().get(0));
return firstIndex.getAliases().get(ia.getName());
}

public static class Builder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ public DataStream addBackingIndex(Metadata clusterMetadata, Index index) {
}

// ensure that no aliases reference index
IndexMetadata im = clusterMetadata.getIndicesLookup().get(index.getName()).getWriteIndex();
IndexMetadata im = clusterMetadata.index(clusterMetadata.getIndicesLookup().get(index.getName()).getWriteIndex());
if (im.getAliases().size() > 0) {
throw new IllegalArgumentException(
String.format(Locale.ROOT,
Expand Down
Loading