Search in sources :

Example 1 with PutPipelineData

use of voldemort.store.routed.PutPipelineData in project voldemort by voldemort.

the class AbstractConfigureNodes method getNodes.

protected List<Node> getNodes(ByteArray key) {
    List<Node> nodes = new ArrayList<Node>();
    pipelineData.setReplicationSet(routingStrategy.routeRequest(key.get()));
    // raise an error if no server has any partitions defined
    if (pipelineData.getReplicationSet().size() == 0) {
        throw new IllegalArgumentException("All servers configured with no partitions");
    }
    for (Node node : pipelineData.getReplicationSet()) {
        if (failureDetector.isAvailable(node))
            nodes.add(node);
        else {
            if (pipelineData instanceof PutPipelineData) {
                ((PutPipelineData) pipelineData).getSynchronizer().tryDelegateSlop(node);
            }
            pipelineData.addFailedNode(node);
            if (logger.isDebugEnabled()) {
                logger.debug("Key " + ByteUtils.toHexString(key.get()) + " Node " + node.getId() + " down");
            }
        }
    }
    if (nodes.size() < required) {
        List<Integer> failedNodes = new ArrayList<Integer>();
        List<Integer> allNodes = new ArrayList<Integer>();
        for (Node node : pipelineData.getReplicationSet()) {
            allNodes.add(node.getId());
        }
        for (Node node : pipelineData.getFailedNodes()) {
            failedNodes.add(node.getId());
        }
        String errorMessage = "Only " + nodes.size() + " nodes up in preference list" + ", but " + required + " required. Replication set: " + allNodes + "Nodes down: " + failedNodes;
        if (logger.isDebugEnabled()) {
            logger.debug(errorMessage);
        }
        throw new InsufficientOperationalNodesException(errorMessage);
    }
    return nodes;
}
Also used : Node(voldemort.cluster.Node) InsufficientOperationalNodesException(voldemort.store.InsufficientOperationalNodesException) ArrayList(java.util.ArrayList) PutPipelineData(voldemort.store.routed.PutPipelineData)

Aggregations

ArrayList (java.util.ArrayList)1 Node (voldemort.cluster.Node)1 InsufficientOperationalNodesException (voldemort.store.InsufficientOperationalNodesException)1 PutPipelineData (voldemort.store.routed.PutPipelineData)1