Search in sources :

Example 1 with State

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

the class ForceLeaderTest method setReplicaState.

protected void setReplicaState(String collection, String slice, Replica replica, Replica.State state) throws SolrServerException, IOException, KeeperException, InterruptedException {
    DistributedQueue inQueue = Overseer.getStateUpdateQueue(cloudClient.getZkStateReader().getZkClient());
    ZkStateReader zkStateReader = cloudClient.getZkStateReader();
    String baseUrl = zkStateReader.getBaseUrlForNodeName(replica.getNodeName());
    ZkNodeProps m = new ZkNodeProps(Overseer.QUEUE_OPERATION, OverseerAction.STATE.toLower(), ZkStateReader.BASE_URL_PROP, baseUrl, ZkStateReader.NODE_NAME_PROP, replica.getNodeName(), ZkStateReader.SHARD_ID_PROP, slice, ZkStateReader.COLLECTION_PROP, collection, ZkStateReader.CORE_NAME_PROP, replica.getStr(CORE_NAME_PROP), ZkStateReader.CORE_NODE_NAME_PROP, replica.getName(), ZkStateReader.STATE_PROP, state.toString());
    inQueue.offer(Utils.toJSON(m));
    boolean transition = false;
    Replica.State replicaState = null;
    for (int counter = 10; counter > 0; counter--) {
        ClusterState clusterState = zkStateReader.getClusterState();
        replicaState = clusterState.getSlice(collection, slice).getReplica(replica.getName()).getState();
        if (replicaState == state) {
            transition = true;
            break;
        }
        Thread.sleep(1000);
    }
    if (!transition) {
        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Could not set replica [" + replica.getName() + "] as " + state + ". Last known state of the replica: " + replicaState);
    }
}
Also used : ZkStateReader(org.apache.solr.common.cloud.ZkStateReader) ClusterState(org.apache.solr.common.cloud.ClusterState) ZkNodeProps(org.apache.solr.common.cloud.ZkNodeProps) State(org.apache.solr.common.cloud.Replica.State) Replica(org.apache.solr.common.cloud.Replica) SolrException(org.apache.solr.common.SolrException)

Example 2 with State

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

the class ForceLeaderTest method putNonLeadersIntoLIR.

void putNonLeadersIntoLIR(String collectionName, String shard, ZkController zkController, Replica leader, List<Replica> notLeaders) throws Exception {
    SocketProxy[] nonLeaderProxies = new SocketProxy[notLeaders.size()];
    for (int i = 0; i < notLeaders.size(); i++) nonLeaderProxies[i] = getProxyForReplica(notLeaders.get(i));
    sendDoc(1);
    // ok, now introduce a network partition between the leader and both replicas
    log.info("Closing proxies for the non-leader replicas...");
    for (SocketProxy proxy : nonLeaderProxies) proxy.close();
    // indexing during a partition
    log.info("Sending a doc during the network partition...");
    sendDoc(2);
    // Wait a little
    Thread.sleep(2000);
    // Kill the leader
    log.info("Killing leader for shard1 of " + collectionName + " on node " + leader.getNodeName() + "");
    JettySolrRunner leaderJetty = getJettyOnPort(getReplicaPort(leader));
    getProxyForReplica(leader).close();
    leaderJetty.stop();
    // Wait for a steady state, till LIR flags have been set and the shard is leaderless
    log.info("Sleep and periodically wake up to check for state...");
    for (int i = 0; i < 20; i++) {
        Thread.sleep(1000);
        State[] lirStates = new State[notLeaders.size()];
        for (int j = 0; j < notLeaders.size(); j++) lirStates[j] = zkController.getLeaderInitiatedRecoveryState(collectionName, shard, notLeaders.get(j).getName());
        ClusterState clusterState = zkController.getZkStateReader().getClusterState();
        boolean allDown = true;
        for (State lirState : lirStates) if (Replica.State.DOWN.equals(lirState) == false)
            allDown = false;
        if (allDown && clusterState.getSlice(collectionName, shard).getLeader() == null) {
            break;
        }
        log.warn("Attempt " + i + ", waiting on for 1 sec to settle down in the steady state. State: " + printClusterStateInfo(collectionName));
        log.warn("LIR state: " + getLIRState(zkController, collectionName, shard));
    }
    log.info("Waking up...");
    // remove the network partition
    log.info("Reopening the proxies for the non-leader replicas...");
    for (SocketProxy proxy : nonLeaderProxies) proxy.reopen();
    log.info("LIR state: " + getLIRState(zkController, collectionName, shard));
    State[] lirStates = new State[notLeaders.size()];
    for (int j = 0; j < notLeaders.size(); j++) lirStates[j] = zkController.getLeaderInitiatedRecoveryState(collectionName, shard, notLeaders.get(j).getName());
    for (State lirState : lirStates) assertTrue("Expected that the replicas would be in LIR state by now. LIR states: " + Arrays.toString(lirStates), Replica.State.DOWN == lirState || Replica.State.RECOVERING == lirState);
}
Also used : ClusterState(org.apache.solr.common.cloud.ClusterState) JettySolrRunner(org.apache.solr.client.solrj.embedded.JettySolrRunner) ClusterState(org.apache.solr.common.cloud.ClusterState) State(org.apache.solr.common.cloud.Replica.State)

Aggregations

ClusterState (org.apache.solr.common.cloud.ClusterState)2 State (org.apache.solr.common.cloud.Replica.State)2 JettySolrRunner (org.apache.solr.client.solrj.embedded.JettySolrRunner)1 SolrException (org.apache.solr.common.SolrException)1 Replica (org.apache.solr.common.cloud.Replica)1 ZkNodeProps (org.apache.solr.common.cloud.ZkNodeProps)1 ZkStateReader (org.apache.solr.common.cloud.ZkStateReader)1