diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 55f2a99d2ac..217f06e3c9e 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -441,6 +441,9 @@ Release 2.7.0 - UNRELEASED HADOOP-11403. Avoid using sys_errlist on Solaris, which lacks support for it (Malcolm Kavalsky via Colin P. McCabe) + HADOOP-11523. StorageException complaining " no lease ID" when updating + FolderLastModifiedTime in WASB. (Duo Xu via cnauroth) + Release 2.6.1 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/NativeAzureFileSystem.java b/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/NativeAzureFileSystem.java index c1360022201..0248b85a283 100644 --- a/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/NativeAzureFileSystem.java +++ b/hadoop-tools/hadoop-azure/src/main/java/org/apache/hadoop/fs/azure/NativeAzureFileSystem.java @@ -2040,7 +2040,37 @@ private void updateParentFolderLastModifiedTime(String key) createPermissionStatus(FsPermission.getDefault())); } - store.updateFolderLastModifiedTime(parentKey, null); + if (store.isAtomicRenameKey(parentKey)) { + SelfRenewingLease lease = null; + try { + lease = leaseSourceFolder(parentKey); + store.updateFolderLastModifiedTime(parentKey, lease); + } catch (AzureException e) { + String errorCode = ""; + try { + StorageException e2 = (StorageException) e.getCause(); + errorCode = e2.getErrorCode(); + } catch (Exception e3) { + // do nothing if cast fails + } + if (errorCode.equals("BlobNotFound")) { + throw new FileNotFoundException("Folder does not exist: " + parentKey); + } + LOG.warn("Got unexpected exception trying to get lease on " + + parentKey + ". " + e.getMessage()); + throw e; + } finally { + try { + if (lease != null) { + lease.free(); + } + } catch (Exception e) { + LOG.error("Unable to free lease on " + parentKey, e); + } + } + } else { + store.updateFolderLastModifiedTime(parentKey, null); + } } } }