|
@@ -21,13 +21,14 @@ package org.elasticsearch.common.util.concurrent;
|
|
|
|
|
|
import org.elasticsearch.ExceptionsHelper;
|
|
|
import org.elasticsearch.test.ESTestCase;
|
|
|
-import org.junit.Test;
|
|
|
+import org.hamcrest.Matcher;
|
|
|
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
|
|
+import static org.hamcrest.Matchers.anyOf;
|
|
|
import static org.hamcrest.Matchers.containsString;
|
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
|
import static org.hamcrest.Matchers.lessThan;
|
|
@@ -275,7 +276,19 @@ public class EsExecutorsTests extends ESTestCase {
|
|
|
assertThat(message, containsString("on EsThreadPoolExecutor[testRejectionMessage"));
|
|
|
assertThat(message, containsString("queue capacity = " + queue));
|
|
|
assertThat(message, containsString("[Running"));
|
|
|
- assertThat(message, containsString("active threads = " + pool));
|
|
|
+ /*
|
|
|
+ * While you'd expect all threads in the pool to be active when the queue gets long enough to cause rejections this isn't
|
|
|
+ * always the case. Sometimes you'll see "active threads = <pool - 1>", presumably because one of those threads has finished
|
|
|
+ * its current task but has yet to pick up another task. You too can reproduce this by adding the @Repeat annotation to this
|
|
|
+ * test with something like 10000 iterations. I suspect you could see "active threads = <any natural number <= to pool>". So
|
|
|
+ * that is what we assert.
|
|
|
+ */
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ Matcher<String>[] activeThreads = new Matcher[pool + 1];
|
|
|
+ for (int p = 0; p <= pool; p++) {
|
|
|
+ activeThreads[p] = containsString("active threads = " + p);
|
|
|
+ }
|
|
|
+ assertThat(message, anyOf(activeThreads));
|
|
|
assertThat(message, containsString("queued tasks = " + queue));
|
|
|
assertThat(message, containsString("completed tasks = 0"));
|
|
|
}
|