Adjust load SplitIndexIT#testSplitIndexPrimaryTerm (#42477)

SplitIndexIT#testSplitIndexPrimaryTerm sometimes timeout due to
relocating many shards. This change adjusts loads and increases
the timeout.
This commit is contained in:
Nhat Nguyen 2019-05-24 15:42:59 -04:00
parent 02739d038c
commit 74d771d8f6

View File

@ -45,8 +45,8 @@ import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.cluster.routing.Murmur3HashFunction; import org.elasticsearch.cluster.routing.Murmur3HashFunction;
import org.elasticsearch.cluster.routing.ShardRouting; import org.elasticsearch.cluster.routing.ShardRouting;
import org.elasticsearch.cluster.routing.allocation.decider.EnableAllocationDecider; import org.elasticsearch.cluster.routing.allocation.decider.EnableAllocationDecider;
import org.elasticsearch.common.collect.ImmutableOpenMap;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.Index; import org.elasticsearch.index.Index;
import org.elasticsearch.index.IndexService; import org.elasticsearch.index.IndexService;
@ -62,7 +62,6 @@ import java.io.IOException;
import java.io.UncheckedIOException; import java.io.UncheckedIOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.stream.IntStream; import java.util.stream.IntStream;
@ -75,7 +74,6 @@ import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitC
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoFailures; import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoFailures;
import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
public class SplitIndexIT extends ESIntegTestCase { public class SplitIndexIT extends ESIntegTestCase {
@ -184,9 +182,6 @@ public class SplitIndexIT extends ESIntegTestCase {
} }
} }
ImmutableOpenMap<String, DiscoveryNode> dataNodes = client().admin().cluster().prepareState().get().getState().nodes()
.getDataNodes();
assertTrue("at least 2 nodes but was: " + dataNodes.size(), dataNodes.size() >= 2);
ensureYellow(); ensureYellow();
client().admin().indices().prepareUpdateSettings("source") client().admin().indices().prepareUpdateSettings("source")
.setSettings(Settings.builder() .setSettings(Settings.builder()
@ -287,19 +282,13 @@ public class SplitIndexIT extends ESIntegTestCase {
} }
public void testSplitIndexPrimaryTerm() throws Exception { public void testSplitIndexPrimaryTerm() throws Exception {
final List<Integer> factors = Arrays.asList(1, 2, 4, 8); int numberOfTargetShards = randomIntBetween(2, 20);
final List<Integer> numberOfShardsFactors = randomSubsetOf(scaledRandomIntBetween(1, factors.size()), factors); int numberOfShards = randomValueOtherThanMany(n -> numberOfTargetShards % n != 0, () -> between(1, numberOfTargetShards - 1));
final int numberOfShards = randomSubsetOf(numberOfShardsFactors).stream().reduce(1, (x, y) -> x * y);
final int numberOfTargetShards = numberOfShardsFactors.stream().reduce(2, (x, y) -> x * y);
internalCluster().ensureAtLeastNumDataNodes(2); internalCluster().ensureAtLeastNumDataNodes(2);
prepareCreate("source").setSettings(Settings.builder().put(indexSettings()) prepareCreate("source").setSettings(Settings.builder().put(indexSettings())
.put("number_of_shards", numberOfShards) .put("number_of_shards", numberOfShards)
.put("index.number_of_routing_shards", numberOfTargetShards)).get(); .put("index.number_of_routing_shards", numberOfTargetShards)).get();
ensureGreen(TimeValue.timeValueSeconds(120)); // needs more than the default to allocate many shards
final ImmutableOpenMap<String, DiscoveryNode> dataNodes =
client().admin().cluster().prepareState().get().getState().nodes().getDataNodes();
assertThat(dataNodes.size(), greaterThanOrEqualTo(2));
ensureYellow();
// fail random primary shards to force primary terms to increase // fail random primary shards to force primary terms to increase
final Index source = resolveIndex("source"); final Index source = resolveIndex("source");
@ -352,7 +341,7 @@ public class SplitIndexIT extends ESIntegTestCase {
.setResizeType(ResizeType.SPLIT) .setResizeType(ResizeType.SPLIT)
.setSettings(splitSettings).get()); .setSettings(splitSettings).get());
ensureGreen(); ensureGreen(TimeValue.timeValueSeconds(120)); // needs more than the default to relocate many shards
final IndexMetaData aftersplitIndexMetaData = indexMetaData(client(), "target"); final IndexMetaData aftersplitIndexMetaData = indexMetaData(client(), "target");
for (int shardId = 0; shardId < numberOfTargetShards; shardId++) { for (int shardId = 0; shardId < numberOfTargetShards; shardId++) {
@ -365,7 +354,7 @@ public class SplitIndexIT extends ESIntegTestCase {
return clusterStateResponse.getState().metaData().index(index); return clusterStateResponse.getState().metaData().index(index);
} }
public void testCreateSplitIndex() { public void testCreateSplitIndex() throws Exception {
internalCluster().ensureAtLeastNumDataNodes(2); internalCluster().ensureAtLeastNumDataNodes(2);
Version version = VersionUtils.randomVersionBetween(random(), Version.V_6_0_0_rc2, Version.CURRENT); Version version = VersionUtils.randomVersionBetween(random(), Version.V_6_0_0_rc2, Version.CURRENT);
prepareCreate("source").setSettings(Settings.builder().put(indexSettings()) prepareCreate("source").setSettings(Settings.builder().put(indexSettings())
@ -377,9 +366,6 @@ public class SplitIndexIT extends ESIntegTestCase {
client().prepareIndex("source", "type") client().prepareIndex("source", "type")
.setSource("{\"foo\" : \"bar\", \"i\" : " + i + "}", XContentType.JSON).get(); .setSource("{\"foo\" : \"bar\", \"i\" : " + i + "}", XContentType.JSON).get();
} }
ImmutableOpenMap<String, DiscoveryNode> dataNodes =
client().admin().cluster().prepareState().get().getState().nodes().getDataNodes();
assertTrue("at least 2 nodes but was: " + dataNodes.size(), dataNodes.size() >= 2);
// ensure all shards are allocated otherwise the ensure green below might not succeed since we require the merge node // ensure all shards are allocated otherwise the ensure green below might not succeed since we require the merge node
// if we change the setting too quickly we will end up with one replica unassigned which can't be assigned anymore due // if we change the setting too quickly we will end up with one replica unassigned which can't be assigned anymore due
// to the require._name below. // to the require._name below.
@ -485,9 +471,6 @@ public class SplitIndexIT extends ESIntegTestCase {
client().prepareIndex("source", "type", Integer.toString(i)) client().prepareIndex("source", "type", Integer.toString(i))
.setSource("{\"foo\" : \"bar\", \"id\" : " + i + "}", XContentType.JSON).get(); .setSource("{\"foo\" : \"bar\", \"id\" : " + i + "}", XContentType.JSON).get();
} }
ImmutableOpenMap<String, DiscoveryNode> dataNodes = client().admin().cluster().prepareState().get().getState().nodes()
.getDataNodes();
assertTrue("at least 2 nodes but was: " + dataNodes.size(), dataNodes.size() >= 2);
// ensure all shards are allocated otherwise the ensure green below might not succeed since we require the merge node // ensure all shards are allocated otherwise the ensure green below might not succeed since we require the merge node
// if we change the setting too quickly we will end up with one replica unassigned which can't be assigned anymore due // if we change the setting too quickly we will end up with one replica unassigned which can't be assigned anymore due
// to the require._name below. // to the require._name below.