HADOOP-12484. Single File Rename Throws Incorrectly In Potential Race Condition Scenarios. Contributed by Gaurav Kanade.
This commit is contained in:
parent
0fce5f9a49
commit
cb282d5b89
@ -1338,6 +1338,9 @@ Release 2.8.0 - UNRELEASED
|
||||
HADOOP-12334. Change Mode Of Copy Operation of HBase WAL Archiving to bypass
|
||||
Azure Storage Throttling after retries. (Gaurav Kanade via cnauroth)
|
||||
|
||||
HADOOP-12484. Single File Rename Throws Incorrectly In Potential Race
|
||||
Condition Scenarios. (Gaurav Kanade via cnauroth)
|
||||
|
||||
Release 2.7.2 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
@ -545,10 +545,32 @@ private void finishSingleFileRename(String fileName)
|
||||
|
||||
// Get a lease on source to block write access.
|
||||
String srcName = fs.pathToKey(srcFile);
|
||||
SelfRenewingLease lease = fs.acquireLease(srcFile);
|
||||
|
||||
// Delete the file. This will free the lease too.
|
||||
fs.getStoreInterface().delete(srcName, lease);
|
||||
SelfRenewingLease lease = null;
|
||||
try {
|
||||
lease = fs.acquireLease(srcFile);
|
||||
// Delete the file. This will free the lease too.
|
||||
fs.getStoreInterface().delete(srcName, lease);
|
||||
} catch(AzureException e) {
|
||||
String errorCode = "";
|
||||
try {
|
||||
StorageException e2 = (StorageException) e.getCause();
|
||||
errorCode = e2.getErrorCode();
|
||||
} catch(Exception e3) {
|
||||
// do nothing if cast fails
|
||||
}
|
||||
// If the rename already finished do nothing
|
||||
if(!errorCode.equals("BlobNotFound")){
|
||||
throw e;
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
if(lease != null){
|
||||
lease.free();
|
||||
}
|
||||
} catch(StorageException e) {
|
||||
LOG.warn("Unable to free lease because: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
} else if (!srcExists && dstExists) {
|
||||
|
||||
// The rename already finished, so do nothing.
|
||||
@ -2442,4 +2464,4 @@ private static void cleanup(Logger log, java.io.Closeable closeable) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user