HDFS-13838. WebHdfsFileSystem.getFileStatus() won't return correct "snapshot enabled" status. Contributed by Siyao Meng.

(cherry picked from commit a1de8cbac5)
(cherry picked from commit 829399a9f3)
This commit is contained in:
Wei-Chiu Chuang 2018-09-14 05:22:56 +08:00
parent f5ebb2ccf5
commit 2ef3911f7c
2 changed files with 16 additions and 0 deletions

View File

@ -130,6 +130,7 @@ class JsonUtilClient {
Boolean aclBit = (Boolean) m.get("aclBit");
Boolean encBit = (Boolean) m.get("encBit");
Boolean erasureBit = (Boolean) m.get("ecBit");
Boolean snapshotEnabledBit = (Boolean) m.get("snapshotEnabled");
EnumSet<HdfsFileStatus.Flags> f =
EnumSet.noneOf(HdfsFileStatus.Flags.class);
if (aclBit != null && aclBit) {
@ -141,6 +142,9 @@ class JsonUtilClient {
if (erasureBit != null && erasureBit) {
f.add(HdfsFileStatus.Flags.HAS_EC);
}
if (snapshotEnabledBit != null && snapshotEnabledBit) {
f.add(HdfsFileStatus.Flags.SNAPSHOT_ENABLED);
}
final long aTime = ((Number) m.get("accessTime")).longValue();
final long mTime = ((Number) m.get("modificationTime")).longValue();

View File

@ -482,6 +482,9 @@ public class TestWebHDFS {
// allow snapshots on /bar using webhdfs
webHdfs.allowSnapshot(bar);
// check if snapshot status is enabled
assertTrue(dfs.getFileStatus(bar).isSnapshotEnabled());
assertTrue(webHdfs.getFileStatus(bar).isSnapshotEnabled());
webHdfs.createSnapshot(bar, "s1");
final Path s1path = SnapshotTestHelper.getSnapshotRoot(bar, "s1");
Assert.assertTrue(webHdfs.exists(s1path));
@ -491,15 +494,24 @@ public class TestWebHDFS {
assertEquals(bar, snapshottableDirs[0].getFullPath());
dfs.deleteSnapshot(bar, "s1");
dfs.disallowSnapshot(bar);
// check if snapshot status is disabled
assertFalse(dfs.getFileStatus(bar).isSnapshotEnabled());
assertFalse(webHdfs.getFileStatus(bar).isSnapshotEnabled());
snapshottableDirs = dfs.getSnapshottableDirListing();
assertNull(snapshottableDirs);
// disallow snapshots on /bar using webhdfs
dfs.allowSnapshot(bar);
// check if snapshot status is enabled, again
assertTrue(dfs.getFileStatus(bar).isSnapshotEnabled());
assertTrue(webHdfs.getFileStatus(bar).isSnapshotEnabled());
snapshottableDirs = dfs.getSnapshottableDirListing();
assertEquals(1, snapshottableDirs.length);
assertEquals(bar, snapshottableDirs[0].getFullPath());
webHdfs.disallowSnapshot(bar);
// check if snapshot status is disabled, again
assertFalse(dfs.getFileStatus(bar).isSnapshotEnabled());
assertFalse(webHdfs.getFileStatus(bar).isSnapshotEnabled());
snapshottableDirs = dfs.getSnapshottableDirListing();
assertNull(snapshottableDirs);
try {