/** * Finalizes newReplica by calling finalizeReplica internally. * * @param newReplicaInfo - ReplicaInfo * @param block - Extended Block * @throws IOException */ @VisibleForTesting void finalizeNewReplica(ReplicaInfo newReplicaInfo, ExtendedBlock block) throws IOException { // Finalize the copied files try { String bpid = block.getBlockPoolId(); finalizeReplica(bpid, newReplicaInfo); FsVolumeImpl volume = (FsVolumeImpl) newReplicaInfo.getVolume(); volume.incrNumBlocks(bpid); } catch (IOException ioe) { // Cleanup block data and metadata // Decrement of dfsUsed and noOfBlocks for volume not required newReplicaInfo.deleteBlockData(); newReplicaInfo.deleteMetadata(); throw ioe; } }
finalizedReplicaInfo = finalizeReplica(b.getBlockPoolId(), replicaInfo);
@Override // FsDatasetSpi public Replica recoverClose(ExtendedBlock b, long newGS, long expectedBlockLen) throws IOException { LOG.info("Recover failed close " + b); while (true) { try { try (AutoCloseableLock lock = datasetLock.acquire()) { // check replica's state ReplicaInfo replicaInfo = recoverCheck(b, newGS, expectedBlockLen); // bump the replica's GS replicaInfo.bumpReplicaGS(newGS); // finalize the replica if RBW if (replicaInfo.getState() == ReplicaState.RBW) { finalizeReplica(b.getBlockPoolId(), replicaInfo); } return replicaInfo; } } catch (MustStopExistingWriter e) { e.getReplicaInPipeline() .stopWriter(datanode.getDnConf().getXceiverStopTimeout()); } } }
finalizeReplica(bpid, newReplicaInfo.getReplicaInfo()); return finalizeReplica(bpid, rur);
/** * Complete the block write! */ @Override // FsDatasetSpi public synchronized void finalizeBlock(ExtendedBlock b, boolean fsyncDir) throws IOException { if (Thread.interrupted()) { // Don't allow data modifications from interrupted threads throw new IOException("Cannot finalize block from Interrupted Thread"); } ReplicaInfo replicaInfo = getReplicaInfo(b); if (replicaInfo.getState() == ReplicaState.FINALIZED) { // this is legal, when recovery happens on a file that has // been opened for append but never modified return; } finalizeReplica(b.getBlockPoolId(), replicaInfo, fsyncDir); }
@Override // FsDatasetSpi public synchronized Replica recoverClose(ExtendedBlock b, long newGS, long expectedBlockLen) throws IOException { LOG.info("Recover failed close " + b); // check replica's state ReplicaInfo replicaInfo = recoverCheck(b, newGS, expectedBlockLen); // bump the replica's GS bumpReplicaGS(replicaInfo, newGS); // finalize the replica if RBW if (replicaInfo.getState() == ReplicaState.RBW) { finalizeReplica(b.getBlockPoolId(), replicaInfo); } return replicaInfo; }
finalizedReplicaInfo = finalizeReplica(b.getBlockPoolId(), replicaInfo);
@Override // FsDatasetSpi public synchronized Replica recoverClose(ExtendedBlock b, long newGS, long expectedBlockLen) throws IOException { LOG.info("Recover failed close " + b); // check replica's state ReplicaInfo replicaInfo = recoverCheck(b, newGS, expectedBlockLen); // bump the replica's GS bumpReplicaGS(replicaInfo, newGS); // finalize the replica if RBW if (replicaInfo.getState() == ReplicaState.RBW) { finalizeReplica(b.getBlockPoolId(), replicaInfo, false); } return replicaInfo; }
finalizeReplica(bpid, newReplicaInfo); return finalizeReplica(bpid, rur);
finalizeReplica(bpid, newReplicaInfo, false); return finalizeReplica(bpid, rur, false);
newReplicaInfo.setNumBytes(blockFiles[1].length()); newReplicaInfo = finalizeReplica(block.getBlockPoolId(), newReplicaInfo, false);
newReplicaInfo.setNumBytes(blockFiles[1].length()); newReplicaInfo = finalizeReplica(block.getBlockPoolId(), newReplicaInfo);