|
@@ -35,6 +35,7 @@ import org.elasticsearch.common.settings.IndexScopedSettings;
|
|
|
import org.elasticsearch.common.settings.Setting;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.common.unit.TimeValue;
|
|
|
+import org.elasticsearch.common.util.concurrent.ThreadContext;
|
|
|
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
|
|
|
import org.elasticsearch.common.xcontent.XContentFactory;
|
|
|
import org.elasticsearch.index.Index;
|
|
@@ -89,6 +90,7 @@ import static org.elasticsearch.cluster.metadata.MetadataCreateIndexService.clus
|
|
|
import static org.elasticsearch.cluster.metadata.MetadataCreateIndexService.getIndexNumberOfRoutingShards;
|
|
|
import static org.elasticsearch.cluster.metadata.MetadataCreateIndexService.parseV1Mappings;
|
|
|
import static org.elasticsearch.cluster.metadata.MetadataCreateIndexService.resolveAndValidateAliases;
|
|
|
+
|
|
|
import static org.elasticsearch.index.IndexSettings.INDEX_SOFT_DELETES_SETTING;
|
|
|
import static org.elasticsearch.indices.ShardLimitValidatorTests.createTestShardLimitService;
|
|
|
import static org.hamcrest.Matchers.endsWith;
|
|
@@ -105,9 +107,11 @@ public class MetadataCreateIndexServiceTests extends ESTestCase {
|
|
|
private AliasValidator aliasValidator;
|
|
|
private CreateIndexClusterStateUpdateRequest request;
|
|
|
private SearchExecutionContext searchExecutionContext;
|
|
|
+ private IndexNameExpressionResolver indexNameExpressionResolver;
|
|
|
|
|
|
@Before
|
|
|
public void setupCreateIndexRequestAndAliasValidator() {
|
|
|
+ indexNameExpressionResolver = new IndexNameExpressionResolver(new ThreadContext(Settings.EMPTY), EmptySystemIndices.INSTANCE);
|
|
|
aliasValidator = new AliasValidator();
|
|
|
request = new CreateIndexClusterStateUpdateRequest("create index", "test", "test");
|
|
|
Settings indexSettings = Settings.builder().put(SETTING_VERSION_CREATED, Version.CURRENT)
|
|
@@ -586,10 +590,22 @@ public class MetadataCreateIndexServiceTests extends ESTestCase {
|
|
|
|
|
|
expectThrows(InvalidAliasNameException.class, () ->
|
|
|
resolveAndValidateAliases(request.index(), request.aliases(), List.of(), Metadata.builder().build(),
|
|
|
- aliasValidator, xContentRegistry(), searchExecutionContext)
|
|
|
+ aliasValidator, xContentRegistry(), searchExecutionContext, indexNameExpressionResolver::resolveDateMathExpression)
|
|
|
);
|
|
|
}
|
|
|
|
|
|
+ public void testAliasNameWithMathExpression() {
|
|
|
+ final String aliasName = "<date-math-based-{2021-01-19||/M{yyyy-MM-dd}}>";
|
|
|
+
|
|
|
+ request.aliases(Set.of(new Alias(aliasName)));
|
|
|
+
|
|
|
+ List<AliasMetadata> aliasMetadata = resolveAndValidateAliases(request.index(), request.aliases(), List.of(),
|
|
|
+ Metadata.builder().build(), aliasValidator, xContentRegistry(), searchExecutionContext,
|
|
|
+ indexNameExpressionResolver::resolveDateMathExpression);
|
|
|
+
|
|
|
+ assertEquals("date-math-based-2021-01-01", aliasMetadata.get(0).alias() );
|
|
|
+ }
|
|
|
+
|
|
|
public void testRequestDataHavePriorityOverTemplateData() throws Exception {
|
|
|
CompressedXContent templateMapping = createMapping("test", "text");
|
|
|
CompressedXContent reqMapping = createMapping("test", "keyword");
|
|
@@ -608,7 +624,9 @@ public class MetadataCreateIndexServiceTests extends ESTestCase {
|
|
|
List.of(templateMetadata.mappings()), xContentRegistry());
|
|
|
List<AliasMetadata> resolvedAliases = resolveAndValidateAliases(request.index(), request.aliases(),
|
|
|
MetadataIndexTemplateService.resolveAliases(List.of(templateMetadata)),
|
|
|
- Metadata.builder().build(), aliasValidator, xContentRegistry(), searchExecutionContext);
|
|
|
+ Metadata.builder().build(), aliasValidator, xContentRegistry(), searchExecutionContext,
|
|
|
+ indexNameExpressionResolver::resolveDateMathExpression);
|
|
|
+
|
|
|
Settings aggregatedIndexSettings = aggregateIndexSettings(ClusterState.EMPTY_STATE, request, templateMetadata.settings(),
|
|
|
null, Settings.EMPTY, IndexScopedSettings.DEFAULT_SCOPED_SETTINGS, randomShardLimitService(),
|
|
|
Collections.emptySet());
|
|
@@ -639,7 +657,7 @@ public class MetadataCreateIndexServiceTests extends ESTestCase {
|
|
|
assertThat(aggregatedIndexSettings.get(SETTING_NUMBER_OF_SHARDS), equalTo("15"));
|
|
|
}
|
|
|
|
|
|
- public void testTemplateOrder() throws Exception {
|
|
|
+ public void testTemplateOrder() throws Exception {
|
|
|
List<IndexTemplateMetadata> templates = new ArrayList<>(3);
|
|
|
templates.add(addMatchingTemplate(builder -> builder
|
|
|
.order(3)
|
|
@@ -656,18 +674,49 @@ public class MetadataCreateIndexServiceTests extends ESTestCase {
|
|
|
.settings(Settings.builder().put(SETTING_NUMBER_OF_SHARDS, 10))
|
|
|
.putAlias(AliasMetadata.builder("alias1").searchRouting("1").build())
|
|
|
));
|
|
|
+
|
|
|
Settings aggregatedIndexSettings = aggregateIndexSettings(ClusterState.EMPTY_STATE, request,
|
|
|
MetadataIndexTemplateService.resolveSettings(templates), null, Settings.EMPTY,
|
|
|
IndexScopedSettings.DEFAULT_SCOPED_SETTINGS, randomShardLimitService(), Collections.emptySet());
|
|
|
List<AliasMetadata> resolvedAliases = resolveAndValidateAliases(request.index(), request.aliases(),
|
|
|
MetadataIndexTemplateService.resolveAliases(templates),
|
|
|
- Metadata.builder().build(), aliasValidator, xContentRegistry(), searchExecutionContext);
|
|
|
+ Metadata.builder().build(), aliasValidator, xContentRegistry(), searchExecutionContext,
|
|
|
+ indexNameExpressionResolver::resolveDateMathExpression);
|
|
|
+
|
|
|
assertThat(aggregatedIndexSettings.get(SETTING_NUMBER_OF_SHARDS), equalTo("12"));
|
|
|
AliasMetadata alias = resolvedAliases.get(0);
|
|
|
assertThat(alias.getSearchRouting(), equalTo("3"));
|
|
|
assertThat(alias.writeIndex(), is(true));
|
|
|
}
|
|
|
|
|
|
+ public void testResolvedAliasInTemplate() {
|
|
|
+ List<IndexTemplateMetadata> templates = new ArrayList<>(3);
|
|
|
+ templates.add(addMatchingTemplate(builder -> builder
|
|
|
+ .order(3)
|
|
|
+ .settings(Settings.builder().put(SETTING_NUMBER_OF_SHARDS, 1))
|
|
|
+ .putAlias(AliasMetadata.builder("<jan-{2021-01-07||/M{yyyy-MM-dd}}>").build())
|
|
|
+ ));
|
|
|
+ templates.add(addMatchingTemplate(builder -> builder
|
|
|
+ .order(2)
|
|
|
+ .settings(Settings.builder().put(SETTING_NUMBER_OF_SHARDS, 1))
|
|
|
+ .putAlias(AliasMetadata.builder("<feb-{2021-02-28||/M{yyyy-MM-dd}}>").build())
|
|
|
+ ));
|
|
|
+ templates.add(addMatchingTemplate(builder -> builder
|
|
|
+ .order(1)
|
|
|
+ .settings(Settings.builder().put(SETTING_NUMBER_OF_SHARDS, 1))
|
|
|
+ .putAlias(AliasMetadata.builder("<mar-{2021-03-07||/M{yyyy-MM-dd}}>").build())
|
|
|
+ ));
|
|
|
+
|
|
|
+ List<AliasMetadata> resolvedAliases = resolveAndValidateAliases(request.index(), request.aliases(),
|
|
|
+ MetadataIndexTemplateService.resolveAliases(templates),
|
|
|
+ Metadata.builder().build(), aliasValidator, xContentRegistry(), searchExecutionContext,
|
|
|
+ indexNameExpressionResolver::resolveDateMathExpression);
|
|
|
+
|
|
|
+ assertThat(resolvedAliases.get(0).alias(), equalTo("jan-2021-01-01"));
|
|
|
+ assertThat(resolvedAliases.get(1).alias(), equalTo("feb-2021-02-01"));
|
|
|
+ assertThat(resolvedAliases.get(2).alias(), equalTo("mar-2021-03-01"));
|
|
|
+ }
|
|
|
+
|
|
|
public void testAggregateIndexSettingsIgnoresTemplatesOnCreateFromSourceIndex() throws Exception {
|
|
|
CompressedXContent templateMapping = createMapping("test", "text");
|
|
|
|