HDFS-9661. Deadlock in DN.FsDatasetImpl between moveBlockAcrossStorage and createRbw (Contributed by ade)

(cherry picked from commit 1425578690)
This commit is contained in:
Vinayakumar B 2016-01-20 21:04:21 +05:30
parent 2131b9820d
commit eb3dcc0739
2 changed files with 12 additions and 2 deletions

View File

@ -59,6 +59,9 @@ Release 2.7.3 - UNRELEASED
HDFS-9648. TestStartup.testImageChecksum is broken by HDFS-9569's message
change. (Wei-Chiu Chuang via Yongjun Zhang)
HDFS-9661. Deadlock in DN.FsDatasetImpl between moveBlockAcrossStorage and
createRbw (ade via vinayakumarb)
Release 2.7.2 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -896,8 +896,11 @@ class FsDatasetImpl implements FsDatasetSpi<FsVolumeImpl> {
+ replicaInfo.getVolume().getStorageType());
}
try (FsVolumeReference volumeRef = volumes.getNextVolume(
targetStorageType, block.getNumBytes())) {
FsVolumeReference volumeRef = null;
synchronized (this) {
volumeRef = volumes.getNextVolume(targetStorageType, block.getNumBytes());
}
try {
File oldBlockFile = replicaInfo.getBlockFile();
File oldMetaFile = replicaInfo.getMetaFile();
FsVolumeImpl targetVolume = (FsVolumeImpl) volumeRef.getVolume();
@ -916,6 +919,10 @@ class FsDatasetImpl implements FsDatasetSpi<FsVolumeImpl> {
removeOldReplica(replicaInfo, newReplicaInfo, oldBlockFile, oldMetaFile,
oldBlockFile.length(), oldMetaFile.length(), block.getBlockPoolId());
} finally {
if (volumeRef != null) {
volumeRef.close();
}
}
// Replace the old block if any to reschedule the scanning.