Skip to content

Commit

Permalink
Cleanups
Browse files Browse the repository at this point in the history
Signed-off-by: Nils Bandener <[email protected]>
  • Loading branch information
nibix committed Sep 2, 2024
1 parent f341458 commit fca7058
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,19 @@

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

import com.google.common.collect.ImmutableMap;

import org.opensearch.Version;
import org.opensearch.cluster.metadata.AliasMetadata;
import org.opensearch.cluster.metadata.DataStream;
import org.opensearch.cluster.metadata.IndexAbstraction;
import org.opensearch.cluster.metadata.IndexMetadata;
import org.opensearch.cluster.metadata.Metadata;
import org.opensearch.common.settings.Settings;
import org.opensearch.core.index.Index;

Expand All @@ -31,15 +34,12 @@
*/
public class MockIndexMetadataBuilder {

private static final Settings INDEX_SETTINGS = Settings.builder()
private final static Settings INDEX_SETTINGS = Settings.builder()
.put(IndexMetadata.SETTING_INDEX_VERSION_CREATED.getKey(), Version.CURRENT)
.put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, 1)
.put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 1)
.build();

private Metadata.Builder delegate = new Metadata.Builder();
private Map<String, IndexMetadata.Builder> nameToIndexMetadataBuilderMap = new HashMap<>();

private Map<String, IndexAbstraction> nameToIndexAbstractionMap = new HashMap<>();
private Map<String, IndexMetadata> nameToIndexMetadataMap = new HashMap<>();
private Map<String, Set<String>> indicesToAliases = new HashMap<>();
Expand All @@ -65,16 +65,55 @@ public static MockIndexMetadataBuilder dataStreams(String... dataStreams) {
return builder;
}

public Metadata build() {
for (IndexMetadata.Builder indexMetadataBuilder : nameToIndexMetadataBuilderMap.values()) {
this.delegate.put(indexMetadataBuilder);
public ImmutableMap<String, IndexAbstraction> build() {
Map<String, AliasMetadata> aliasMetadataMap = new HashMap<>();

for (Map.Entry<String, Set<String>> aliasEntry : this.aliasesToIndices.entrySet()) {
String alias = aliasEntry.getKey();
AliasMetadata aliasMetadata = AliasMetadata.builder(alias).build();
aliasMetadataMap.put(alias, aliasMetadata);
}

for (Map.Entry<String, Set<String>> indexEntry : this.indicesToAliases.entrySet()) {
String index = indexEntry.getKey();
Set<String> aliases = indexEntry.getValue();

IndexMetadata.Builder indexMetadataBuilder = IndexMetadata.builder(index).settings(INDEX_SETTINGS);

for (String alias : aliases) {
indexMetadataBuilder.putAlias(aliasMetadataMap.get(alias));
}

IndexMetadata indexMetadata = indexMetadataBuilder.build();
nameToIndexMetadataMap.put(index, indexMetadata);
nameToIndexAbstractionMap.put(index, new IndexAbstraction.Index(indexMetadata));
}

for (Map.Entry<String, Set<String>> aliasEntry : this.aliasesToIndices.entrySet()) {
String alias = aliasEntry.getKey();
Set<String> indices = aliasEntry.getValue();
AliasMetadata aliasMetadata = aliasMetadataMap.get(alias);

String firstIndex = indices.iterator().next();
indices.remove(firstIndex);

IndexMetadata firstIndexMetadata = nameToIndexMetadataMap.get(firstIndex);
IndexAbstraction.Alias indexAbstraction = new IndexAbstraction.Alias(aliasMetadata, firstIndexMetadata);

for (String index : indices) {
indexAbstraction.getIndices().add(nameToIndexMetadataMap.get(index));
}

nameToIndexAbstractionMap.put(alias, indexAbstraction);
}

return this.delegate.build();
return ImmutableMap.copyOf(this.nameToIndexAbstractionMap);
}

public MockIndexMetadataBuilder index(String indexName) {
getIndexMetadataBuilder(indexName);
public MockIndexMetadataBuilder index(String index) {
if (!this.indicesToAliases.containsKey(index)) {
this.indicesToAliases.put(index, new HashSet<>());
}
return this;
}

Expand All @@ -92,11 +131,21 @@ public MockIndexMetadataBuilder dataStream(String dataStream, int generations) {
for (int i = 1; i <= generations; i++) {
String backingIndexName = DataStream.getDefaultBackingIndexName(dataStream, i);
backingIndices.add(new Index(backingIndexName, backingIndexName));
getIndexMetadata(backingIndexName);
}

DataStream dataStreamMetadata = new DataStream(dataStream, new DataStream.TimestampField("@timestamp"), backingIndices);
this.delegate.put(dataStreamMetadata);
IndexAbstraction.DataStream dataStreamIndexAbstraction = new IndexAbstraction.DataStream(
dataStreamMetadata,
backingIndices.stream().map(i -> getIndexMetadata(i.getName())).collect(Collectors.toList())
);
this.nameToIndexAbstractionMap.put(dataStream, dataStreamIndexAbstraction);

for (Index backingIndex : backingIndices) {
this.nameToIndexAbstractionMap.put(
backingIndex.getName(),
new IndexAbstraction.Index(getIndexMetadata(backingIndex.getName()), dataStreamIndexAbstraction)
);
}

return this;
}
Expand All @@ -116,51 +165,26 @@ private IndexMetadata getIndexMetadata(String index) {
return result;
}

private IndexMetadata.Builder getIndexMetadataBuilder(String indexName) {
IndexMetadata.Builder result = this.nameToIndexMetadataBuilderMap.get(indexName);

if (result != null) {
return result;
}

result = new IndexMetadata.Builder(indexName).settings(INDEX_SETTINGS);

this.nameToIndexMetadataBuilderMap.put(indexName, result);

return result;
}

public class AliasBuilder {
private String aliasName;
private String alias;

private AliasBuilder(String alias) {
this.aliasName = alias;
this.alias = alias;
}

public MockIndexMetadataBuilder of(String... indices) {
AliasMetadata aliasMetadata = new AliasMetadata.Builder(aliasName).build();

for (String index : indices) {
IndexMetadata.Builder indexMetadataBuilder = getIndexMetadataBuilder(index);
indexMetadataBuilder.putAlias(aliasMetadata);
}

/*
MockIndexMetadataBuilder.this.delegate.put(aliasMetadata);
MockIndexMetadataBuilder.this.indicesToAliases.computeIfAbsent(firstIndex, (k) -> new HashSet<>()).add(this.aliasName);
public MockIndexMetadataBuilder of(String firstIndex, String... moreIndices) {
MockIndexMetadataBuilder.this.indicesToAliases.computeIfAbsent(firstIndex, (k) -> new HashSet<>()).add(this.alias);

Set<String> indices = new HashSet<>();
indices.add(firstIndex);

for (String index : moreIndices) {
MockIndexMetadataBuilder.this.indicesToAliases.computeIfAbsent(index, (k) -> new HashSet<>()).add(this.aliasName);
MockIndexMetadataBuilder.this.indicesToAliases.computeIfAbsent(index, (k) -> new HashSet<>()).add(this.alias);
indices.add(index);
}

MockIndexMetadataBuilder.this.aliasesToIndices.put(this.aliasName, indices);
*/
MockIndexMetadataBuilder.this.aliasesToIndices.put(this.alias, indices);

return MockIndexMetadataBuilder.this;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
/**
* Creates mocks of org.opensearch.cluster.metadata.IndexAbstraction maps. Useful for unit testing code which
* operates on index metadata.
*
* TODO: This is the evil twin of the same class in the integrationTest module. Possibly tests depending on this
* should be moved to the integrationTest module?
*/
public class MockIndexMetadataBuilder {

Expand Down

0 comments on commit fca7058

Please sign in to comment.