Search in sources :

Example 36 with Slice

use of org.apache.solr.common.cloud.Slice in project lucene-solr by apache.

the class ReplaceNodeCmd method getReplicasOfNode.

static List<ZkNodeProps> getReplicasOfNode(String source, ClusterState state) {
    List<ZkNodeProps> sourceReplicas = new ArrayList<>();
    for (Map.Entry<String, DocCollection> e : state.getCollectionsMap().entrySet()) {
        for (Slice slice : e.getValue().getSlices()) {
            for (Replica replica : slice.getReplicas()) {
                if (source.equals(replica.getNodeName())) {
                    ZkNodeProps props = new ZkNodeProps(COLLECTION_PROP, e.getKey(), SHARD_ID_PROP, slice.getName(), ZkStateReader.CORE_NAME_PROP, replica.getCoreName(), ZkStateReader.REPLICA_PROP, replica.getName(), ZkStateReader.REPLICA_TYPE, replica.getType().name(), CoreAdminParams.NODE, source);
                    sourceReplicas.add(props);
                }
            }
        }
    }
    return sourceReplicas;
}
Also used : Slice(org.apache.solr.common.cloud.Slice) ZkNodeProps(org.apache.solr.common.cloud.ZkNodeProps) ArrayList(java.util.ArrayList) DocCollection(org.apache.solr.common.cloud.DocCollection) Map(java.util.Map) Replica(org.apache.solr.common.cloud.Replica)

Example 37 with Slice

use of org.apache.solr.common.cloud.Slice in project lucene-solr by apache.

the class OverseerCollectionMessageHandler method waitForNewShard.

void waitForNewShard(String collectionName, String sliceName) throws KeeperException, InterruptedException {
    log.debug("Waiting for slice {} of collection {} to be available", sliceName, collectionName);
    RTimer timer = new RTimer();
    int retryCount = 320;
    while (retryCount-- > 0) {
        DocCollection collection = zkStateReader.getClusterState().getCollection(collectionName);
        if (collection == null) {
            throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to find collection: " + collectionName + " in clusterstate");
        }
        Slice slice = collection.getSlice(sliceName);
        if (slice != null) {
            log.debug("Waited for {}ms for slice {} of collection {} to be available", timer.getTime(), sliceName, collectionName);
            return;
        }
        Thread.sleep(1000);
    }
    throw new SolrException(ErrorCode.SERVER_ERROR, "Could not find new slice " + sliceName + " in collection " + collectionName + " even after waiting for " + timer.getTime() + "ms");
}
Also used : Slice(org.apache.solr.common.cloud.Slice) DocCollection(org.apache.solr.common.cloud.DocCollection) RTimer(org.apache.solr.util.RTimer) RemoteSolrException(org.apache.solr.client.solrj.impl.HttpSolrClient.RemoteSolrException) SolrException(org.apache.solr.common.SolrException)

Example 38 with Slice

use of org.apache.solr.common.cloud.Slice in project lucene-solr by apache.

the class CollectionMutator method createShard.

public ZkWriteCommand createShard(final ClusterState clusterState, ZkNodeProps message) {
    String collectionName = message.getStr(ZkStateReader.COLLECTION_PROP);
    if (!checkCollectionKeyExistence(message))
        return ZkStateWriter.NO_OP;
    String shardId = message.getStr(ZkStateReader.SHARD_ID_PROP);
    DocCollection collection = clusterState.getCollection(collectionName);
    Slice slice = collection.getSlice(shardId);
    if (slice == null) {
        Map<String, Replica> replicas = Collections.EMPTY_MAP;
        Map<String, Object> sliceProps = new HashMap<>();
        String shardRange = message.getStr(ZkStateReader.SHARD_RANGE_PROP);
        String shardState = message.getStr(ZkStateReader.SHARD_STATE_PROP);
        String shardParent = message.getStr(ZkStateReader.SHARD_PARENT_PROP);
        String shardParentZkSession = message.getStr("shard_parent_zk_session");
        String shardParentNode = message.getStr("shard_parent_node");
        sliceProps.put(Slice.RANGE, shardRange);
        sliceProps.put(ZkStateReader.STATE_PROP, shardState);
        if (shardParent != null) {
            sliceProps.put(Slice.PARENT, shardParent);
        }
        if (shardParentZkSession != null) {
            sliceProps.put("shard_parent_zk_session", shardParentZkSession);
        }
        if (shardParentNode != null) {
            sliceProps.put("shard_parent_node", shardParentNode);
        }
        collection = updateSlice(collectionName, collection, new Slice(shardId, replicas, sliceProps));
        return new ZkWriteCommand(collectionName, collection);
    } else {
        log.error("Unable to create Shard: " + shardId + " because it already exists in collection: " + collectionName);
        return ZkStateWriter.NO_OP;
    }
}
Also used : HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Slice(org.apache.solr.common.cloud.Slice) DocCollection(org.apache.solr.common.cloud.DocCollection) Replica(org.apache.solr.common.cloud.Replica)

Example 39 with Slice

use of org.apache.solr.common.cloud.Slice in project lucene-solr by apache.

the class CollectionMutator method updateSlice.

public static DocCollection updateSlice(String collectionName, DocCollection collection, Slice slice) {
    DocCollection newCollection = null;
    Map<String, Slice> slices;
    if (collection == null) {
        //  when updateSlice is called on a collection that doesn't exist, it's currently when a core is publishing itself
        // without explicitly creating a collection.  In this current case, we assume custom sharding with an "implicit" router.
        slices = new LinkedHashMap<>(1);
        slices.put(slice.getName(), slice);
        Map<String, Object> props = new HashMap<>(1);
        props.put(DocCollection.DOC_ROUTER, Utils.makeMap(NAME, ImplicitDocRouter.NAME));
        newCollection = new DocCollection(collectionName, slices, props, new ImplicitDocRouter());
    } else {
        // make a shallow copy
        slices = new LinkedHashMap<>(collection.getSlicesMap());
        slices.put(slice.getName(), slice);
        newCollection = collection.copyWithSlices(slices);
    }
    return newCollection;
}
Also used : HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ImplicitDocRouter(org.apache.solr.common.cloud.ImplicitDocRouter) Slice(org.apache.solr.common.cloud.Slice) DocCollection(org.apache.solr.common.cloud.DocCollection)

Example 40 with Slice

use of org.apache.solr.common.cloud.Slice in project lucene-solr by apache.

the class HttpShardHandler method addSlices.

private void addSlices(Map<String, Slice> target, ClusterState state, SolrParams params, String collectionName, String shardKeys, boolean multiCollection) {
    DocCollection coll = state.getCollection(collectionName);
    Collection<Slice> slices = coll.getRouter().getSearchSlices(shardKeys, params, coll);
    ClientUtils.addSlices(target, collectionName, slices, multiCollection);
}
Also used : Slice(org.apache.solr.common.cloud.Slice) DocCollection(org.apache.solr.common.cloud.DocCollection)

Aggregations

Slice (org.apache.solr.common.cloud.Slice)221 Replica (org.apache.solr.common.cloud.Replica)143 DocCollection (org.apache.solr.common.cloud.DocCollection)121 ClusterState (org.apache.solr.common.cloud.ClusterState)82 ArrayList (java.util.ArrayList)79 HashMap (java.util.HashMap)68 ZkStateReader (org.apache.solr.common.cloud.ZkStateReader)51 SolrException (org.apache.solr.common.SolrException)49 Map (java.util.Map)47 Test (org.junit.Test)37 HttpSolrClient (org.apache.solr.client.solrj.impl.HttpSolrClient)28 CloudSolrClient (org.apache.solr.client.solrj.impl.CloudSolrClient)25 HashSet (java.util.HashSet)24 SolrQuery (org.apache.solr.client.solrj.SolrQuery)24 IOException (java.io.IOException)23 NamedList (org.apache.solr.common.util.NamedList)23 List (java.util.List)22 ModifiableSolrParams (org.apache.solr.common.params.ModifiableSolrParams)22 DocRouter (org.apache.solr.common.cloud.DocRouter)20 ZkCoreNodeProps (org.apache.solr.common.cloud.ZkCoreNodeProps)20