Example usage for org.apache.hadoop.hdfs.server.protocol DatanodeProtocol INVALID_BLOCK

List of usage examples for org.apache.hadoop.hdfs.server.protocol DatanodeProtocol INVALID_BLOCK

Introduction

In this page you can find the example usage for org.apache.hadoop.hdfs.server.protocol DatanodeProtocol INVALID_BLOCK.

Prototype

int INVALID_BLOCK

To view the source code for org.apache.hadoop.hdfs.server.protocol DatanodeProtocol INVALID_BLOCK.

Click Source Link

Usage

From source file:common.DataNode.java

License:Apache License

private void transferBlock(Block block, DatanodeInfo xferTargets[]) throws IOException {
    if (!data.isValidBlock(block)) {
        // block does not exist or is under-construction
        String errStr = "Can't send invalid block " + block;
        LOG.info(errStr);/*from   w  ww  . jav  a  2  s .  c om*/
        namenode.errorReport(dnRegistration, DatanodeProtocol.INVALID_BLOCK, errStr);
        return;
    }

    // Check if NN recorded length matches on-disk length 
    long onDiskLength = data.getLength(block);
    if (block.getNumBytes() > onDiskLength) {
        // Shorter on-disk len indicates corruption so report NN the corrupt block
        namenode.reportBadBlocks(new LocatedBlock[] {
                new LocatedBlock(block, new DatanodeInfo[] { new DatanodeInfo(dnRegistration) }) });
        LOG.info("Can't replicate block " + block + " because on-disk length " + onDiskLength
                + " is shorter than NameNode recorded length " + block.getNumBytes());
        return;
    }

    int numTargets = xferTargets.length;
    if (numTargets > 0) {
        if (LOG.isInfoEnabled()) {
            StringBuilder xfersBuilder = new StringBuilder();
            for (int i = 0; i < numTargets; i++) {
                xfersBuilder.append(xferTargets[i].getName());
                xfersBuilder.append(" ");
            }
            LOG.info(dnRegistration + " Starting thread to transfer block " + block + " to " + xfersBuilder);
        }

        new Daemon(new DataTransfer(xferTargets, block, this)).start();
    }
}