HDFS-9516. Truncate file fails with data dirs on multiple disks. Contributed by Plamen Jeliazkov.
This commit is contained in:
parent
e6dc6f24a2
commit
cffa262f11
|
@ -1611,6 +1611,9 @@ Release 2.7.3 - UNRELEASED
|
|||
|
||||
HDFS-8785. TestDistributedFileSystem is failing in trunk. (Xiaoyu Yao)
|
||||
|
||||
HDFS-9516. Truncate file fails with data dirs on multiple disks.
|
||||
(Plamen Jeliazkov via shv)
|
||||
|
||||
Release 2.7.2 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -2505,8 +2505,14 @@ class FsDatasetImpl implements FsDatasetSpi<FsVolumeImpl> {
|
|||
} else {
|
||||
// Copying block to a new block with new blockId.
|
||||
// Not truncating original block.
|
||||
FsVolumeSpi volume = rur.getVolume();
|
||||
String blockPath = blockFile.getAbsolutePath();
|
||||
String volumePath = volume.getBasePath();
|
||||
assert blockPath.startsWith(volumePath) :
|
||||
"New block file: " + blockPath + " must be on " +
|
||||
"same volume as recovery replica: " + volumePath;
|
||||
ReplicaBeingWritten newReplicaInfo = new ReplicaBeingWritten(
|
||||
newBlockId, recoveryId, rur.getVolume(), blockFile.getParentFile(),
|
||||
newBlockId, recoveryId, volume, blockFile.getParentFile(),
|
||||
newlength);
|
||||
newReplicaInfo.setNumBytes(newlength);
|
||||
volumeMap.add(bpid, newReplicaInfo);
|
||||
|
@ -2522,10 +2528,8 @@ class FsDatasetImpl implements FsDatasetSpi<FsVolumeImpl> {
|
|||
ReplicaUnderRecovery replicaInfo, String bpid, long newBlkId, long newGS)
|
||||
throws IOException {
|
||||
String blockFileName = Block.BLOCK_FILE_PREFIX + newBlkId;
|
||||
FsVolumeReference v = volumes.getNextVolume(
|
||||
replicaInfo.getVolume().getStorageType(), replicaInfo.getNumBytes());
|
||||
final File tmpDir = ((FsVolumeImpl) v.getVolume())
|
||||
.getBlockPoolSlice(bpid).getTmpDir();
|
||||
FsVolumeImpl v = (FsVolumeImpl) replicaInfo.getVolume();
|
||||
final File tmpDir = v.getBlockPoolSlice(bpid).getTmpDir();
|
||||
final File destDir = DatanodeUtil.idToBlockDir(tmpDir, newBlkId);
|
||||
final File dstBlockFile = new File(destDir, blockFileName);
|
||||
final File dstMetaFile = FsDatasetUtil.getMetaFile(dstBlockFile, newGS);
|
||||
|
|
Loading…
Reference in New Issue