diff --git a/src/test/java/org/elasticsearch/indices/store/SimpleDistributorTests.java b/src/test/java/org/elasticsearch/indices/store/SimpleDistributorTests.java index 4f320a3b038..b5dbc58138f 100644 --- a/src/test/java/org/elasticsearch/indices/store/SimpleDistributorTests.java +++ b/src/test/java/org/elasticsearch/indices/store/SimpleDistributorTests.java @@ -20,16 +20,15 @@ package org.elasticsearch.indices.store; import org.apache.lucene.store.Directory; -import org.elasticsearch.env.Environment; +import org.elasticsearch.env.NodeEnvironment; import org.elasticsearch.index.shard.service.InternalIndexShard; import org.elasticsearch.indices.IndicesService; import org.elasticsearch.test.ElasticsearchIntegrationTest; -import org.elasticsearch.test.ElasticsearchIntegrationTest.ClusterScope; -import org.elasticsearch.test.ElasticsearchIntegrationTest.Scope; import org.junit.Test; import java.io.File; import java.io.IOException; +import java.util.Set; import static org.elasticsearch.common.settings.ImmutableSettings.settingsBuilder; import static org.hamcrest.Matchers.*; @@ -37,16 +36,12 @@ import static org.hamcrest.Matchers.*; /** * */ -@ClusterScope(scope=Scope.TEST, numNodes = 1) public class SimpleDistributorTests extends ElasticsearchIntegrationTest { public final static String[] STORE_TYPES = {"fs", "simplefs", "niofs", "mmapfs"}; @Test public void testAvailableSpaceDetection() { - File dataRoot = cluster().getInstance(Environment.class).dataFiles()[0]; - cluster().stopRandomNode(); - cluster().startNode(settingsBuilder().putArray("path.data", new File(dataRoot, "data1").getAbsolutePath(), new File(dataRoot, "data2").getAbsolutePath())); for (String store : STORE_TYPES) { createIndexWithStoreType("test", store, StrictDistributor.class.getCanonicalName()); } @@ -54,50 +49,60 @@ public class SimpleDistributorTests extends ElasticsearchIntegrationTest { @Test public void testDirectoryToString() throws IOException { - File dataRoot = cluster().getInstance(Environment.class).dataFiles()[0]; - String dataPath1 = new File(dataRoot, "data1").getCanonicalPath(); - String dataPath2 = new File(dataRoot, "data2").getCanonicalPath(); - cluster().stopRandomNode(); - cluster().startNode(settingsBuilder().putArray("path.data", dataPath1, dataPath2)); - createIndexWithStoreType("test", "niofs", "least_used"); String storeString = getStoreDirectory("test", 0).toString(); logger.info(storeString); - assertThat(storeString, startsWith("store(least_used[rate_limited(niofs(" + dataPath1)); - assertThat(storeString, containsString("), rate_limited(niofs(" + dataPath2)); + File[] dataPaths = dataPaths(); + assertThat(storeString, startsWith("store(least_used[rate_limited(niofs(" + dataPaths[0].getAbsolutePath())); + if (dataPaths.length > 1) { + assertThat(storeString, containsString("), rate_limited(niofs(" + dataPaths[1].getAbsolutePath())); + } assertThat(storeString, endsWith(", type=MERGE, rate=20.0)])")); createIndexWithStoreType("test", "niofs", "random"); storeString = getStoreDirectory("test", 0).toString(); logger.info(storeString); - assertThat(storeString, startsWith("store(random[rate_limited(niofs(" + dataPath1)); - assertThat(storeString, containsString("), rate_limited(niofs(" + dataPath2)); + dataPaths = dataPaths(); + assertThat(storeString, startsWith("store(random[rate_limited(niofs(" + dataPaths[0].getAbsolutePath())); + if (dataPaths.length > 1) { + assertThat(storeString, containsString("), rate_limited(niofs(" + dataPaths[1].getAbsolutePath())); + } assertThat(storeString, endsWith(", type=MERGE, rate=20.0)])")); createIndexWithStoreType("test", "mmapfs", "least_used"); storeString = getStoreDirectory("test", 0).toString(); logger.info(storeString); - assertThat(storeString, startsWith("store(least_used[rate_limited(mmapfs(" + dataPath1)); - assertThat(storeString, containsString("), rate_limited(mmapfs(" + dataPath2)); + dataPaths = dataPaths(); + assertThat(storeString, startsWith("store(least_used[rate_limited(mmapfs(" + dataPaths[0].getAbsolutePath())); + if (dataPaths.length > 1) { + assertThat(storeString, containsString("), rate_limited(mmapfs(" + dataPaths[1].getAbsolutePath())); + } assertThat(storeString, endsWith(", type=MERGE, rate=20.0)])")); createIndexWithStoreType("test", "simplefs", "least_used"); storeString = getStoreDirectory("test", 0).toString(); logger.info(storeString); - assertThat(storeString, startsWith("store(least_used[rate_limited(simplefs(" + dataPath1)); - assertThat(storeString, containsString("), rate_limited(simplefs(" + dataPath2)); + dataPaths = dataPaths(); + assertThat(storeString, startsWith("store(least_used[rate_limited(simplefs(" + dataPaths[0].getAbsolutePath())); + if (dataPaths.length > 1) { + assertThat(storeString, containsString("), rate_limited(simplefs(" + dataPaths[1].getAbsolutePath())); + } assertThat(storeString, endsWith(", type=MERGE, rate=20.0)])")); createIndexWithStoreType("test", "memory", "least_used"); storeString = getStoreDirectory("test", 0).toString(); logger.info(storeString); + dataPaths = dataPaths(); assertThat(storeString, equalTo("store(least_used[byte_buffer])")); createIndexWithoutRateLimitingStoreType("test", "niofs", "least_used"); storeString = getStoreDirectory("test", 0).toString(); logger.info(storeString); - assertThat(storeString, startsWith("store(least_used[niofs(" + dataPath1)); - assertThat(storeString, containsString("), niofs(" + dataPath2)); + dataPaths = dataPaths(); + assertThat(storeString, startsWith("store(least_used[niofs(" + dataPaths[0].getAbsolutePath())); + if (dataPaths.length > 1) { + assertThat(storeString, containsString("), niofs(" + dataPaths[1].getAbsolutePath())); + } assertThat(storeString, endsWith(")])")); } @@ -128,10 +133,19 @@ public class SimpleDistributorTests extends ElasticsearchIntegrationTest { assertThat(client().admin().cluster().prepareHealth("test").setWaitForGreenStatus().execute().actionGet().isTimedOut(), equalTo(false)); } + + private File[] dataPaths() { + Set nodes = cluster().nodesInclude("test"); + assertThat(nodes.isEmpty(), equalTo(false)); + NodeEnvironment env = cluster().getInstance(NodeEnvironment.class, nodes.iterator().next()); + return env.nodeDataLocations(); + } + private Directory getStoreDirectory(String index, int shardId) { - IndicesService indicesService = cluster().getInstance(IndicesService.class); + Set nodes = cluster().nodesInclude("test"); + assertThat(nodes.isEmpty(), equalTo(false)); + IndicesService indicesService = cluster().getInstance(IndicesService.class, nodes.iterator().next()); InternalIndexShard indexShard = (InternalIndexShard) (indicesService.indexService(index).shard(shardId)); return indexShard.store().directory(); } - } diff --git a/src/test/java/org/elasticsearch/test/TestCluster.java b/src/test/java/org/elasticsearch/test/TestCluster.java index 3fbefd816d5..48ec7f2838d 100644 --- a/src/test/java/org/elasticsearch/test/TestCluster.java +++ b/src/test/java/org/elasticsearch/test/TestCluster.java @@ -164,6 +164,16 @@ public final class TestCluster implements Iterable { } else { builder.put(Transport.TransportSettings.TRANSPORT_TCP_COMPRESS, random.nextInt(10) == 0); } + // randomize (multi/single) data path, special case for 0, don't set it at all... + int numOfDataPaths = random.nextInt(5); + if (numOfDataPaths > 0) { + StringBuilder dataPath = new StringBuilder(); + for (int i = 0; i < numOfDataPaths; i++) { + dataPath.append("data/d").append(i).append(','); + } + builder.put("path.data", dataPath.toString()); + } + this.defaultSettings = builder.build(); this.nodeSettingsSource = nodeSettingsSource; }