diff --git a/muted-tests.yml b/muted-tests.yml index a79f2d990b5a9..5a276a37f88cd 100644 --- a/muted-tests.yml +++ b/muted-tests.yml @@ -353,9 +353,6 @@ tests: - class: org.elasticsearch.xpack.test.rest.XPackRestIT method: test {p0=ml/start_data_frame_analytics/Test start given dest index is not empty} issue: https://github.com/elastic/elasticsearch/issues/125909 -- class: org.elasticsearch.indices.stats.IndexStatsIT - method: testThrottleStats - issue: https://github.com/elastic/elasticsearch/issues/125910 - class: org.elasticsearch.xpack.esql.action.ManyShardsIT method: testCancelUnnecessaryRequests issue: https://github.com/elastic/elasticsearch/issues/125947 diff --git a/server/src/internalClusterTest/java/org/elasticsearch/indices/stats/IndexStatsIT.java b/server/src/internalClusterTest/java/org/elasticsearch/indices/stats/IndexStatsIT.java index b5f10002e217e..31dd14a37b9a1 100644 --- a/server/src/internalClusterTest/java/org/elasticsearch/indices/stats/IndexStatsIT.java +++ b/server/src/internalClusterTest/java/org/elasticsearch/indices/stats/IndexStatsIT.java @@ -467,27 +467,26 @@ public void testNonThrottleStats() throws Exception { assertThat(stats.getPrimaries().getIndexing().getTotal().getThrottleTime().millis(), equalTo(0L)); } - public void testThrottleStats() { + public void testThrottleStats() throws Exception { assertAcked( - prepareCreate("test").setSettings( + prepareCreate("test_throttle_stats_index").setSettings( settingsBuilder().put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, "1") .put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, "0") .put(MergePolicyConfig.INDEX_MERGE_POLICY_MAX_MERGE_AT_ONCE_SETTING.getKey(), "2") .put(MergePolicyConfig.INDEX_MERGE_POLICY_SEGMENTS_PER_TIER_SETTING.getKey(), "2") .put(MergeSchedulerConfig.MAX_THREAD_COUNT_SETTING.getKey(), "1") .put(MergeSchedulerConfig.MAX_MERGE_COUNT_SETTING.getKey(), "1") + .put(MergeSchedulerConfig.AUTO_THROTTLE_SETTING.getKey(), "true") .put(IndexSettings.INDEX_TRANSLOG_DURABILITY_SETTING.getKey(), Translog.Durability.ASYNC.name()) ) ); - ensureGreen(); + ensureGreen("test_throttle_stats_index"); // make sure we see throttling kicking in: AtomicBoolean done = new AtomicBoolean(); AtomicLong termUpTo = new AtomicLong(); - long start = System.currentTimeMillis(); - for (int threadIdx = 0; threadIdx < 5; threadIdx++) { - int finalThreadIdx = threadIdx; - new Thread(() -> { - IndicesStatsResponse stats; + Thread[] indexingThreads = new Thread[5]; + for (int threadIdx = 0; threadIdx < indexingThreads.length; threadIdx++) { + indexingThreads[threadIdx] = new Thread(() -> { while (done.get() == false) { for (int i = 0; i < 100; i++) { // Provoke slowish merging by making many unique terms: @@ -496,30 +495,35 @@ public void testThrottleStats() { sb.append(' '); sb.append(termUpTo.incrementAndGet()); } - prepareIndex("test").setId("" + termUpTo.get()).setSource("field" + (i % 10), sb.toString()).get(); + prepareIndex("test_throttle_stats_index").setId("" + termUpTo.get()) + .setSource("field" + (i % 10), sb.toString()) + .get(); if (i % 2 == 0) { - refresh(); + refresh("test_throttle_stats_index"); } } - refresh(); - if (finalThreadIdx == 0) { - stats = indicesAdmin().prepareStats().get(); - done.set(stats.getPrimaries().getIndexing().getTotal().getThrottleTime().millis() > 0); - } - if (System.currentTimeMillis() - start > 300 * 1000) { // Wait 5 minutes for throttling to kick in - done.set(true); - fail("index throttling didn't kick in after 5 minutes of intense merging"); - } + refresh("test_throttle_stats_index"); } - }).start(); + }); + indexingThreads[threadIdx].start(); + } + + assertBusy(() -> { + IndicesStatsResponse stats = indicesAdmin().prepareStats("test_throttle_stats_index").get(); + assertTrue(stats.getPrimaries().getIndexing().getTotal().getThrottleTime().millis() > 0); + done.set(true); + }, 5L, TimeUnit.MINUTES); + + for (Thread indexingThread : indexingThreads) { + indexingThread.join(); } // Optimize & flush and wait; else we sometimes get a "Delete Index failed - not acked" // when ESIntegTestCase.after tries to remove indices created by the test: - logger.info("test: now optimize"); - indicesAdmin().prepareForceMerge("test").get(); - flush(); - logger.info("test: test done"); + logger.info("test throttle stats: now optimize"); + indicesAdmin().prepareForceMerge("test_throttle_stats_index").get(); + flush("test_throttle_stats_index"); + logger.info("test throttle stats: test done"); } public void testSimpleStats() throws Exception {