28
28
import org .elasticsearch .cluster .metadata .AliasAction ;
29
29
import org .elasticsearch .cluster .metadata .AliasMetadata ;
30
30
import org .elasticsearch .cluster .metadata .AliasValidator ;
31
+ import org .elasticsearch .cluster .metadata .ComponentTemplate ;
32
+ import org .elasticsearch .cluster .metadata .IndexAbstraction ;
31
33
import org .elasticsearch .cluster .metadata .IndexMetadata ;
32
34
import org .elasticsearch .cluster .metadata .IndexNameExpressionResolver ;
33
- import org .elasticsearch .cluster .metadata .IndexAbstraction ;
34
35
import org .elasticsearch .cluster .metadata .IndexTemplateMetadata ;
36
+ import org .elasticsearch .cluster .metadata .IndexTemplateV2 ;
35
37
import org .elasticsearch .cluster .metadata .Metadata ;
36
38
import org .elasticsearch .cluster .metadata .MetadataCreateIndexService ;
37
39
import org .elasticsearch .cluster .metadata .MetadataIndexAliasesService ;
40
+ import org .elasticsearch .cluster .metadata .Template ;
38
41
import org .elasticsearch .cluster .routing .allocation .AllocationService ;
39
42
import org .elasticsearch .cluster .service .ClusterService ;
40
43
import org .elasticsearch .common .CheckedFunction ;
53
56
54
57
import java .util .Arrays ;
55
58
import java .util .Collections ;
59
+ import java .util .HashMap ;
56
60
import java .util .List ;
57
61
import java .util .Locale ;
62
+ import java .util .Map ;
58
63
59
64
import static org .hamcrest .Matchers .containsString ;
60
65
import static org .hamcrest .Matchers .equalTo ;
@@ -271,6 +276,41 @@ public void testRejectDuplicateAlias() {
271
276
assertThat (ex .getMessage (), containsString ("index template [test-template]" ));
272
277
}
273
278
279
+ public void testRejectDuplicateAliasV2 () {
280
+ Map <String , AliasMetadata > aliases = new HashMap <>();
281
+ aliases .put ("foo-write" , AliasMetadata .builder ("foo-write" ).build ());
282
+ aliases .put ("bar-write" , AliasMetadata .builder ("bar-write" ).writeIndex (randomBoolean ()).build ());
283
+ final IndexTemplateV2 template = new IndexTemplateV2 (Arrays .asList ("foo-*" , "bar-*" ), new Template (null , null , aliases ),
284
+ null , null , null , null );
285
+
286
+ final Metadata metadata = Metadata .builder ().put (createMetadata (randomAlphaOfLengthBetween (5 , 7 )), false )
287
+ .put ("test-template" , template ).build ();
288
+ String indexName = randomFrom ("foo-123" , "bar-xyz" );
289
+ String aliasName = randomFrom ("foo-write" , "bar-write" );
290
+ final IllegalArgumentException ex = expectThrows (IllegalArgumentException .class ,
291
+ () -> MetadataRolloverService .checkNoDuplicatedAliasInIndexTemplate (metadata , indexName , aliasName , randomBoolean ()));
292
+ assertThat (ex .getMessage (), containsString ("index template [test-template]" ));
293
+ }
294
+
295
+ public void testRejectDuplicateAliasV2UsingComponentTemplates () {
296
+ Map <String , AliasMetadata > aliases = new HashMap <>();
297
+ aliases .put ("foo-write" , AliasMetadata .builder ("foo-write" ).build ());
298
+ aliases .put ("bar-write" , AliasMetadata .builder ("bar-write" ).writeIndex (randomBoolean ()).build ());
299
+ final ComponentTemplate ct = new ComponentTemplate (new Template (null , null , aliases ), null , null );
300
+ final IndexTemplateV2 template = new IndexTemplateV2 (Arrays .asList ("foo-*" , "bar-*" ), null ,
301
+ Collections .singletonList ("ct" ), null , null , null );
302
+
303
+ final Metadata metadata = Metadata .builder ().put (createMetadata (randomAlphaOfLengthBetween (5 , 7 )), false )
304
+ .put ("ct" , ct )
305
+ .put ("test-template" , template )
306
+ .build ();
307
+ String indexName = randomFrom ("foo-123" , "bar-xyz" );
308
+ String aliasName = randomFrom ("foo-write" , "bar-write" );
309
+ final IllegalArgumentException ex = expectThrows (IllegalArgumentException .class ,
310
+ () -> MetadataRolloverService .checkNoDuplicatedAliasInIndexTemplate (metadata , indexName , aliasName , randomBoolean ()));
311
+ assertThat (ex .getMessage (), containsString ("index template [test-template]" ));
312
+ }
313
+
274
314
public void testHiddenAffectsResolvedTemplates () {
275
315
final IndexTemplateMetadata template = IndexTemplateMetadata .builder ("test-template" )
276
316
.patterns (Collections .singletonList ("*" ))
@@ -288,6 +328,49 @@ public void testHiddenAffectsResolvedTemplates() {
288
328
assertThat (ex .getMessage (), containsString ("index template [test-template]" ));
289
329
}
290
330
331
+ public void testHiddenAffectsResolvedV2Templates () {
332
+ Map <String , AliasMetadata > aliases = new HashMap <>();
333
+ aliases .put ("foo-write" , AliasMetadata .builder ("foo-write" ).build ());
334
+ aliases .put ("bar-write" , AliasMetadata .builder ("bar-write" ).writeIndex (randomBoolean ()).build ());
335
+ final IndexTemplateV2 template = new IndexTemplateV2 (Collections .singletonList ("*" ), new Template (null , null , aliases ),
336
+ null , null , null , null );
337
+
338
+ final Metadata metadata = Metadata .builder ().put (createMetadata (randomAlphaOfLengthBetween (5 , 7 )), false )
339
+ .put ("test-template" , template ).build ();
340
+ String indexName = randomFrom ("foo-123" , "bar-xyz" );
341
+ String aliasName = randomFrom ("foo-write" , "bar-write" );
342
+
343
+ // hidden shouldn't throw
344
+ MetadataRolloverService .checkNoDuplicatedAliasInIndexTemplate (metadata , indexName , aliasName , Boolean .TRUE );
345
+ // not hidden will throw
346
+ final IllegalArgumentException ex = expectThrows (IllegalArgumentException .class , () ->
347
+ MetadataRolloverService .checkNoDuplicatedAliasInIndexTemplate (metadata , indexName , aliasName , randomFrom (Boolean .FALSE , null )));
348
+ assertThat (ex .getMessage (), containsString ("index template [test-template]" ));
349
+ }
350
+
351
+ public void testHiddenAffectsResolvedV2ComponentTemplates () {
352
+ Map <String , AliasMetadata > aliases = new HashMap <>();
353
+ aliases .put ("foo-write" , AliasMetadata .builder ("foo-write" ).build ());
354
+ aliases .put ("bar-write" , AliasMetadata .builder ("bar-write" ).writeIndex (randomBoolean ()).build ());
355
+ final ComponentTemplate ct = new ComponentTemplate (new Template (null , null , aliases ), null , null );
356
+ final IndexTemplateV2 template = new IndexTemplateV2 (Collections .singletonList ("*" ), null ,
357
+ Collections .singletonList ("ct" ), null , null , null );
358
+
359
+ final Metadata metadata = Metadata .builder ().put (createMetadata (randomAlphaOfLengthBetween (5 , 7 )), false )
360
+ .put ("ct" , ct )
361
+ .put ("test-template" , template )
362
+ .build ();
363
+ String indexName = randomFrom ("foo-123" , "bar-xyz" );
364
+ String aliasName = randomFrom ("foo-write" , "bar-write" );
365
+
366
+ // hidden shouldn't throw
367
+ MetadataRolloverService .checkNoDuplicatedAliasInIndexTemplate (metadata , indexName , aliasName , Boolean .TRUE );
368
+ // not hidden will throw
369
+ final IllegalArgumentException ex = expectThrows (IllegalArgumentException .class , () ->
370
+ MetadataRolloverService .checkNoDuplicatedAliasInIndexTemplate (metadata , indexName , aliasName , randomFrom (Boolean .FALSE , null )));
371
+ assertThat (ex .getMessage (), containsString ("index template [test-template]" ));
372
+ }
373
+
291
374
/**
292
375
* Test the main rolloverClusterState method. This does not validate every detail to depth, rather focuses on observing that each
293
376
* parameter is used for the purpose intended.
0 commit comments