Fix testSkipRefreshIfShardIsRefreshingAlready ()

The test checked queue size and active count, however,
ThreadPoolExecutor pulls out the request from the queue before marking
the worker active, risking that we think all tasks are done when they
are not. Now check on completed-tasks metric instead, which is
guaranteed to be monotonic.

Relates 
This commit is contained in:
Henning Andersen 2020-01-10 17:29:00 +01:00 committed by Nhat Nguyen
parent f4aabdcd89
commit 2e5e5fd483

@ -432,19 +432,18 @@ public class IndexingMemoryControllerTests extends IndexShardTestCase {
}
};
int iterations = randomIntBetween(10, 100);
ThreadPoolStats.Stats beforeStats = getRefreshThreadPoolStats();
for (int i = 0; i < iterations; i++) {
controller.forceCheck();
}
assertBusy(() -> {
ThreadPoolStats.Stats stats = getRefreshThreadPoolStats();
assertThat(stats.getQueue(), equalTo(0));
assertThat(stats.getActive(), equalTo(1));
assertThat(stats.getCompleted(), equalTo(beforeStats.getCompleted() + iterations - 1));
});
refreshLatch.get().countDown(); // allow refresh
assertBusy(() -> {
ThreadPoolStats.Stats stats = getRefreshThreadPoolStats();
assertThat(stats.getQueue(), equalTo(0));
assertThat(stats.getActive(), equalTo(0));
assertThat(stats.getCompleted(), equalTo(beforeStats.getCompleted() + iterations));
});
assertThat(shard.refreshStats().getTotal(), equalTo(refreshStats.getTotal() + 1));
closeShards(shard);