@@ -235,33 +235,19 @@ public void testDefaultRefreshIntervalWithUpdateClusterAndIndexSettings() throws
235
235
}
236
236
237
237
public void testRefreshIntervalDisabled () throws ExecutionException , InterruptedException {
238
- TimeValue clusterMinimumRefreshInterval = client ().settings ()
239
- .getAsTime (IndicesService .CLUSTER_MINIMUM_INDEX_REFRESH_INTERVAL_SETTING .getKey (), TimeValue .MINUS_ONE );
240
- boolean createIndexSuccess = clusterMinimumRefreshInterval .equals (TimeValue .MINUS_ONE );
241
238
String clusterManagerName = internalCluster ().getClusterManagerName ();
242
239
List <String > dataNodes = new ArrayList <>(internalCluster ().getDataNodeNames ());
243
240
Settings settings = Settings .builder ()
244
241
.put (indexSettings ())
245
242
.put (IndexSettings .INDEX_REFRESH_INTERVAL_SETTING .getKey (), IndexSettings .MINIMUM_REFRESH_INTERVAL )
246
243
.build ();
247
- if (createIndexSuccess ) {
248
- createIndex (INDEX_NAME , settings );
249
- ensureYellowAndNoInitializingShards (INDEX_NAME );
250
- ensureGreen (INDEX_NAME );
251
- GetIndexResponse getIndexResponse = client (clusterManagerName ).admin ().indices ().getIndex (new GetIndexRequest ()).get ();
252
- IndicesService indicesService = internalCluster ().getInstance (IndicesService .class , randomFrom (dataNodes ));
253
- String uuid = getIndexResponse .getSettings ().get (INDEX_NAME ).get (IndexMetadata .SETTING_INDEX_UUID );
254
- IndexService indexService = indicesService .indexService (new Index (INDEX_NAME , uuid ));
255
- assertEquals (IndexSettings .MINIMUM_REFRESH_INTERVAL , indexService .getRefreshTaskInterval ());
256
- } else {
257
- IllegalArgumentException exception = assertThrows (IllegalArgumentException .class , () -> createIndex (INDEX_NAME , settings ));
258
- assertEquals (
259
- "invalid index.refresh_interval [-1]: cannot be smaller than cluster.minimum.index.refresh_interval ["
260
- + getMinRefreshIntervalForRefreshDisabled ()
261
- + "]" ,
262
- exception .getMessage ()
263
- );
264
- }
244
+ createIndex (INDEX_NAME , settings );
245
+ ensureGreen (INDEX_NAME );
246
+ GetIndexResponse getIndexResponse = client (clusterManagerName ).admin ().indices ().getIndex (new GetIndexRequest ()).get ();
247
+ IndicesService indicesService = internalCluster ().getInstance (IndicesService .class , randomFrom (dataNodes ));
248
+ String uuid = getIndexResponse .getSettings ().get (INDEX_NAME ).get (IndexMetadata .SETTING_INDEX_UUID );
249
+ IndexService indexService = indicesService .indexService (new Index (INDEX_NAME , uuid ));
250
+ assertEquals (IndexSettings .MINIMUM_REFRESH_INTERVAL , indexService .getRefreshTaskInterval ());
265
251
}
266
252
267
253
protected TimeValue getMinRefreshIntervalForRefreshDisabled () {
@@ -366,6 +352,147 @@ public void testClusterMinimumChangeOnIndexWithCustomRefreshInterval() throws Ex
366
352
assertEquals (customRefreshInterval , indexService .getRefreshTaskInterval ());
367
353
}
368
354
355
+ public void testClusterMinimumRefreshIntervalOfMinusOneFails () {
356
+ // This test checks that we can not set cluster minimum refresh interval as -1 (or -1ms).
357
+ String clusterManagerName = internalCluster ().getClusterManagerName ();
358
+ String refreshInterval = randomFrom ("-1" , "-1ms" );
359
+ IllegalArgumentException ex = assertThrows (
360
+ IllegalArgumentException .class ,
361
+ () -> client (clusterManagerName ).admin ()
362
+ .cluster ()
363
+ .prepareUpdateSettings ()
364
+ .setTransientSettings (Settings .builder ().put (CLUSTER_MINIMUM_INDEX_REFRESH_INTERVAL_SETTING .getKey (), refreshInterval ))
365
+ .get ()
366
+ );
367
+ assertEquals (
368
+ "failed to parse value [" + refreshInterval + "] for setting [cluster.minimum.index.refresh_interval], must be >= [0ms]" ,
369
+ ex .getMessage ()
370
+ );
371
+ }
372
+
373
+ public void testClusterMinimumRefreshIntervalOfZero () {
374
+ // This test checks that we can set the cluster minimum refresh interval as 0.
375
+ String clusterManagerName = internalCluster ().getClusterManagerName ();
376
+ client (clusterManagerName ).admin ()
377
+ .cluster ()
378
+ .prepareUpdateSettings ()
379
+ .setTransientSettings (Settings .builder ().put (CLUSTER_MINIMUM_INDEX_REFRESH_INTERVAL_SETTING .getKey (), "0" ))
380
+ .get ();
381
+ }
382
+
383
+ public void testDefaultRefreshIntervalOfMinusOneIrrespectiveOfMinimum () {
384
+ // This test checks that we are able to set the cluster default refresh interval to one regardless of what the
385
+ // minimum is set to. -1 corresponds to no period background refreshes.
386
+ String clusterManagerName = internalCluster ().getClusterManagerName ();
387
+ client (clusterManagerName ).admin ()
388
+ .cluster ()
389
+ .prepareUpdateSettings ()
390
+ .setTransientSettings (
391
+ Settings .builder ()
392
+ .put (CLUSTER_MINIMUM_INDEX_REFRESH_INTERVAL_SETTING .getKey (), randomFrom ("0" , "1ms" , "1s" , "10s" ))
393
+ .put (CLUSTER_DEFAULT_INDEX_REFRESH_INTERVAL_SETTING .getKey (), randomFrom ("-1" , "-1ms" ))
394
+ )
395
+ .get ();
396
+ }
397
+
398
+ public void testCreateIndexWithMinusOneRefreshInterval () throws ExecutionException , InterruptedException {
399
+ // This test checks that we are able to create index with -1 refresh interval using index settings and default interval both.
400
+ String clusterManagerName = internalCluster ().getClusterManagerName ();
401
+ client (clusterManagerName ).admin ()
402
+ .cluster ()
403
+ .prepareUpdateSettings ()
404
+ .setTransientSettings (
405
+ Settings .builder ()
406
+ .put (CLUSTER_MINIMUM_INDEX_REFRESH_INTERVAL_SETTING .getKey (), "10s" )
407
+ .put (CLUSTER_DEFAULT_INDEX_REFRESH_INTERVAL_SETTING .getKey (), "10s" )
408
+ )
409
+ .get ();
410
+
411
+ Settings indexSettings = Settings .builder ()
412
+ .put (indexSettings ())
413
+ .put (IndexSettings .INDEX_REFRESH_INTERVAL_SETTING .getKey (), randomFrom ("-1" , "-1ms" ))
414
+ .build ();
415
+ createIndex (INDEX_NAME , indexSettings );
416
+ ensureGreen (INDEX_NAME );
417
+
418
+ IndexService indexService = getIndexServiceFromRandomDataNode (INDEX_NAME );
419
+ assertEquals (-1 , indexService .getRefreshTaskInterval ().millis ());
420
+
421
+ client (clusterManagerName ).admin ()
422
+ .cluster ()
423
+ .prepareUpdateSettings ()
424
+ .setTransientSettings (Settings .builder ().put (CLUSTER_DEFAULT_INDEX_REFRESH_INTERVAL_SETTING .getKey (), randomFrom ("-1" , "-1ms" )))
425
+ .get ();
426
+ createIndex (OTHER_INDEX_NAME );
427
+ ensureGreen (OTHER_INDEX_NAME );
428
+ indexService = getIndexServiceFromRandomDataNode (OTHER_INDEX_NAME );
429
+ assertEquals (-1 , indexService .getRefreshTaskInterval ().millis ());
430
+ }
431
+
432
+ public void testUpdateIndexWithMinusOneRefreshInterval () throws ExecutionException , InterruptedException {
433
+ // This test checks that we are able to update index with -1 refresh interval using index settings and default interval both.
434
+ String clusterManagerName = internalCluster ().getClusterManagerName ();
435
+ client (clusterManagerName ).admin ()
436
+ .cluster ()
437
+ .prepareUpdateSettings ()
438
+ .setTransientSettings (
439
+ Settings .builder ()
440
+ .put (CLUSTER_MINIMUM_INDEX_REFRESH_INTERVAL_SETTING .getKey (), "10s" )
441
+ .put (CLUSTER_DEFAULT_INDEX_REFRESH_INTERVAL_SETTING .getKey (), "10s" )
442
+ )
443
+ .get ();
444
+
445
+ createIndex (INDEX_NAME );
446
+ ensureGreen (INDEX_NAME );
447
+ IndexService indexService = getIndexServiceFromRandomDataNode (INDEX_NAME );
448
+ assertEquals (10 , indexService .getRefreshTaskInterval ().seconds ());
449
+
450
+ client (clusterManagerName ).admin ()
451
+ .indices ()
452
+ .updateSettings (
453
+ new UpdateSettingsRequest (INDEX_NAME ).settings (
454
+ Settings .builder ().put (IndexSettings .INDEX_REFRESH_INTERVAL_SETTING .getKey (), randomFrom ("-1" , "-1ms" ))
455
+ )
456
+ )
457
+ .actionGet ();
458
+ assertEquals (-1 , indexService .getRefreshTaskInterval ().millis ());
459
+
460
+ client (clusterManagerName ).admin ()
461
+ .indices ()
462
+ .updateSettings (
463
+ new UpdateSettingsRequest (INDEX_NAME ).settings (
464
+ Settings .builder ().put (IndexSettings .INDEX_REFRESH_INTERVAL_SETTING .getKey (), "100s" )
465
+ )
466
+ )
467
+ .actionGet ();
468
+ assertEquals (100 , indexService .getRefreshTaskInterval ().seconds ());
469
+
470
+ client (clusterManagerName ).admin ()
471
+ .cluster ()
472
+ .prepareUpdateSettings ()
473
+ .setTransientSettings (Settings .builder ().put (CLUSTER_DEFAULT_INDEX_REFRESH_INTERVAL_SETTING .getKey (), randomFrom ("-1" , "-1ms" )))
474
+ .get ();
475
+
476
+ client (clusterManagerName ).admin ()
477
+ .indices ()
478
+ .updateSettings (
479
+ new UpdateSettingsRequest (INDEX_NAME ).settings (
480
+ Settings .builder ().putNull (IndexSettings .INDEX_REFRESH_INTERVAL_SETTING .getKey ())
481
+ )
482
+ )
483
+ .actionGet ();
484
+ assertEquals (-1 , indexService .getRefreshTaskInterval ().millis ());
485
+ }
486
+
487
+ private IndexService getIndexServiceFromRandomDataNode (String indexName ) throws ExecutionException , InterruptedException {
488
+ String clusterManagerName = internalCluster ().getClusterManagerName ();
489
+ List <String > dataNodes = new ArrayList <>(internalCluster ().getDataNodeNames ());
490
+ GetIndexResponse getIndexResponse = client (clusterManagerName ).admin ().indices ().getIndex (new GetIndexRequest ()).get ();
491
+ IndicesService indicesService = internalCluster ().getInstance (IndicesService .class , randomFrom (dataNodes ));
492
+ String uuid = getIndexResponse .getSettings ().get (indexName ).get (IndexMetadata .SETTING_INDEX_UUID );
493
+ return indicesService .indexService (new Index (indexName , uuid ));
494
+ }
495
+
369
496
protected TimeValue getDefaultRefreshInterval () {
370
497
return IndexSettings .DEFAULT_REFRESH_INTERVAL ;
371
498
}
0 commit comments