|
@@ -46,6 +46,7 @@ import java.util.Comparator;
|
|
|
import java.util.EnumSet;
|
|
|
import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
import java.util.function.Function;
|
|
|
|
|
|
import static org.elasticsearch.common.util.set.Sets.newHashSet;
|
|
@@ -60,7 +61,17 @@ import static org.hamcrest.Matchers.is;
|
|
|
import static org.hamcrest.Matchers.notNullValue;
|
|
|
|
|
|
public class IndexNameExpressionResolverTests extends ESTestCase {
|
|
|
- private final IndexNameExpressionResolver indexNameExpressionResolver = new IndexNameExpressionResolver();
|
|
|
+ private IndexNameExpressionResolver indexNameExpressionResolver;
|
|
|
+
|
|
|
+ protected IndexNameExpressionResolver getIndexNameExpressionResolver() {
|
|
|
+ return new IndexNameExpressionResolver();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setUp() throws Exception {
|
|
|
+ super.setUp();
|
|
|
+ indexNameExpressionResolver = getIndexNameExpressionResolver();
|
|
|
+ }
|
|
|
|
|
|
public void testIndexOptionsStrict() {
|
|
|
MetaData.Builder mdBuilder = MetaData.builder()
|
|
@@ -1020,20 +1031,39 @@ public class IndexNameExpressionResolverTests extends ESTestCase {
|
|
|
assertArrayEquals(new String[] {"test-0"}, strings);
|
|
|
}
|
|
|
|
|
|
+ public void testResolveExpressions() {
|
|
|
+ MetaData.Builder mdBuilder = MetaData.builder()
|
|
|
+ .put(indexBuilder("test-0").state(State.OPEN).putAlias(AliasMetaData.builder("alias-0").filter("{ \"term\": \"foo\"}")))
|
|
|
+ .put(indexBuilder("test-1").state(State.OPEN).putAlias(AliasMetaData.builder("alias-1")));
|
|
|
+ ClusterState state = ClusterState.builder(new ClusterName("_name")).metaData(mdBuilder).build();
|
|
|
+
|
|
|
+ assertEquals(new HashSet<>(Arrays.asList("alias-0", "alias-1")),
|
|
|
+ indexNameExpressionResolver.resolveExpressions(state, "alias-*"));
|
|
|
+ assertEquals(new HashSet<>(Arrays.asList("test-0", "alias-0", "alias-1")),
|
|
|
+ indexNameExpressionResolver.resolveExpressions(state, "test-0", "alias-*"));
|
|
|
+ assertEquals(new HashSet<>(Arrays.asList("test-0", "test-1", "alias-0", "alias-1")),
|
|
|
+ indexNameExpressionResolver.resolveExpressions(state, "test-*", "alias-*"));
|
|
|
+ assertEquals(new HashSet<>(Arrays.asList("test-1", "alias-1")),
|
|
|
+ indexNameExpressionResolver.resolveExpressions(state, "*-1"));
|
|
|
+ }
|
|
|
+
|
|
|
public void testFilteringAliases() {
|
|
|
MetaData.Builder mdBuilder = MetaData.builder()
|
|
|
.put(indexBuilder("test-0").state(State.OPEN).putAlias(AliasMetaData.builder("alias-0").filter("{ \"term\": \"foo\"}")))
|
|
|
.put(indexBuilder("test-1").state(State.OPEN).putAlias(AliasMetaData.builder("alias-1")));
|
|
|
ClusterState state = ClusterState.builder(new ClusterName("_name")).metaData(mdBuilder).build();
|
|
|
|
|
|
- String[] strings = indexNameExpressionResolver.filteringAliases(state, "test-0", "alias-*");
|
|
|
+ Set<String> resolvedExpressions = new HashSet<>(Arrays.asList("alias-0", "alias-1"));
|
|
|
+ String[] strings = indexNameExpressionResolver.filteringAliases(state, "test-0", resolvedExpressions);
|
|
|
assertArrayEquals(new String[] {"alias-0"}, strings);
|
|
|
|
|
|
// concrete index supersedes filtering alias
|
|
|
- strings = indexNameExpressionResolver.filteringAliases(state, "test-0", "test-0,alias-*");
|
|
|
+ resolvedExpressions = new HashSet<>(Arrays.asList("test-0", "alias-0", "alias-1"));
|
|
|
+ strings = indexNameExpressionResolver.filteringAliases(state, "test-0", resolvedExpressions);
|
|
|
assertNull(strings);
|
|
|
|
|
|
- strings = indexNameExpressionResolver.filteringAliases(state, "test-0", "test-*,alias-*");
|
|
|
+ resolvedExpressions = new HashSet<>(Arrays.asList("test-0", "test-1", "alias-0", "alias-1"));
|
|
|
+ strings = indexNameExpressionResolver.filteringAliases(state, "test-0", resolvedExpressions);
|
|
|
assertNull(strings);
|
|
|
}
|
|
|
|
|
@@ -1045,9 +1075,36 @@ public class IndexNameExpressionResolverTests extends ESTestCase {
|
|
|
.putAlias(AliasMetaData.builder("test-alias-non-filtering"))
|
|
|
);
|
|
|
ClusterState state = ClusterState.builder(new ClusterName("_name")).metaData(mdBuilder).build();
|
|
|
- String[] strings = indexNameExpressionResolver.indexAliases(state, "test-0", x -> true, true, "test-*");
|
|
|
+ Set<String> resolvedExpressions = indexNameExpressionResolver.resolveExpressions(state, "test-*");
|
|
|
+
|
|
|
+ String[] strings = indexNameExpressionResolver.indexAliases(state, "test-0", x -> true, true, resolvedExpressions);
|
|
|
Arrays.sort(strings);
|
|
|
assertArrayEquals(new String[] {"test-alias-0", "test-alias-1", "test-alias-non-filtering"}, strings);
|
|
|
+
|
|
|
+ strings = indexNameExpressionResolver.indexAliases(state, "test-0", x -> x.alias().equals("test-alias-1"), true,
|
|
|
+ resolvedExpressions);
|
|
|
+ assertArrayEquals(null, strings);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testIndexAliasesSkipIdentity() {
|
|
|
+ MetaData.Builder mdBuilder = MetaData.builder()
|
|
|
+ .put(indexBuilder("test-0").state(State.OPEN)
|
|
|
+ .putAlias(AliasMetaData.builder("test-alias"))
|
|
|
+ .putAlias(AliasMetaData.builder("other-alias"))
|
|
|
+ );
|
|
|
+ ClusterState state = ClusterState.builder(new ClusterName("_name")).metaData(mdBuilder).build();
|
|
|
+
|
|
|
+ Set<String> resolvedExpressions = new HashSet<>(Arrays.asList("test-0", "test-alias"));
|
|
|
+ String[] aliases = indexNameExpressionResolver.indexAliases(state, "test-0", x -> true, false, resolvedExpressions);
|
|
|
+ assertNull(aliases);
|
|
|
+ aliases = indexNameExpressionResolver.indexAliases(state, "test-0", x -> true, true, resolvedExpressions);
|
|
|
+ assertArrayEquals(new String[] {"test-alias"}, aliases);
|
|
|
+
|
|
|
+ resolvedExpressions = Collections.singleton("other-alias");
|
|
|
+ aliases = indexNameExpressionResolver.indexAliases(state, "test-0", x -> true, false, resolvedExpressions);
|
|
|
+ assertArrayEquals(new String[] {"other-alias"}, aliases);
|
|
|
+ aliases = indexNameExpressionResolver.indexAliases(state, "test-0", x -> true, true, resolvedExpressions);
|
|
|
+ assertArrayEquals(new String[] {"other-alias"}, aliases);
|
|
|
}
|
|
|
|
|
|
public void testConcreteWriteIndexSuccessful() {
|
|
@@ -1057,7 +1114,7 @@ public class IndexNameExpressionResolverTests extends ESTestCase {
|
|
|
.putAlias(AliasMetaData.builder("test-alias").writeIndex(testZeroWriteIndex ? true : null)));
|
|
|
ClusterState state = ClusterState.builder(new ClusterName("_name")).metaData(mdBuilder).build();
|
|
|
String[] strings = indexNameExpressionResolver
|
|
|
- .indexAliases(state, "test-0", x -> true, true, "test-*");
|
|
|
+ .indexAliases(state, "test-0", x -> true, true, new HashSet<>(Arrays.asList("test-0", "test-alias")));
|
|
|
Arrays.sort(strings);
|
|
|
assertArrayEquals(new String[] {"test-alias"}, strings);
|
|
|
IndicesRequest request = new IndicesRequest() {
|
|
@@ -1118,7 +1175,7 @@ public class IndexNameExpressionResolverTests extends ESTestCase {
|
|
|
.putAlias(AliasMetaData.builder("test-alias").writeIndex(testZeroWriteIndex ? randomFrom(false, null) : true)));
|
|
|
ClusterState state = ClusterState.builder(new ClusterName("_name")).metaData(mdBuilder).build();
|
|
|
String[] strings = indexNameExpressionResolver
|
|
|
- .indexAliases(state, "test-0", x -> true, true, "test-*");
|
|
|
+ .indexAliases(state, "test-0", x -> true, true, new HashSet<>(Arrays.asList("test-0", "test-1", "test-alias")));
|
|
|
Arrays.sort(strings);
|
|
|
assertArrayEquals(new String[] {"test-alias"}, strings);
|
|
|
IndicesRequest request = new IndicesRequest() {
|
|
@@ -1146,7 +1203,7 @@ public class IndexNameExpressionResolverTests extends ESTestCase {
|
|
|
.putAlias(AliasMetaData.builder("test-alias").writeIndex(false)));
|
|
|
ClusterState state = ClusterState.builder(new ClusterName("_name")).metaData(mdBuilder).build();
|
|
|
String[] strings = indexNameExpressionResolver
|
|
|
- .indexAliases(state, "test-0", x -> true, true, "test-*");
|
|
|
+ .indexAliases(state, "test-0", x -> true, true, new HashSet<>(Arrays.asList("test-0", "test-alias")));
|
|
|
Arrays.sort(strings);
|
|
|
assertArrayEquals(new String[] {"test-alias"}, strings);
|
|
|
DocWriteRequest request = randomFrom(new IndexRequest("test-alias"),
|
|
@@ -1166,7 +1223,7 @@ public class IndexNameExpressionResolverTests extends ESTestCase {
|
|
|
.putAlias(AliasMetaData.builder("test-alias").writeIndex(randomFrom(false, null))));
|
|
|
ClusterState state = ClusterState.builder(new ClusterName("_name")).metaData(mdBuilder).build();
|
|
|
String[] strings = indexNameExpressionResolver
|
|
|
- .indexAliases(state, "test-0", x -> true, true, "test-*");
|
|
|
+ .indexAliases(state, "test-0", x -> true, true, new HashSet<>(Arrays.asList("test-0", "test-1", "test-alias")));
|
|
|
Arrays.sort(strings);
|
|
|
assertArrayEquals(new String[] {"test-alias"}, strings);
|
|
|
DocWriteRequest request = randomFrom(new IndexRequest("test-alias"),
|
|
@@ -1187,7 +1244,7 @@ public class IndexNameExpressionResolverTests extends ESTestCase {
|
|
|
.putAlias(AliasMetaData.builder("test-alias").writeIndex(randomFrom(!test0WriteIndex, null))));
|
|
|
ClusterState state = ClusterState.builder(new ClusterName("_name")).metaData(mdBuilder).build();
|
|
|
String[] strings = indexNameExpressionResolver
|
|
|
- .indexAliases(state, "test-0", x -> true, true, "test-*");
|
|
|
+ .indexAliases(state, "test-0", x -> true, true, new HashSet<>(Arrays.asList("test-0", "test-1", "test-alias")));
|
|
|
Arrays.sort(strings);
|
|
|
assertArrayEquals(new String[] {"test-alias"}, strings);
|
|
|
IllegalArgumentException exception = expectThrows(IllegalArgumentException.class,
|