add the ability to control the number of shards and replicas in the restart stress test, also add a step to verify version numbers
This commit is contained in:
parent
af419cc636
commit
64a89eb0e4
|
@ -24,6 +24,9 @@ import org.elasticsearch.action.admin.indices.status.IndexShardStatus;
|
||||||
import org.elasticsearch.action.admin.indices.status.IndicesStatusResponse;
|
import org.elasticsearch.action.admin.indices.status.IndicesStatusResponse;
|
||||||
import org.elasticsearch.action.admin.indices.status.ShardStatus;
|
import org.elasticsearch.action.admin.indices.status.ShardStatus;
|
||||||
import org.elasticsearch.action.count.CountResponse;
|
import org.elasticsearch.action.count.CountResponse;
|
||||||
|
import org.elasticsearch.action.get.GetResponse;
|
||||||
|
import org.elasticsearch.action.search.SearchResponse;
|
||||||
|
import org.elasticsearch.action.search.SearchType;
|
||||||
import org.elasticsearch.common.UUID;
|
import org.elasticsearch.common.UUID;
|
||||||
import org.elasticsearch.common.io.FileSystemUtils;
|
import org.elasticsearch.common.io.FileSystemUtils;
|
||||||
import org.elasticsearch.common.logging.ESLogger;
|
import org.elasticsearch.common.logging.ESLogger;
|
||||||
|
@ -38,11 +41,15 @@ import org.elasticsearch.env.NodeEnvironment;
|
||||||
import org.elasticsearch.node.Node;
|
import org.elasticsearch.node.Node;
|
||||||
import org.elasticsearch.node.NodeBuilder;
|
import org.elasticsearch.node.NodeBuilder;
|
||||||
import org.elasticsearch.node.internal.InternalNode;
|
import org.elasticsearch.node.internal.InternalNode;
|
||||||
|
import org.elasticsearch.search.SearchHit;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
|
import static org.elasticsearch.common.settings.ImmutableSettings.*;
|
||||||
import static org.elasticsearch.index.query.xcontent.QueryBuilders.*;
|
import static org.elasticsearch.index.query.xcontent.QueryBuilders.*;
|
||||||
|
import static org.hamcrest.MatcherAssert.*;
|
||||||
|
import static org.hamcrest.Matchers.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author kimchy (shay.banon)
|
* @author kimchy (shay.banon)
|
||||||
|
@ -51,6 +58,8 @@ public class RollingRestartStressTest {
|
||||||
|
|
||||||
private final ESLogger logger = Loggers.getLogger(getClass());
|
private final ESLogger logger = Loggers.getLogger(getClass());
|
||||||
|
|
||||||
|
private int numberOfShards = 5;
|
||||||
|
private int numberOfReplicas = 1;
|
||||||
private int numberOfNodes = 4;
|
private int numberOfNodes = 4;
|
||||||
|
|
||||||
private int textTokens = 150;
|
private int textTokens = 150;
|
||||||
|
@ -78,6 +87,16 @@ public class RollingRestartStressTest {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RollingRestartStressTest numberOfShards(int numberOfShards) {
|
||||||
|
this.numberOfShards = numberOfShards;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RollingRestartStressTest numberOfReplicas(int numberOfReplicas) {
|
||||||
|
this.numberOfReplicas = numberOfReplicas;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public RollingRestartStressTest initialNumberOfDocs(long initialNumberOfDocs) {
|
public RollingRestartStressTest initialNumberOfDocs(long initialNumberOfDocs) {
|
||||||
this.initialNumberOfDocs = initialNumberOfDocs;
|
this.initialNumberOfDocs = initialNumberOfDocs;
|
||||||
return this;
|
return this;
|
||||||
|
@ -125,6 +144,11 @@ public class RollingRestartStressTest {
|
||||||
}
|
}
|
||||||
client = NodeBuilder.nodeBuilder().settings(settings).client(true).node();
|
client = NodeBuilder.nodeBuilder().settings(settings).client(true).node();
|
||||||
|
|
||||||
|
client.client().admin().indices().prepareCreate("test").setSettings(settingsBuilder()
|
||||||
|
.put("index.number_of_shards", numberOfShards)
|
||||||
|
.put("index.number_of_replicas", numberOfReplicas)
|
||||||
|
).execute().actionGet();
|
||||||
|
|
||||||
logger.info("********** [START] INDEXING INITIAL DOCS");
|
logger.info("********** [START] INDEXING INITIAL DOCS");
|
||||||
for (long i = 0; i < initialNumberOfDocs; i++) {
|
for (long i = 0; i < initialNumberOfDocs; i++) {
|
||||||
indexDoc();
|
indexDoc();
|
||||||
|
@ -223,6 +247,37 @@ public class RollingRestartStressTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// scan all the docs, verify all have the same version based on the number of replicas
|
||||||
|
SearchResponse searchResponse = client.client().prepareSearch()
|
||||||
|
.setSearchType(SearchType.SCAN)
|
||||||
|
.setQuery(matchAllQuery())
|
||||||
|
.setSize(50)
|
||||||
|
.setScroll(TimeValue.timeValueMinutes(2))
|
||||||
|
.execute().actionGet();
|
||||||
|
logger.info("Verifying versions for {} hits...", searchResponse.hits().totalHits());
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
searchResponse = client.client().prepareSearchScroll(searchResponse.scrollId()).setScroll(TimeValue.timeValueMinutes(2)).execute().actionGet();
|
||||||
|
assertThat(searchResponse.failedShards(), equalTo(0));
|
||||||
|
for (SearchHit hit : searchResponse.hits()) {
|
||||||
|
long version = -1;
|
||||||
|
for (int i = 0; i < (numberOfReplicas + 1); i++) {
|
||||||
|
GetResponse getResponse = client.client().prepareGet(hit.index(), hit.type(), hit.id()).execute().actionGet();
|
||||||
|
if (version == -1) {
|
||||||
|
version = getResponse.version();
|
||||||
|
} else {
|
||||||
|
if (version != getResponse.version()) {
|
||||||
|
logger.warn("Doc {} has different version numbers {} and {}", hit.id(), version, getResponse.version());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (searchResponse.hits().hits().length == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logger.info("Done verifying versions");
|
||||||
|
|
||||||
client.close();
|
client.close();
|
||||||
for (Node node : nodes) {
|
for (Node node : nodes) {
|
||||||
node.close();
|
node.close();
|
||||||
|
@ -280,7 +335,7 @@ public class RollingRestartStressTest {
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
System.setProperty("es.logger.prefix", "");
|
System.setProperty("es.logger.prefix", "");
|
||||||
|
|
||||||
Settings settings = ImmutableSettings.settingsBuilder()
|
Settings settings = settingsBuilder()
|
||||||
.put("index.shard.check_index", true)
|
.put("index.shard.check_index", true)
|
||||||
.put("gateway.type", "none")
|
.put("gateway.type", "none")
|
||||||
.build();
|
.build();
|
||||||
|
@ -288,13 +343,15 @@ public class RollingRestartStressTest {
|
||||||
RollingRestartStressTest test = new RollingRestartStressTest()
|
RollingRestartStressTest test = new RollingRestartStressTest()
|
||||||
.settings(settings)
|
.settings(settings)
|
||||||
.numberOfNodes(4)
|
.numberOfNodes(4)
|
||||||
|
.numberOfShards(5)
|
||||||
|
.numberOfReplicas(1)
|
||||||
.initialNumberOfDocs(1000)
|
.initialNumberOfDocs(1000)
|
||||||
.textTokens(150)
|
.textTokens(150)
|
||||||
.numberOfFields(10)
|
.numberOfFields(10)
|
||||||
.cleanNodeData(true)
|
.cleanNodeData(false)
|
||||||
.indexers(5)
|
.indexers(5)
|
||||||
.indexerThrottle(TimeValue.timeValueMillis(50))
|
.indexerThrottle(TimeValue.timeValueMillis(50))
|
||||||
.period(TimeValue.timeValueMinutes(10));
|
.period(TimeValue.timeValueMinutes(1));
|
||||||
|
|
||||||
test.run();
|
test.run();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue