/** * Creates a new local block input stream. * * @param blockId the block id * @throws IOException if I/O error occurs */ public LocalBlockInStream(long blockId, long blockSize) throws IOException { super(blockId, blockSize); mContext = BlockStoreContext.INSTANCE; mCloser = Closer.create(); mWorkerClient = mContext.acquireWorkerClient(NetworkAddressUtils.getLocalHostName(ClientContext.getConf())); FileChannel localFileChannel = null; try { String blockPath = mWorkerClient.lockBlock(blockId); if (blockPath == null) { throw new IOException(ExceptionMessage.BLOCK_NOT_LOCALLY_AVAILABLE.getMessage(mBlockId)); } RandomAccessFile localFile = mCloser.register(new RandomAccessFile(blockPath, "r")); localFileChannel = mCloser.register(localFile.getChannel()); } catch (IOException e) { mContext.releaseWorkerClient(mWorkerClient); throw e; } mLocalFileChannel = localFileChannel; }