Example usage for org.apache.hadoop.hdfs.protocol LocatedBlock getStorageTypes

List of usage examples for org.apache.hadoop.hdfs.protocol LocatedBlock getStorageTypes

Introduction

In this page you can find the example usage for org.apache.hadoop.hdfs.protocol LocatedBlock getStorageTypes.

Prototype

public StorageType[] getStorageTypes() 

Source Link

Usage

From source file:com.mellanox.r4h.DFSInputStream.java

License:Apache License

/**
 * Get the best node from which to stream the data.
 * /*ww w. j a  va 2 s.c  o  m*/
 * @param block
 *            LocatedBlock, containing nodes in priority order.
 * @param ignoredNodes
 *            Do not choose nodes in this array (may be null)
 * @return The DNAddrPair of the best node.
 * @throws IOException
 */
private DNAddrPair getBestNodeDNAddrPair(LocatedBlock block, Collection<DatanodeInfo> ignoredNodes)
        throws IOException {
    DatanodeInfo[] nodes = block.getLocations();
    StorageType[] storageTypes = block.getStorageTypes();
    DatanodeInfo chosenNode = null;
    StorageType storageType = null;
    if (nodes != null) {
        for (int i = 0; i < nodes.length; i++) {
            if (!deadNodes.containsKey(nodes[i])
                    && (ignoredNodes == null || !ignoredNodes.contains(nodes[i]))) {
                chosenNode = nodes[i];
                // Storage types are ordered to correspond with nodes, so use the same
                // index to get storage type.
                if (storageTypes != null && i < storageTypes.length) {
                    storageType = storageTypes[i];
                }
                break;
            }
        }
    }
    if (chosenNode == null) {
        throw new IOException("No live nodes contain block " + block.getBlock() + " after checking nodes = "
                + Arrays.toString(nodes) + ", ignoredNodes = " + ignoredNodes);
    }
    final String dnAddr = chosenNode.getXferAddr(dfsClient.getConf().getConnectToDnViaHostname());
    if (DFSClient.LOG.isDebugEnabled()) {
        DFSClient.LOG.debug("Connecting to datanode " + dnAddr);
    }
    InetSocketAddress targetAddr = NetUtils.createSocketAddr(dnAddr);
    return new DNAddrPair(chosenNode, targetAddr, storageType);
}