@Override public void transferBlock(final ExtendedBlock blk, final Token<BlockTokenIdentifier> blockToken, final String clientName, final DatanodeInfo[] targets, final StorageType[] targetStorageTypes, final String[] targetStorageIds) throws IOException { previousOpClientName = clientName; updateCurrentThreadName(Op.TRANSFER_BLOCK + " " + blk); final DataOutputStream out = new DataOutputStream( getOutputStream()); checkAccess(out, true, blk, blockToken, Op.TRANSFER_BLOCK, BlockTokenIdentifier.AccessMode.COPY, targetStorageTypes, targetStorageIds); try { datanode.transferReplicaForPipelineRecovery(blk, targets, targetStorageTypes, targetStorageIds, clientName); writeResponse(Status.SUCCESS, null, out); } catch (IOException ioe) { LOG.info("transferBlock {} received exception {}", blk, ioe.toString()); incrDatanodeNetworkErrors(); throw ioe; } finally { IOUtils.closeStream(out); } }
private void checkAccess(OutputStream out, final boolean reply, final ExtendedBlock blk, final Token<BlockTokenIdentifier> t, final Op op, final BlockTokenIdentifier.AccessMode mode, final StorageType[] storageTypes, final String[] storageIds) throws IOException { checkAndWaitForBP(blk); if (datanode.isBlockTokenEnabled) { LOG.debug("Checking block access token for block '{}' with mode '{}'", blk.getBlockId(), mode); try { datanode.blockPoolTokenSecretManager.checkAccess(t, null, blk, mode, storageTypes, storageIds); } catch(InvalidToken e) { try { if (reply) { BlockOpResponseProto.Builder resp = BlockOpResponseProto.newBuilder() .setStatus(ERROR_ACCESS_TOKEN); if (mode == BlockTokenIdentifier.AccessMode.WRITE) { DatanodeRegistration dnR = datanode.getDNRegistrationForBP(blk.getBlockPoolId()); // NB: Unconditionally using the xfer addr w/o hostname resp.setFirstBadLink(dnR.getXferAddr()); } resp.build().writeDelimitedTo(out); out.flush(); } LOG.warn("Block token verification failed: op={}, " + "remoteAddress={}, message={}",
updateCurrentThreadName("Replacing block " + block + " from " + delHint); DataOutputStream replyOut = new DataOutputStream(getOutputStream()); checkAccess(replyOut, true, block, blockToken, Op.REPLACE_BLOCK, BlockTokenIdentifier.AccessMode.REPLACE, new StorageType[]{storageType},
final DataOutputStream out = new DataOutputStream( getOutputStream()); checkAccess(out, true, block, blockToken, Op.BLOCK_CHECKSUM, BlockTokenIdentifier.AccessMode.READ); BlockChecksumComputer maker = new ReplicatedBlockChecksumComputer(
updateCurrentThreadName("Passing file descriptors for block " + blk); DataOutputStream out = getBufferedOutputStream(); checkAccess(out, true, blk, token, Op.REQUEST_SHORT_CIRCUIT_FDS, BlockTokenIdentifier.AccessMode.READ, null, null);
block); final DataOutputStream out = new DataOutputStream(getOutputStream()); checkAccess(out, true, block, blockToken, Op.BLOCK_GROUP_CHECKSUM, BlockTokenIdentifier.AccessMode.READ);
updateCurrentThreadName("Copying block " + block); DataOutputStream reply = getBufferedOutputStream(); checkAccess(reply, true, block, blockToken, Op.COPY_BLOCK, BlockTokenIdentifier.AccessMode.COPY);
OutputStream baseStream = getOutputStream(); DataOutputStream out = getBufferedOutputStream(); checkAccess(out, true, block, blockToken, Op.READ_BLOCK, BlockTokenIdentifier.AccessMode.READ);
storageIds = new String[0]; checkAccess(replyOut, isClient, block, blockToken, Op.WRITE_BLOCK, BlockTokenIdentifier.AccessMode.WRITE, storageTypes, storageIds);
@Override public void transferBlock(final ExtendedBlock blk, final Token<BlockTokenIdentifier> blockToken, final String clientName, final DatanodeInfo[] targets, final StorageType[] targetStorageTypes) throws IOException { previousOpClientName = clientName; updateCurrentThreadName(Op.TRANSFER_BLOCK + " " + blk); final DataOutputStream out = new DataOutputStream( getOutputStream()); checkAccess(out, true, blk, blockToken, Op.TRANSFER_BLOCK, BlockTokenSecretManager.AccessMode.COPY); try { datanode.transferReplicaForPipelineRecovery(blk, targets, targetStorageTypes, clientName); writeResponse(Status.SUCCESS, null, out); } catch (IOException ioe) { LOG.info("transferBlock " + blk + " received exception " + ioe); incrDatanodeNetworkErrors(); throw ioe; } finally { IOUtils.closeStream(out); } }
@Override public void transferBlock(final ExtendedBlock blk, final Token<BlockTokenIdentifier> blockToken, final String clientName, final DatanodeInfo[] targets, final StorageType[] targetStorageTypes) throws IOException { previousOpClientName = clientName; updateCurrentThreadName(Op.TRANSFER_BLOCK + " " + blk); final DataOutputStream out = new DataOutputStream( getOutputStream()); checkAccess(out, true, blk, blockToken, Op.TRANSFER_BLOCK, BlockTokenSecretManager.AccessMode.COPY); try { datanode.transferReplicaForPipelineRecovery(blk, targets, targetStorageTypes, clientName); writeResponse(Status.SUCCESS, null, out); } catch (IOException ioe) { LOG.info("transferBlock " + blk + " received exception " + ioe); incrDatanodeNetworkErrors(); throw ioe; } finally { IOUtils.closeStream(out); } }
final DataOutputStream out = new DataOutputStream( getOutputStream()); checkAccess(out, true, block, blockToken, Op.BLOCK_CHECKSUM, BlockTokenSecretManager.AccessMode.READ);
OutputStream baseStream = getOutputStream(); DataOutputStream out = getBufferedOutputStream(); checkAccess(out, true, block, blockToken, Op.READ_BLOCK, BlockTokenSecretManager.AccessMode.READ);
updateCurrentThreadName("Passing file descriptors for block " + blk); DataOutputStream out = getBufferedOutputStream(); checkAccess(out, true, blk, token, Op.REQUEST_SHORT_CIRCUIT_FDS, BlockTokenSecretManager.AccessMode.READ); BlockOpResponseProto.Builder bld = BlockOpResponseProto.newBuilder();
updateCurrentThreadName("Copying block " + block); DataOutputStream reply = getBufferedOutputStream(); checkAccess(reply, true, block, blockToken, Op.COPY_BLOCK, BlockTokenSecretManager.AccessMode.COPY);
updateCurrentThreadName("Replacing block " + block + " from " + delHint); DataOutputStream replyOut = new DataOutputStream(getOutputStream()); checkAccess(replyOut, true, block, blockToken, Op.REPLACE_BLOCK, BlockTokenSecretManager.AccessMode.REPLACE);
final DataOutputStream out = new DataOutputStream( getOutputStream()); checkAccess(out, true, block, blockToken, Op.BLOCK_CHECKSUM, BlockTokenSecretManager.AccessMode.READ);
updateCurrentThreadName("Passing file descriptors for block " + blk); DataOutputStream out = getBufferedOutputStream(); checkAccess(out, true, blk, token, Op.REQUEST_SHORT_CIRCUIT_FDS, BlockTokenSecretManager.AccessMode.READ); BlockOpResponseProto.Builder bld = BlockOpResponseProto.newBuilder();
OutputStream baseStream = getOutputStream(); DataOutputStream out = getBufferedOutputStream(); checkAccess(out, true, block, blockToken, Op.READ_BLOCK, BlockTokenSecretManager.AccessMode.READ);
updateCurrentThreadName("Copying block " + block); DataOutputStream reply = getBufferedOutputStream(); checkAccess(reply, true, block, blockToken, Op.COPY_BLOCK, BlockTokenSecretManager.AccessMode.COPY);