|
@@ -56,6 +56,7 @@ import org.elasticsearch.index.IndexService;
|
|
|
import org.elasticsearch.index.mapper.MapperService;
|
|
|
import org.elasticsearch.index.shard.IndexEventListener;
|
|
|
import org.elasticsearch.indices.IndicesService;
|
|
|
+import org.elasticsearch.indices.InvalidIndexNameException;
|
|
|
import org.elasticsearch.indices.ShardLimitValidator;
|
|
|
import org.elasticsearch.test.ClusterServiceUtils;
|
|
|
import org.elasticsearch.test.ESTestCase;
|
|
@@ -80,7 +81,12 @@ import static org.hamcrest.Matchers.lessThanOrEqualTo;
|
|
|
import static org.hamcrest.Matchers.nullValue;
|
|
|
import static org.mockito.AdditionalAnswers.returnsFirstArg;
|
|
|
import static org.mockito.Matchers.any;
|
|
|
+import static org.mockito.Matchers.same;
|
|
|
+import static org.mockito.Mockito.doThrow;
|
|
|
import static org.mockito.Mockito.mock;
|
|
|
+import static org.mockito.Mockito.reset;
|
|
|
+import static org.mockito.Mockito.verify;
|
|
|
+import static org.mockito.Mockito.verifyZeroInteractions;
|
|
|
import static org.mockito.Mockito.when;
|
|
|
|
|
|
public class MetadataRolloverServiceTests extends ESTestCase {
|
|
@@ -490,7 +496,7 @@ public class MetadataRolloverServiceTests extends ESTestCase {
|
|
|
long before = testThreadPool.absoluteTimeInMillis();
|
|
|
MetadataRolloverService.RolloverResult rolloverResult =
|
|
|
rolloverService.rolloverClusterState(clusterState, aliasName, newIndexName, createIndexRequest, metConditions,
|
|
|
- randomBoolean());
|
|
|
+ randomBoolean(), false);
|
|
|
long after = testThreadPool.absoluteTimeInMillis();
|
|
|
|
|
|
newIndexName = newIndexName == null ? indexPrefix + "2" : newIndexName;
|
|
@@ -557,7 +563,7 @@ public class MetadataRolloverServiceTests extends ESTestCase {
|
|
|
long before = testThreadPool.absoluteTimeInMillis();
|
|
|
MetadataRolloverService.RolloverResult rolloverResult =
|
|
|
rolloverService.rolloverClusterState(clusterState, dataStream.getName(), null, createIndexRequest, metConditions,
|
|
|
- randomBoolean());
|
|
|
+ randomBoolean(), false);
|
|
|
long after = testThreadPool.absoluteTimeInMillis();
|
|
|
|
|
|
String sourceIndexName = DataStream.getDefaultBackingIndexName(dataStream.getName(), dataStream.getGeneration());
|
|
@@ -585,6 +591,69 @@ public class MetadataRolloverServiceTests extends ESTestCase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void testValidation() throws Exception {
|
|
|
+ final String rolloverTarget;
|
|
|
+ final String sourceIndexName;
|
|
|
+ final String defaultRolloverIndexName;
|
|
|
+ final boolean useDataStream = randomBoolean();
|
|
|
+ final Metadata.Builder builder = Metadata.builder();
|
|
|
+ if (useDataStream) {
|
|
|
+ DataStream dataStream = DataStreamTests.randomInstance();
|
|
|
+ rolloverTarget = dataStream.getName();
|
|
|
+ sourceIndexName = dataStream.getIndices().get(dataStream.getIndices().size() - 1).getName();
|
|
|
+ defaultRolloverIndexName = DataStream.getDefaultBackingIndexName(dataStream.getName(), dataStream.getGeneration() + 1);
|
|
|
+ ComposableIndexTemplate template = new ComposableIndexTemplate(List.of(dataStream.getName() + "*"), null, null, null, null,
|
|
|
+ null, new ComposableIndexTemplate.DataStreamTemplate("@timestamp"));
|
|
|
+ builder.put("template", template);
|
|
|
+ for (Index index : dataStream.getIndices()) {
|
|
|
+ builder.put(DataStreamTestHelper.getIndexMetadataBuilderForIndex(index));
|
|
|
+ }
|
|
|
+ builder.put(dataStream);
|
|
|
+ } else {
|
|
|
+ String indexPrefix = "logs-index-00000";
|
|
|
+ rolloverTarget = "logs-alias";
|
|
|
+ sourceIndexName = indexPrefix + "1";
|
|
|
+ defaultRolloverIndexName = indexPrefix + "2";
|
|
|
+ final IndexMetadata.Builder indexMetadata = IndexMetadata.builder(sourceIndexName)
|
|
|
+ .putAlias(AliasMetadata.builder(rolloverTarget).writeIndex(true).build()).settings(settings(Version.CURRENT))
|
|
|
+ .numberOfShards(1).numberOfReplicas(1);
|
|
|
+ builder.put(indexMetadata);
|
|
|
+ }
|
|
|
+ final ClusterState clusterState = ClusterState.builder(new ClusterName("test")).metadata(builder).build();
|
|
|
+
|
|
|
+ MetadataCreateIndexService createIndexService = mock(MetadataCreateIndexService.class);
|
|
|
+ MetadataIndexAliasesService metadataIndexAliasesService = mock(MetadataIndexAliasesService.class);
|
|
|
+ IndexNameExpressionResolver mockIndexNameExpressionResolver = mock(IndexNameExpressionResolver.class);
|
|
|
+ when(mockIndexNameExpressionResolver.resolveDateMathExpression(any())).then(returnsFirstArg());
|
|
|
+ MetadataRolloverService rolloverService = new MetadataRolloverService(null, createIndexService, metadataIndexAliasesService,
|
|
|
+ mockIndexNameExpressionResolver);
|
|
|
+
|
|
|
+ String newIndexName = useDataStream == false && randomBoolean() ? "logs-index-9" : null;
|
|
|
+
|
|
|
+ MetadataRolloverService.RolloverResult rolloverResult = rolloverService.rolloverClusterState(clusterState, rolloverTarget,
|
|
|
+ newIndexName, new CreateIndexRequest("_na_"), null, randomBoolean(), true);
|
|
|
+
|
|
|
+ newIndexName = newIndexName == null ? defaultRolloverIndexName : newIndexName;
|
|
|
+ assertEquals(sourceIndexName, rolloverResult.sourceIndexName);
|
|
|
+ assertEquals(newIndexName, rolloverResult.rolloverIndexName);
|
|
|
+ assertSame(rolloverResult.clusterState, clusterState);
|
|
|
+
|
|
|
+ verify(createIndexService).validateIndexName(any(), same(clusterState));
|
|
|
+ verifyZeroInteractions(createIndexService);
|
|
|
+ verifyZeroInteractions(metadataIndexAliasesService);
|
|
|
+
|
|
|
+ reset(createIndexService);
|
|
|
+ doThrow(new InvalidIndexNameException("test", "invalid")).when(createIndexService).validateIndexName(any(), any());
|
|
|
+
|
|
|
+ expectThrows(InvalidIndexNameException.class,
|
|
|
+ () -> rolloverService.rolloverClusterState(clusterState, rolloverTarget, null, new CreateIndexRequest("_na_"), null,
|
|
|
+ randomBoolean(), randomBoolean()));
|
|
|
+
|
|
|
+ verify(createIndexService).validateIndexName(any(), same(clusterState));
|
|
|
+ verifyZeroInteractions(createIndexService);
|
|
|
+ verifyZeroInteractions(metadataIndexAliasesService);
|
|
|
+ }
|
|
|
+
|
|
|
public void testRolloverClusterStateForDataStreamNoTemplate() throws Exception {
|
|
|
final DataStream dataStream = DataStreamTests.randomInstance();
|
|
|
Metadata.Builder builder = Metadata.builder();
|
|
@@ -614,7 +683,7 @@ public class MetadataRolloverServiceTests extends ESTestCase {
|
|
|
CreateIndexRequest createIndexRequest = new CreateIndexRequest("_na_");
|
|
|
|
|
|
Exception e = expectThrows(IllegalArgumentException.class, () -> rolloverService.rolloverClusterState(clusterState,
|
|
|
- dataStream.getName(), null, createIndexRequest, metConditions, false));
|
|
|
+ dataStream.getName(), null, createIndexRequest, metConditions, false, randomBoolean()));
|
|
|
assertThat(e.getMessage(), equalTo("no matching index template found for data stream [" + dataStream.getName() + "]"));
|
|
|
}
|
|
|
|