From ef94a5863ab886f9dd21786354ffa6e2a05b4b7b Mon Sep 17 00:00:00 2001 From: Armin Braun Date: Fri, 24 Jan 2020 20:33:45 +0100 Subject: [PATCH] Fix RareClusterStateIT Cancelling Publication too Early (#51429) (#51434) Wait for the cluster to have settled down and have the same accepted version on all nodes before executing and cancelling request so that a slow CS accept on one node doesn't make it fall behind and then get sent the full CS because of the diff-version mismatch, breaking the mechanics of this test. Closes #51308 --- .../coordination/RareClusterStateIT.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/cluster/coordination/RareClusterStateIT.java b/server/src/test/java/org/elasticsearch/cluster/coordination/RareClusterStateIT.java index 5867d6b710e..f5211213755 100644 --- a/server/src/test/java/org/elasticsearch/cluster/coordination/RareClusterStateIT.java +++ b/server/src/test/java/org/elasticsearch/cluster/coordination/RareClusterStateIT.java @@ -55,12 +55,14 @@ import org.elasticsearch.transport.TransportSettings; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import java.util.stream.StreamSupport; import static java.util.Collections.emptyMap; import static java.util.Collections.emptySet; import static org.elasticsearch.action.DocWriteResponse.Result.CREATED; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount; +import static org.hamcrest.Matchers.arrayWithSize; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasSize; @@ -142,7 +144,13 @@ public class RareClusterStateIT extends ESIntegTestCase { // Wait for no publication in progress to not accidentally cancel a publication different from the one triggered by the given // request. assertBusy( - () -> assertFalse(((Coordinator) internalCluster().getCurrentMasterNodeInstance(Discovery.class)).publicationInProgress())); + () -> { + assertFalse(((Coordinator) internalCluster().getCurrentMasterNodeInstance(Discovery.class)).publicationInProgress()); + assertThat(StreamSupport.stream( + internalCluster().getInstances(Discovery.class).spliterator(), false) + .map(coordinator -> ((Coordinator) coordinator).getLastAcceptedState().version()) + .distinct().toArray(), arrayWithSize(1)); + }); ActionFuture future = req.execute(); assertBusy( () -> assertTrue(((Coordinator)internalCluster().getCurrentMasterNodeInstance(Discovery.class)).cancelCommittedPublication())); @@ -268,11 +276,9 @@ public class RareClusterStateIT extends ESIntegTestCase { // Now make sure the indexing request finishes successfully disruption.stopDisrupting(); - assertBusy(() -> { - assertTrue(putMappingResponse.get(10, TimeUnit.SECONDS).isAcknowledged()); - assertThat(docIndexResponse.get(10, TimeUnit.SECONDS), instanceOf(IndexResponse.class)); - assertEquals(1, docIndexResponse.get(10, TimeUnit.SECONDS).getShardInfo().getTotal()); - }); + assertTrue(putMappingResponse.get(10, TimeUnit.SECONDS).isAcknowledged()); + assertThat(docIndexResponse.get(10, TimeUnit.SECONDS), instanceOf(IndexResponse.class)); + assertEquals(1, docIndexResponse.get(10, TimeUnit.SECONDS).getShardInfo().getTotal()); } public void testDelayedMappingPropagationOnReplica() throws Exception { @@ -373,11 +379,9 @@ public class RareClusterStateIT extends ESIntegTestCase { // Now make sure the indexing request finishes successfully disruption.stopDisrupting(); - assertBusy(() -> { - assertTrue(putMappingResponse.get(10, TimeUnit.SECONDS).isAcknowledged()); - assertThat(docIndexResponse.get(10, TimeUnit.SECONDS), instanceOf(IndexResponse.class)); - assertEquals(2, docIndexResponse.get(10, TimeUnit.SECONDS).getShardInfo().getTotal()); // both shards should have succeeded - }); + assertTrue(putMappingResponse.get(10, TimeUnit.SECONDS).isAcknowledged()); + assertThat(docIndexResponse.get(10, TimeUnit.SECONDS), instanceOf(IndexResponse.class)); + assertEquals(2, docIndexResponse.get(10, TimeUnit.SECONDS).getShardInfo().getTotal()); // both shards should have succeeded assertThat(dynamicMappingsFut.get(10, TimeUnit.SECONDS).getResult(), equalTo(CREATED)); }