|  | @@ -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());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 |