|
@@ -43,7 +43,14 @@ import org.elasticsearch.test.MockLogAppender;
|
|
|
import org.elasticsearch.test.junit.annotations.TestLogging;
|
|
|
import org.elasticsearch.threadpool.ThreadPool;
|
|
|
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.ConcurrentMap;
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
@@ -53,7 +60,11 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
import static org.elasticsearch.common.settings.Settings.settingsBuilder;
|
|
|
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
|
|
|
-import static org.hamcrest.Matchers.*;
|
|
|
+import static org.hamcrest.Matchers.equalTo;
|
|
|
+import static org.hamcrest.Matchers.greaterThan;
|
|
|
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
|
|
|
+import static org.hamcrest.Matchers.is;
|
|
|
+import static org.hamcrest.Matchers.notNullValue;
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -753,18 +764,30 @@ public class ClusterServiceIT extends ESIntegTestCase {
|
|
|
|
|
|
class TaskExecutor implements ClusterStateTaskExecutor<Task> {
|
|
|
private AtomicInteger counter = new AtomicInteger();
|
|
|
+ private AtomicInteger batches = new AtomicInteger();
|
|
|
+ private AtomicInteger published = new AtomicInteger();
|
|
|
|
|
|
@Override
|
|
|
public BatchResult<Task> execute(ClusterState currentState, List<Task> tasks) throws Exception {
|
|
|
tasks.forEach(task -> task.execute());
|
|
|
counter.addAndGet(tasks.size());
|
|
|
- return BatchResult.<Task>builder().successes(tasks).build(currentState);
|
|
|
+ ClusterState maybeUpdatedClusterState = currentState;
|
|
|
+ if (randomBoolean()) {
|
|
|
+ maybeUpdatedClusterState = ClusterState.builder(currentState).build();
|
|
|
+ batches.incrementAndGet();
|
|
|
+ }
|
|
|
+ return BatchResult.<Task>builder().successes(tasks).build(maybeUpdatedClusterState);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean runOnlyOnMaster() {
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void clusterStatePublished(ClusterState newClusterState) {
|
|
|
+ published.incrementAndGet();
|
|
|
+ }
|
|
|
}
|
|
|
int numberOfThreads = randomIntBetween(2, 8);
|
|
|
int tasksSubmittedPerThread = randomIntBetween(1, 1024);
|
|
@@ -838,6 +861,7 @@ public class ClusterServiceIT extends ESIntegTestCase {
|
|
|
for (TaskExecutor executor : executors) {
|
|
|
if (counts.containsKey(executor)) {
|
|
|
assertEquals((int) counts.get(executor), executor.counter.get());
|
|
|
+ assertEquals(executor.batches.get(), executor.published.get());
|
|
|
}
|
|
|
}
|
|
|
|