Skip to content

Commit 646069d

Browse files
Fix IndexStatsIT (#126113)
Ensures proper cleanup in the testThrottleStats test. Fixes #125910 #125907 #125912
1 parent db2ed34 commit 646069d

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

server/src/internalClusterTest/java/org/elasticsearch/indices/stats/IndexStatsIT.java

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -466,27 +466,26 @@ public void testNonThrottleStats() throws Exception {
466466
assertThat(stats.getPrimaries().getIndexing().getTotal().getThrottleTime().millis(), equalTo(0L));
467467
}
468468

469-
public void testThrottleStats() {
469+
public void testThrottleStats() throws Exception {
470470
assertAcked(
471-
prepareCreate("test").setSettings(
471+
prepareCreate("test_throttle_stats_index").setSettings(
472472
settingsBuilder().put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, "1")
473473
.put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, "0")
474474
.put(MergePolicyConfig.INDEX_MERGE_POLICY_MAX_MERGE_AT_ONCE_SETTING.getKey(), "2")
475475
.put(MergePolicyConfig.INDEX_MERGE_POLICY_SEGMENTS_PER_TIER_SETTING.getKey(), "2")
476476
.put(MergeSchedulerConfig.MAX_THREAD_COUNT_SETTING.getKey(), "1")
477477
.put(MergeSchedulerConfig.MAX_MERGE_COUNT_SETTING.getKey(), "1")
478+
.put(MergeSchedulerConfig.AUTO_THROTTLE_SETTING.getKey(), "true")
478479
.put(IndexSettings.INDEX_TRANSLOG_DURABILITY_SETTING.getKey(), Translog.Durability.ASYNC.name())
479480
)
480481
);
481-
ensureGreen();
482+
ensureGreen("test_throttle_stats_index");
482483
// make sure we see throttling kicking in:
483484
AtomicBoolean done = new AtomicBoolean();
484485
AtomicLong termUpTo = new AtomicLong();
485-
long start = System.currentTimeMillis();
486-
for (int threadIdx = 0; threadIdx < 5; threadIdx++) {
487-
int finalThreadIdx = threadIdx;
488-
new Thread(() -> {
489-
IndicesStatsResponse stats;
486+
Thread[] indexingThreads = new Thread[5];
487+
for (int threadIdx = 0; threadIdx < indexingThreads.length; threadIdx++) {
488+
indexingThreads[threadIdx] = new Thread(() -> {
490489
while (done.get() == false) {
491490
for (int i = 0; i < 100; i++) {
492491
// Provoke slowish merging by making many unique terms:
@@ -495,30 +494,35 @@ public void testThrottleStats() {
495494
sb.append(' ');
496495
sb.append(termUpTo.incrementAndGet());
497496
}
498-
prepareIndex("test").setId("" + termUpTo.get()).setSource("field" + (i % 10), sb.toString()).get();
497+
prepareIndex("test_throttle_stats_index").setId("" + termUpTo.get())
498+
.setSource("field" + (i % 10), sb.toString())
499+
.get();
499500
if (i % 2 == 0) {
500-
refresh();
501+
refresh("test_throttle_stats_index");
501502
}
502503
}
503-
refresh();
504-
if (finalThreadIdx == 0) {
505-
stats = indicesAdmin().prepareStats().get();
506-
done.set(stats.getPrimaries().getIndexing().getTotal().getThrottleTime().millis() > 0);
507-
}
508-
if (System.currentTimeMillis() - start > 300 * 1000) { // Wait 5 minutes for throttling to kick in
509-
done.set(true);
510-
fail("index throttling didn't kick in after 5 minutes of intense merging");
511-
}
504+
refresh("test_throttle_stats_index");
512505
}
513-
}).start();
506+
});
507+
indexingThreads[threadIdx].start();
508+
}
509+
510+
assertBusy(() -> {
511+
IndicesStatsResponse stats = indicesAdmin().prepareStats("test_throttle_stats_index").get();
512+
assertTrue(stats.getPrimaries().getIndexing().getTotal().getThrottleTime().millis() > 0);
513+
done.set(true);
514+
}, 5L, TimeUnit.MINUTES);
515+
516+
for (Thread indexingThread : indexingThreads) {
517+
indexingThread.join();
514518
}
515519

516520
// Optimize & flush and wait; else we sometimes get a "Delete Index failed - not acked"
517521
// when ESIntegTestCase.after tries to remove indices created by the test:
518-
logger.info("test: now optimize");
519-
indicesAdmin().prepareForceMerge("test").get();
520-
flush();
521-
logger.info("test: test done");
522+
logger.info("test throttle stats: now optimize");
523+
indicesAdmin().prepareForceMerge("test_throttle_stats_index").get();
524+
flush("test_throttle_stats_index");
525+
logger.info("test throttle stats: test done");
522526
}
523527

524528
public void testSimpleStats() throws Exception {

0 commit comments

Comments
 (0)