Search in sources :

Example 31 with ShardId

use of org.elasticsearch.index.shard.ShardId in project elasticsearch by elastic.

the class OperationRoutingTests method testThatOnlyNodesSupportNodeIds.

public void testThatOnlyNodesSupportNodeIds() throws InterruptedException, IOException {
    TestThreadPool threadPool = null;
    ClusterService clusterService = null;
    try {
        threadPool = new TestThreadPool("testThatOnlyNodesSupportNodeIds");
        clusterService = ClusterServiceUtils.createClusterService(threadPool);
        final String indexName = "test";
        ClusterServiceUtils.setState(clusterService, ClusterStateCreationUtils.stateWithActivePrimary(indexName, true, randomInt(8)));
        final Index index = clusterService.state().metaData().index(indexName).getIndex();
        final List<ShardRouting> shards = clusterService.state().getRoutingNodes().assignedShards(new ShardId(index, 0));
        final int count = randomIntBetween(1, shards.size());
        int position = 0;
        final List<String> nodes = new ArrayList<>();
        final List<ShardRouting> expected = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            if (randomBoolean() && !shards.get(position).initializing()) {
                nodes.add(shards.get(position).currentNodeId());
                expected.add(shards.get(position));
                position++;
            } else {
                nodes.add("missing_" + i);
            }
        }
        if (expected.size() > 0) {
            final ShardIterator it = new OperationRouting(Settings.EMPTY, new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS)).getShards(clusterService.state(), indexName, 0, "_only_nodes:" + String.join(",", nodes));
            final List<ShardRouting> only = new ArrayList<>();
            ShardRouting shard;
            while ((shard = it.nextOrNull()) != null) {
                only.add(shard);
            }
            assertThat(new HashSet<>(only), equalTo(new HashSet<>(expected)));
        } else {
            final ClusterService cs = clusterService;
            final IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> new OperationRouting(Settings.EMPTY, new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS)).getShards(cs.state(), indexName, 0, "_only_nodes:" + String.join(",", nodes)));
            if (nodes.size() == 1) {
                assertThat(e, hasToString(containsString("no data nodes with criteria [" + String.join(",", nodes) + "] found for shard: [test][0]")));
            } else {
                assertThat(e, hasToString(containsString("no data nodes with criterion [" + String.join(",", nodes) + "] found for shard: [test][0]")));
            }
        }
    } finally {
        IOUtils.close(clusterService);
        terminate(threadPool);
    }
}
Also used : ClusterSettings(org.elasticsearch.common.settings.ClusterSettings) ArrayList(java.util.ArrayList) Index(org.elasticsearch.index.Index) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) HasToString.hasToString(org.hamcrest.object.HasToString.hasToString) TestThreadPool(org.elasticsearch.threadpool.TestThreadPool) ShardId(org.elasticsearch.index.shard.ShardId) ClusterService(org.elasticsearch.cluster.service.ClusterService) HashSet(java.util.HashSet)

Example 32 with ShardId

use of org.elasticsearch.index.shard.ShardId in project elasticsearch by elastic.

the class RoutingTableGenerator method genShardRoutingTable.

public IndexShardRoutingTable genShardRoutingTable(IndexMetaData indexMetaData, int shardId, ShardCounter counter) {
    final String index = indexMetaData.getIndex().getName();
    IndexShardRoutingTable.Builder builder = new IndexShardRoutingTable.Builder(new ShardId(index, "_na_", shardId));
    ShardRouting shardRouting = genShardRouting(index, shardId, true);
    counter.update(shardRouting);
    builder.addShard(shardRouting);
    for (int replicas = indexMetaData.getNumberOfReplicas(); replicas > 0; replicas--) {
        shardRouting = genShardRouting(index, shardId, false);
        counter.update(shardRouting);
        builder.addShard(shardRouting);
    }
    return builder.build();
}
Also used : ShardId(org.elasticsearch.index.shard.ShardId)

Example 33 with ShardId

use of org.elasticsearch.index.shard.ShardId in project elasticsearch by elastic.

the class RoutingTableTests method testDistinctNodes.

public void testDistinctNodes() {
    ShardId shardId = new ShardId(new Index("index", "uuid"), 0);
    ShardRouting routing1 = TestShardRouting.newShardRouting(shardId, "node1", randomBoolean(), ShardRoutingState.STARTED);
    ShardRouting routing2 = TestShardRouting.newShardRouting(shardId, "node2", randomBoolean(), ShardRoutingState.STARTED);
    ShardRouting routing3 = TestShardRouting.newShardRouting(shardId, "node1", randomBoolean(), ShardRoutingState.STARTED);
    ShardRouting routing4 = TestShardRouting.newShardRouting(shardId, "node3", "node2", randomBoolean(), ShardRoutingState.RELOCATING);
    assertTrue(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing1, routing2)));
    assertFalse(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing1, routing3)));
    assertFalse(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing1, routing2, routing3)));
    assertTrue(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing1, routing4)));
    assertFalse(IndexShardRoutingTable.Builder.distinctNodes(Arrays.asList(routing2, routing4)));
}
Also used : ShardId(org.elasticsearch.index.shard.ShardId) Index(org.elasticsearch.index.Index)

Example 34 with ShardId

use of org.elasticsearch.index.shard.ShardId in project elasticsearch by elastic.

the class ShardRoutingTests method testEqualsIgnoringVersion.

public void testEqualsIgnoringVersion() {
    ShardRouting routing = randomShardRouting("test", 0);
    ShardRouting otherRouting = routing;
    Integer[] changeIds = new Integer[] { 0, 1, 2, 3, 4, 5, 6 };
    for (int changeId : randomSubsetOf(randomIntBetween(1, changeIds.length), changeIds)) {
        boolean unchanged = false;
        switch(changeId) {
            case 0:
                // change index
                ShardId shardId = new ShardId(new Index("blubb", randomAsciiOfLength(10)), otherRouting.id());
                otherRouting = new ShardRouting(shardId, otherRouting.currentNodeId(), otherRouting.relocatingNodeId(), otherRouting.primary(), otherRouting.state(), otherRouting.recoverySource(), otherRouting.unassignedInfo(), otherRouting.allocationId(), otherRouting.getExpectedShardSize());
                break;
            case 1:
                // change shard id
                otherRouting = new ShardRouting(new ShardId(otherRouting.index(), otherRouting.id() + 1), otherRouting.currentNodeId(), otherRouting.relocatingNodeId(), otherRouting.primary(), otherRouting.state(), otherRouting.recoverySource(), otherRouting.unassignedInfo(), otherRouting.allocationId(), otherRouting.getExpectedShardSize());
                break;
            case 2:
                // change current node
                otherRouting = new ShardRouting(otherRouting.shardId(), otherRouting.currentNodeId() == null ? "1" : otherRouting.currentNodeId() + "_1", otherRouting.relocatingNodeId(), otherRouting.primary(), otherRouting.state(), otherRouting.recoverySource(), otherRouting.unassignedInfo(), otherRouting.allocationId(), otherRouting.getExpectedShardSize());
                break;
            case 3:
                // change relocating node
                otherRouting = new ShardRouting(otherRouting.shardId(), otherRouting.currentNodeId(), otherRouting.relocatingNodeId() == null ? "1" : otherRouting.relocatingNodeId() + "_1", otherRouting.primary(), otherRouting.state(), otherRouting.recoverySource(), otherRouting.unassignedInfo(), otherRouting.allocationId(), otherRouting.getExpectedShardSize());
                break;
            case 4:
                // change recovery source (only works for inactive primaries)
                if (otherRouting.active() || otherRouting.primary() == false) {
                    unchanged = true;
                } else {
                    otherRouting = new ShardRouting(otherRouting.shardId(), otherRouting.currentNodeId(), otherRouting.relocatingNodeId(), otherRouting.primary(), otherRouting.state(), new RecoverySource.SnapshotRecoverySource(new Snapshot("test", new SnapshotId("s1", UUIDs.randomBase64UUID())), Version.CURRENT, "test"), otherRouting.unassignedInfo(), otherRouting.allocationId(), otherRouting.getExpectedShardSize());
                }
                break;
            case 5:
                // change primary flag
                otherRouting = TestShardRouting.newShardRouting(otherRouting.getIndexName(), otherRouting.id(), otherRouting.currentNodeId(), otherRouting.relocatingNodeId(), otherRouting.primary() == false, otherRouting.state(), otherRouting.unassignedInfo());
                break;
            case 6:
                // change state
                ShardRoutingState newState;
                do {
                    newState = randomFrom(ShardRoutingState.values());
                } while (newState == otherRouting.state());
                UnassignedInfo unassignedInfo = otherRouting.unassignedInfo();
                if (unassignedInfo == null && (newState == ShardRoutingState.UNASSIGNED || newState == ShardRoutingState.INITIALIZING)) {
                    unassignedInfo = new UnassignedInfo(UnassignedInfo.Reason.INDEX_CREATED, "test");
                }
                otherRouting = TestShardRouting.newShardRouting(otherRouting.getIndexName(), otherRouting.id(), otherRouting.currentNodeId(), otherRouting.relocatingNodeId(), otherRouting.primary(), newState, unassignedInfo);
                break;
        }
        if (randomBoolean()) {
            // change unassigned info
            otherRouting = TestShardRouting.newShardRouting(otherRouting.getIndexName(), otherRouting.id(), otherRouting.currentNodeId(), otherRouting.relocatingNodeId(), otherRouting.primary(), otherRouting.state(), otherRouting.unassignedInfo() == null ? new UnassignedInfo(UnassignedInfo.Reason.INDEX_CREATED, "test") : new UnassignedInfo(UnassignedInfo.Reason.INDEX_CREATED, otherRouting.unassignedInfo().getMessage() + "_1"));
        }
        if (unchanged == false) {
            logger.debug("comparing\nthis  {} to\nother {}", routing, otherRouting);
            assertFalse("expected non-equality\nthis  " + routing + ",\nother " + otherRouting, routing.equalsIgnoringMetaData(otherRouting));
        }
    }
}
Also used : ShardId(org.elasticsearch.index.shard.ShardId) Snapshot(org.elasticsearch.snapshots.Snapshot) SnapshotId(org.elasticsearch.snapshots.SnapshotId) Index(org.elasticsearch.index.Index)

Example 35 with ShardId

use of org.elasticsearch.index.shard.ShardId in project elasticsearch by elastic.

the class AllocationIdTests method testReinitializing.

public void testReinitializing() {
    logger.info("-- build started shard");
    ShardRouting shard = ShardRouting.newUnassigned(new ShardId("test", "_na_", 0), true, StoreRecoverySource.EXISTING_STORE_INSTANCE, new UnassignedInfo(UnassignedInfo.Reason.INDEX_CREATED, null));
    shard = shard.initialize("node1", null, -1);
    shard = shard.moveToStarted();
    AllocationId allocationId = shard.allocationId();
    logger.info("-- reinitializing shard");
    shard = shard.reinitializePrimaryShard();
    assertThat(shard.allocationId().getId(), notNullValue());
    assertThat(shard.allocationId().getRelocationId(), nullValue());
    assertThat(shard.allocationId().getId(), equalTo(allocationId.getId()));
}
Also used : ShardId(org.elasticsearch.index.shard.ShardId)

Aggregations

ShardId (org.elasticsearch.index.shard.ShardId)294 ClusterState (org.elasticsearch.cluster.ClusterState)60 ShardRouting (org.elasticsearch.cluster.routing.ShardRouting)60 Index (org.elasticsearch.index.Index)59 IndexMetaData (org.elasticsearch.cluster.metadata.IndexMetaData)45 ArrayList (java.util.ArrayList)42 DiscoveryNode (org.elasticsearch.cluster.node.DiscoveryNode)41 IndexShardRoutingTable (org.elasticsearch.cluster.routing.IndexShardRoutingTable)37 HashMap (java.util.HashMap)36 IOException (java.io.IOException)31 UnassignedInfo (org.elasticsearch.cluster.routing.UnassignedInfo)30 Document (org.apache.lucene.document.Document)28 DirectoryReader (org.apache.lucene.index.DirectoryReader)28 Directory (org.apache.lucene.store.Directory)28 PlainActionFuture (org.elasticsearch.action.support.PlainActionFuture)28 Settings (org.elasticsearch.common.settings.Settings)27 Path (java.nio.file.Path)26 IndexWriter (org.apache.lucene.index.IndexWriter)24 ElasticsearchDirectoryReader (org.elasticsearch.common.lucene.index.ElasticsearchDirectoryReader)24 IndexShard (org.elasticsearch.index.shard.IndexShard)24