HDFS-9273. ACLs on root directory may be lost after NN restart. Contributed by Xiao Chen.
(cherry picked from commit1b525a9c32
) (cherry picked from commitfaf1c60899
)
This commit is contained in:
parent
0460b8a8a3
commit
e23ab9d02b
|
@ -33,6 +33,9 @@ Release 2.7.3 - UNRELEASED
|
|||
HDFS-9314. Improve BlockPlacementPolicyDefault's picking of excess
|
||||
replicas. (Xiao Chen via zhz)
|
||||
|
||||
HDFS-9273. ACLs on root directory may be lost after NN restart.
|
||||
(Xiao Chen via cnauroth)
|
||||
|
||||
Release 2.7.2 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -384,6 +384,10 @@ public final class FSImageFormatPBINode {
|
|||
}
|
||||
dir.rootDir.cloneModificationTime(root);
|
||||
dir.rootDir.clonePermissionStatus(root);
|
||||
final AclFeature af = root.getFeature(AclFeature.class);
|
||||
if (af != null) {
|
||||
dir.rootDir.addAclFeature(af);
|
||||
}
|
||||
// root dir supports having extended attributes according to POSIX
|
||||
final XAttrFeature f = root.getXAttrFeature();
|
||||
if (f != null) {
|
||||
|
|
|
@ -206,6 +206,35 @@ public class TestFSImageWithAcl {
|
|||
doTestDefaultAclNewChildren(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRootACLAfterLoadingFsImage() throws IOException {
|
||||
DistributedFileSystem fs = cluster.getFileSystem();
|
||||
Path rootdir = new Path("/");
|
||||
AclEntry e1 = new AclEntry.Builder().setName("foo")
|
||||
.setPermission(ALL).setScope(ACCESS).setType(GROUP).build();
|
||||
AclEntry e2 = new AclEntry.Builder().setName("bar")
|
||||
.setPermission(READ).setScope(ACCESS).setType(GROUP).build();
|
||||
fs.modifyAclEntries(rootdir, Lists.newArrayList(e1, e2));
|
||||
|
||||
AclStatus s = cluster.getNamesystem().getAclStatus(rootdir.toString());
|
||||
AclEntry[] returned =
|
||||
Lists.newArrayList(s.getEntries()).toArray(new AclEntry[0]);
|
||||
Assert.assertArrayEquals(
|
||||
new AclEntry[] { aclEntry(ACCESS, GROUP, READ_EXECUTE),
|
||||
aclEntry(ACCESS, GROUP, "bar", READ),
|
||||
aclEntry(ACCESS, GROUP, "foo", ALL) }, returned);
|
||||
|
||||
// restart - hence save and load from fsimage
|
||||
restart(fs, true);
|
||||
|
||||
s = cluster.getNamesystem().getAclStatus(rootdir.toString());
|
||||
returned = Lists.newArrayList(s.getEntries()).toArray(new AclEntry[0]);
|
||||
Assert.assertArrayEquals(
|
||||
new AclEntry[] { aclEntry(ACCESS, GROUP, READ_EXECUTE),
|
||||
aclEntry(ACCESS, GROUP, "bar", READ),
|
||||
aclEntry(ACCESS, GROUP, "foo", ALL) }, returned);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restart the NameNode, optionally saving a new checkpoint.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue