Search in sources :

Example 11 with Slice

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

the class AssignTest method testAssignNode.

@Test
public void testAssignNode() throws Exception {
    String cname = "collection1";
    Map<String, DocCollection> collectionStates = new HashMap<>();
    Map<String, Slice> slices = new HashMap<>();
    Map<String, Replica> replicas = new HashMap<>();
    ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, "state", ZkStateReader.STATE_PROP, Replica.State.ACTIVE.toString(), ZkStateReader.BASE_URL_PROP, "0.0.0.0", ZkStateReader.CORE_NAME_PROP, "core1", ZkStateReader.ROLES_PROP, null, ZkStateReader.NODE_NAME_PROP, "0_0_0_0", ZkStateReader.SHARD_ID_PROP, "shard1", ZkStateReader.COLLECTION_PROP, cname, ZkStateReader.NUM_SHARDS_PROP, "1", ZkStateReader.CORE_NODE_NAME_PROP, "core_node1");
    Replica replica = new Replica("core_node1", m.getProperties());
    replicas.put("core_node1", replica);
    Slice slice = new Slice("slice1", replicas, new HashMap<String, Object>(0));
    slices.put("slice1", slice);
    DocRouter router = new ImplicitDocRouter();
    DocCollection docCollection = new DocCollection(cname, slices, new HashMap<String, Object>(0), router);
    collectionStates.put(cname, docCollection);
    Set<String> liveNodes = new HashSet<>();
    ClusterState state = new ClusterState(-1, liveNodes, collectionStates);
    String nodeName = Assign.assignNode(state.getCollection("collection1"));
    assertEquals("core_node2", nodeName);
}
Also used : ClusterState(org.apache.solr.common.cloud.ClusterState) HashMap(java.util.HashMap) ImplicitDocRouter(org.apache.solr.common.cloud.ImplicitDocRouter) ZkNodeProps(org.apache.solr.common.cloud.ZkNodeProps) Replica(org.apache.solr.common.cloud.Replica) Slice(org.apache.solr.common.cloud.Slice) ImplicitDocRouter(org.apache.solr.common.cloud.ImplicitDocRouter) DocRouter(org.apache.solr.common.cloud.DocRouter) DocCollection(org.apache.solr.common.cloud.DocCollection) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 12 with Slice

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

the class BasicDistributedZkTest method testANewCollectionInOneInstanceWithManualShardAssignement.

private void testANewCollectionInOneInstanceWithManualShardAssignement() throws Exception {
    log.info("### STARTING testANewCollectionInOneInstanceWithManualShardAssignement");
    System.clearProperty("numShards");
    List<SolrClient> collectionClients = new ArrayList<>();
    SolrClient client = clients.get(0);
    final String baseUrl = ((HttpSolrClient) client).getBaseURL().substring(0, ((HttpSolrClient) client).getBaseURL().length() - DEFAULT_COLLECTION.length() - 1);
    createSolrCore(oneInstanceCollection2, collectionClients, baseUrl, 1, "slice1");
    createSolrCore(oneInstanceCollection2, collectionClients, baseUrl, 2, "slice2");
    createSolrCore(oneInstanceCollection2, collectionClients, baseUrl, 3, "slice2");
    createSolrCore(oneInstanceCollection2, collectionClients, baseUrl, 4, "slice1");
    while (pending != null && pending.size() > 0) {
        Future<Object> future = completionService.take();
        pending.remove(future);
    }
    SolrClient client1 = collectionClients.get(0);
    SolrClient client2 = collectionClients.get(1);
    SolrClient client3 = collectionClients.get(2);
    SolrClient client4 = collectionClients.get(3);
    // no one should be recovering
    waitForRecoveriesToFinish(oneInstanceCollection2, getCommonCloudSolrClient().getZkStateReader(), false, true);
    assertAllActive(oneInstanceCollection2, getCommonCloudSolrClient().getZkStateReader());
    //printLayout();
    // TODO: enable when we don't falsely get slice1...
    // solrj.getZkStateReader().getLeaderUrl(oneInstanceCollection2, "slice1", 30000);
    // solrj.getZkStateReader().getLeaderUrl(oneInstanceCollection2, "slice2", 30000);
    client2.add(getDoc(id, "1"));
    client3.add(getDoc(id, "2"));
    client4.add(getDoc(id, "3"));
    client1.commit();
    SolrQuery query = new SolrQuery("*:*");
    query.set("distrib", false);
    long oneDocs = client1.query(query).getResults().getNumFound();
    long twoDocs = client2.query(query).getResults().getNumFound();
    long threeDocs = client3.query(query).getResults().getNumFound();
    long fourDocs = client4.query(query).getResults().getNumFound();
    query.set("collection", oneInstanceCollection2);
    query.set("distrib", true);
    long allDocs = getCommonCloudSolrClient().query(query).getResults().getNumFound();
    //    System.out.println("1:" + oneDocs);
    //    System.out.println("2:" + twoDocs);
    //    System.out.println("3:" + threeDocs);
    //    System.out.println("4:" + fourDocs);
    //    System.out.println("All Docs:" + allDocs);
    //    assertEquals(oneDocs, threeDocs);
    //    assertEquals(twoDocs, fourDocs);
    //    assertNotSame(oneDocs, twoDocs);
    assertEquals(3, allDocs);
    // we added a role of none on these creates - check for it
    ZkStateReader zkStateReader = getCommonCloudSolrClient().getZkStateReader();
    zkStateReader.forceUpdateCollection(oneInstanceCollection2);
    Map<String, Slice> slices = zkStateReader.getClusterState().getSlicesMap(oneInstanceCollection2);
    assertNotNull(slices);
    String roles = slices.get("slice1").getReplicasMap().values().iterator().next().getStr(ZkStateReader.ROLES_PROP);
    assertEquals("none", roles);
    ZkCoreNodeProps props = new ZkCoreNodeProps(getCommonCloudSolrClient().getZkStateReader().getClusterState().getLeader(oneInstanceCollection2, "slice1"));
    // now test that unloading a core gets us a new leader
    try (HttpSolrClient unloadClient = getHttpSolrClient(baseUrl)) {
        unloadClient.setConnectionTimeout(15000);
        unloadClient.setSoTimeout(60000);
        Unload unloadCmd = new Unload(true);
        unloadCmd.setCoreName(props.getCoreName());
        String leader = props.getCoreUrl();
        unloadClient.request(unloadCmd);
        int tries = 50;
        while (leader.equals(zkStateReader.getLeaderUrl(oneInstanceCollection2, "slice1", 10000))) {
            Thread.sleep(100);
            if (tries-- == 0) {
                fail("Leader never changed");
            }
        }
    }
    IOUtils.close(collectionClients);
}
Also used : ZkCoreNodeProps(org.apache.solr.common.cloud.ZkCoreNodeProps) ArrayList(java.util.ArrayList) SolrQuery(org.apache.solr.client.solrj.SolrQuery) HttpSolrClient(org.apache.solr.client.solrj.impl.HttpSolrClient) ZkStateReader(org.apache.solr.common.cloud.ZkStateReader) Unload(org.apache.solr.client.solrj.request.CoreAdminRequest.Unload) HttpSolrClient(org.apache.solr.client.solrj.impl.HttpSolrClient) SolrClient(org.apache.solr.client.solrj.SolrClient) Slice(org.apache.solr.common.cloud.Slice)

Example 13 with Slice

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

the class BaseCdcrDistributedZkTest method startServers.

/**
   * Creates and starts a given number of servers.
   */
protected List<String> startServers(int nServer) throws Exception {
    String temporaryCollection = "tmp_collection";
    System.setProperty("collection", temporaryCollection);
    for (int i = 1; i <= nServer; i++) {
        // give everyone there own solrhome
        File jettyDir = createTempDir("jetty").toFile();
        jettyDir.mkdirs();
        setupJettySolrHome(jettyDir);
        JettySolrRunner jetty = createJetty(jettyDir, null, "shard" + i);
        jettys.add(jetty);
    }
    ZkStateReader zkStateReader = jettys.get(0).getCoreContainer().getZkController().getZkStateReader();
    // now wait till we see the leader for each shard
    for (int i = 1; i <= shardCount; i++) {
        this.printLayout();
        zkStateReader.getLeaderRetry(temporaryCollection, "shard" + i, 15000);
    }
    // store the node names
    List<String> nodeNames = new ArrayList<>();
    for (Slice shard : zkStateReader.getClusterState().getCollection(temporaryCollection).getSlices()) {
        for (Replica replica : shard.getReplicas()) {
            nodeNames.add(replica.getNodeName());
        }
    }
    this.waitForRecoveriesToFinish(temporaryCollection, zkStateReader, true);
    // delete the temporary collection - we will create our own collections later
    this.deleteCollection(temporaryCollection);
    this.waitForCollectionToDisappear(temporaryCollection);
    System.clearProperty("collection");
    return nodeNames;
}
Also used : ZkStateReader(org.apache.solr.common.cloud.ZkStateReader) JettySolrRunner(org.apache.solr.client.solrj.embedded.JettySolrRunner) Slice(org.apache.solr.common.cloud.Slice) ArrayList(java.util.ArrayList) File(java.io.File) Replica(org.apache.solr.common.cloud.Replica)

Example 14 with Slice

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

the class Assign method buildCoreName.

public static String buildCoreName(DocCollection collection, String shard, Replica.Type type) {
    Slice slice = collection.getSlice(shard);
    int replicaNum = slice.getReplicas().size();
    for (; ; ) {
        String replicaName = buildCoreName(collection.getName(), shard, type, replicaNum);
        boolean exists = false;
        for (Replica replica : slice.getReplicas()) {
            if (replicaName.equals(replica.getStr(CORE_NAME_PROP))) {
                exists = true;
                break;
            }
        }
        if (exists)
            replicaNum++;
        else
            return replicaName;
    }
}
Also used : Slice(org.apache.solr.common.cloud.Slice) Replica(org.apache.solr.common.cloud.Replica)

Example 15 with Slice

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

the class BackupCmd method selectReplicaWithSnapshot.

private Replica selectReplicaWithSnapshot(CollectionSnapshotMetaData snapshotMeta, Slice slice) {
    // The goal here is to choose the snapshot of the replica which was the leader at the time snapshot was created.
    // If that is not possible, we choose any other replica for the given shard.
    Collection<CoreSnapshotMetaData> snapshots = snapshotMeta.getReplicaSnapshotsForShard(slice.getName());
    Optional<CoreSnapshotMetaData> leaderCore = snapshots.stream().filter(x -> x.isLeader()).findFirst();
    if (leaderCore.isPresent()) {
        log.info("Replica {} was the leader when snapshot {} was created.", leaderCore.get().getCoreName(), snapshotMeta.getName());
        Replica r = slice.getReplica(leaderCore.get().getCoreName());
        if ((r != null) && !r.getState().equals(State.DOWN)) {
            return r;
        }
    }
    Optional<Replica> r = slice.getReplicas().stream().filter(x -> x.getState() != State.DOWN && snapshotMeta.isSnapshotExists(slice.getName(), x)).findFirst();
    if (!r.isPresent()) {
        throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to find any live replica with a snapshot named " + snapshotMeta.getName() + " for shard " + slice.getName());
    }
    return r.get();
}
Also used : ASYNC(org.apache.solr.common.params.CommonAdminParams.ASYNC) CoreSnapshotMetaData(org.apache.solr.core.snapshots.CollectionSnapshotMetaData.CoreSnapshotMetaData) CollectionSnapshotMetaData(org.apache.solr.core.snapshots.CollectionSnapshotMetaData) DocCollection(org.apache.solr.common.cloud.DocCollection) ClusterState(org.apache.solr.common.cloud.ClusterState) LoggerFactory(org.slf4j.LoggerFactory) HashMap(java.util.HashMap) SolrSnapshotManager(org.apache.solr.core.snapshots.SolrSnapshotManager) CORE_NAME_PROP(org.apache.solr.common.cloud.ZkStateReader.CORE_NAME_PROP) SnapshotStatus(org.apache.solr.core.snapshots.CollectionSnapshotMetaData.SnapshotStatus) CoreContainer(org.apache.solr.core.CoreContainer) COLL_CONF(org.apache.solr.cloud.OverseerCollectionMessageHandler.COLL_CONF) SolrException(org.apache.solr.common.SolrException) COLLECTION_PROP(org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP) Map(java.util.Map) BackupManager(org.apache.solr.core.backup.BackupManager) URI(java.net.URI) ErrorCode(org.apache.solr.common.SolrException.ErrorCode) State(org.apache.solr.common.cloud.Replica.State) CoreAdminParams(org.apache.solr.common.params.CoreAdminParams) Properties(java.util.Properties) Slice(org.apache.solr.common.cloud.Slice) Logger(org.slf4j.Logger) ModifiableSolrParams(org.apache.solr.common.params.ModifiableSolrParams) MethodHandles(java.lang.invoke.MethodHandles) Collection(java.util.Collection) Instant(java.time.Instant) Version(org.apache.lucene.util.Version) Replica(org.apache.solr.common.cloud.Replica) CollectionAdminParams(org.apache.solr.common.params.CollectionAdminParams) NamedList(org.apache.solr.common.util.NamedList) NAME(org.apache.solr.common.params.CommonParams.NAME) Optional(java.util.Optional) ShardHandler(org.apache.solr.handler.component.ShardHandler) Collections(java.util.Collections) SolrZkClient(org.apache.solr.common.cloud.SolrZkClient) BackupRepository(org.apache.solr.core.backup.repository.BackupRepository) ZkNodeProps(org.apache.solr.common.cloud.ZkNodeProps) CoreSnapshotMetaData(org.apache.solr.core.snapshots.CollectionSnapshotMetaData.CoreSnapshotMetaData) Replica(org.apache.solr.common.cloud.Replica) SolrException(org.apache.solr.common.SolrException)

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