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

This commit is contained in:
Wei-Chiu Chuang 2018-08-27 16:02:35 -07:00
parent 602d13844a
commit 26c2a97c56
2 changed files with 16 additions and 0 deletions

View File

@ -133,6 +133,7 @@ static HdfsFileStatus toFileStatus(final Map<?, ?> json,
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) {
@ -144,6 +145,9 @@ static HdfsFileStatus toFileStatus(final Map<?, ?> json,
if (erasureBit != null && erasureBit) {
f.add(HdfsFileStatus.Flags.HAS_EC);
}
if (snapshotEnabledBit != null && snapshotEnabledBit) {
f.add(HdfsFileStatus.Flags.SNAPSHOT_ENABLED);
}
Map<String, Object> ecPolicyObj = (Map) m.get("ecPolicyObj");
ErasureCodingPolicy ecPolicy = null;

View File

@ -482,6 +482,9 @@ public void testWebHdfsAllowandDisallowSnapshots() throws Exception {
// 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 void testWebHdfsAllowandDisallowSnapshots() throws Exception {
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 {