@@ -316,6 +316,91 @@ public void testTupleAffixUpdateConsumer() {
316
316
assertEquals (0 , results .size ());
317
317
}
318
318
319
+ public void testAffixGroupUpdateConsumer () {
320
+ String prefix = randomAlphaOfLength (3 ) + "foo." ;
321
+ String intSuffix = randomAlphaOfLength (3 );
322
+ String listSuffix = randomAlphaOfLength (4 );
323
+ Setting .AffixSetting <Integer > intSetting = Setting .affixKeySetting (prefix , intSuffix ,
324
+ (k ) -> Setting .intSetting (k , 1 , Property .Dynamic , Property .NodeScope ));
325
+ Setting .AffixSetting <List <Integer >> listSetting = Setting .affixKeySetting (prefix , listSuffix ,
326
+ (k ) -> Setting .listSetting (k , Arrays .asList ("1" ), Integer ::parseInt , Property .Dynamic , Property .NodeScope ));
327
+ AbstractScopedSettings service = new ClusterSettings (Settings .EMPTY ,new HashSet <>(Arrays .asList (intSetting , listSetting )));
328
+ Map <String , Settings > results = new HashMap <>();
329
+ Function <String , String > listBuilder = g -> (prefix + g + "." + listSuffix );
330
+ Function <String , String > intBuilder = g -> (prefix + g + "." + intSuffix );
331
+ String group1 = randomAlphaOfLength (3 );
332
+ String group2 = randomAlphaOfLength (4 );
333
+ String group3 = randomAlphaOfLength (5 );
334
+ BiConsumer <String , Settings > listConsumer = results ::put ;
335
+
336
+ service .addAffixGroupUpdateConsumer (Arrays .asList (intSetting , listSetting ), listConsumer );
337
+ assertEquals (0 , results .size ());
338
+ service .applySettings (Settings .builder ()
339
+ .put (intBuilder .apply (group1 ), 2 )
340
+ .put (intBuilder .apply (group2 ), 7 )
341
+ .putList (listBuilder .apply (group1 ), "16" , "17" )
342
+ .putList (listBuilder .apply (group2 ), "18" , "19" , "20" )
343
+ .build ());
344
+ Settings groupOneSettings = results .get (group1 );
345
+ Settings groupTwoSettings = results .get (group2 );
346
+ assertEquals (2 , intSetting .getConcreteSettingForNamespace (group1 ).get (groupOneSettings ).intValue ());
347
+ assertEquals (7 , intSetting .getConcreteSettingForNamespace (group2 ).get (groupTwoSettings ).intValue ());
348
+ assertEquals (Arrays .asList (16 , 17 ), listSetting .getConcreteSettingForNamespace (group1 ).get (groupOneSettings ));
349
+ assertEquals (Arrays .asList (18 , 19 , 20 ), listSetting .getConcreteSettingForNamespace (group2 ).get (groupTwoSettings ));
350
+ assertEquals (2 , groupOneSettings .size ());
351
+ assertEquals (2 , groupTwoSettings .size ());
352
+ assertEquals (2 , results .size ());
353
+
354
+ results .clear ();
355
+
356
+ service .applySettings (Settings .builder ()
357
+ .put (intBuilder .apply (group1 ), 2 )
358
+ .put (intBuilder .apply (group2 ), 7 )
359
+ .putList (listBuilder .apply (group1 ), "16" , "17" )
360
+ .putNull (listBuilder .apply (group2 )) // removed
361
+ .build ());
362
+
363
+ assertNull (group1 + " wasn't changed" , results .get (group1 ));
364
+ groupTwoSettings = results .get (group2 );
365
+ assertEquals (7 , intSetting .getConcreteSettingForNamespace (group2 ).get (groupTwoSettings ).intValue ());
366
+ assertEquals (Arrays .asList (1 ), listSetting .getConcreteSettingForNamespace (group2 ).get (groupTwoSettings ));
367
+ assertEquals (1 , results .size ());
368
+ assertEquals (2 , groupTwoSettings .size ());
369
+ results .clear ();
370
+
371
+ service .applySettings (Settings .builder ()
372
+ .put (intBuilder .apply (group1 ), 2 )
373
+ .put (intBuilder .apply (group2 ), 7 )
374
+ .putList (listBuilder .apply (group1 ), "16" , "17" )
375
+ .putList (listBuilder .apply (group3 ), "5" , "6" ) // added
376
+ .build ());
377
+ assertNull (group1 + " wasn't changed" , results .get (group1 ));
378
+ assertNull (group2 + " wasn't changed" , results .get (group2 ));
379
+
380
+ Settings groupThreeSettings = results .get (group3 );
381
+ assertEquals (1 , intSetting .getConcreteSettingForNamespace (group3 ).get (groupThreeSettings ).intValue ());
382
+ assertEquals (Arrays .asList (5 , 6 ), listSetting .getConcreteSettingForNamespace (group3 ).get (groupThreeSettings ));
383
+ assertEquals (1 , results .size ());
384
+ assertEquals (1 , groupThreeSettings .size ());
385
+ results .clear ();
386
+
387
+ service .applySettings (Settings .builder ()
388
+ .put (intBuilder .apply (group1 ), 4 ) // modified
389
+ .put (intBuilder .apply (group2 ), 7 )
390
+ .putList (listBuilder .apply (group1 ), "16" , "17" )
391
+ .putList (listBuilder .apply (group3 ), "5" , "6" )
392
+ .build ());
393
+ assertNull (group2 + " wasn't changed" , results .get (group2 ));
394
+ assertNull (group3 + " wasn't changed" , results .get (group3 ));
395
+
396
+ groupOneSettings = results .get (group1 );
397
+ assertEquals (4 , intSetting .getConcreteSettingForNamespace (group1 ).get (groupOneSettings ).intValue ());
398
+ assertEquals (Arrays .asList (16 , 17 ), listSetting .getConcreteSettingForNamespace (group1 ).get (groupOneSettings ));
399
+ assertEquals (1 , results .size ());
400
+ assertEquals (2 , groupOneSettings .size ());
401
+ results .clear ();
402
+ }
403
+
319
404
public void testAddConsumerAffix () {
320
405
Setting .AffixSetting <Integer > intSetting = Setting .affixKeySetting ("foo." , "bar" ,
321
406
(k ) -> Setting .intSetting (k , 1 , Property .Dynamic , Property .NodeScope ));
0 commit comments