This is an automated email from the ASF dual-hosted git repository.
ayushsaxena pushed a commit to branch HDFS-13891
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/HDFS-13891 by this push:
new 3d4e957 HDFS-14210. RBF: ACL commands should work over all the
destinations. Contributed by Ayush Saxena.
3d4e957 is described below
commit 3d4e957c68fd2d0e6c09b45589daae602dc18c01
Author: Ayush Saxena <[email protected]>
AuthorDate: Thu May 16 00:45:20 2019 +0530
HDFS-14210. RBF: ACL commands should work over all the destinations.
Contributed by Ayush Saxena.
---
.../federation/router/RouterClientProtocol.java | 30 +++++++++++++++----
...erRPCMultipleDestinationMountTableResolver.java | 35 ++++++++++++++++++++++
2 files changed, 60 insertions(+), 5 deletions(-)
diff --git
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClientProtocol.java
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClientProtocol.java
index f1f1c42..4e273c2 100644
---
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClientProtocol.java
+++
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterClientProtocol.java
@@ -1313,7 +1313,11 @@ public class RouterClientProtocol implements
ClientProtocol {
RemoteMethod method = new RemoteMethod("modifyAclEntries",
new Class<?>[] {String.class, List.class},
new RemoteParam(), aclSpec);
- rpcClient.invokeSequential(locations, method, null, null);
+ if (rpcServer.isInvokeConcurrent(src)) {
+ rpcClient.invokeConcurrent(locations, method);
+ } else {
+ rpcClient.invokeSequential(locations, method);
+ }
}
@Override
@@ -1327,7 +1331,11 @@ public class RouterClientProtocol implements
ClientProtocol {
RemoteMethod method = new RemoteMethod("removeAclEntries",
new Class<?>[] {String.class, List.class},
new RemoteParam(), aclSpec);
- rpcClient.invokeSequential(locations, method, null, null);
+ if (rpcServer.isInvokeConcurrent(src)) {
+ rpcClient.invokeConcurrent(locations, method);
+ } else {
+ rpcClient.invokeSequential(locations, method);
+ }
}
@Override
@@ -1339,7 +1347,11 @@ public class RouterClientProtocol implements
ClientProtocol {
rpcServer.getLocationsForPath(src, true);
RemoteMethod method = new RemoteMethod("removeDefaultAcl",
new Class<?>[] {String.class}, new RemoteParam());
- rpcClient.invokeSequential(locations, method);
+ if (rpcServer.isInvokeConcurrent(src)) {
+ rpcClient.invokeConcurrent(locations, method);
+ } else {
+ rpcClient.invokeSequential(locations, method);
+ }
}
@Override
@@ -1351,7 +1363,11 @@ public class RouterClientProtocol implements
ClientProtocol {
rpcServer.getLocationsForPath(src, true);
RemoteMethod method = new RemoteMethod("removeAcl",
new Class<?>[] {String.class}, new RemoteParam());
- rpcClient.invokeSequential(locations, method);
+ if (rpcServer.isInvokeConcurrent(src)) {
+ rpcClient.invokeConcurrent(locations, method);
+ } else {
+ rpcClient.invokeSequential(locations, method);
+ }
}
@Override
@@ -1364,7 +1380,11 @@ public class RouterClientProtocol implements
ClientProtocol {
RemoteMethod method = new RemoteMethod(
"setAcl", new Class<?>[] {String.class, List.class},
new RemoteParam(), aclSpec);
- rpcClient.invokeSequential(locations, method);
+ if (rpcServer.isInvokeConcurrent(src)) {
+ rpcClient.invokeConcurrent(locations, method);
+ } else {
+ rpcClient.invokeSequential(locations, method);
+ }
}
@Override
diff --git
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRPCMultipleDestinationMountTableResolver.java
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRPCMultipleDestinationMountTableResolver.java
index 2cd11f0..72a243a 100644
---
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRPCMultipleDestinationMountTableResolver.java
+++
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRPCMultipleDestinationMountTableResolver.java
@@ -38,7 +38,9 @@ import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Options.Rename;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.fs.permission.AclEntry;
import org.apache.hadoop.fs.permission.FsPermission;
+import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.hdfs.DFSTestUtil;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import
org.apache.hadoop.hdfs.server.federation.MiniRouterDFSCluster.RouterContext;
@@ -84,6 +86,7 @@ public class
TestRouterRPCMultipleDestinationMountTableResolver {
new RouterConfigBuilder().stateStore().admin().quota().rpc().build();
Configuration hdfsConf = new Configuration(false);
+ hdfsConf.setBoolean(DFSConfigKeys.DFS_NAMENODE_ACLS_ENABLED_KEY, true);
cluster.addRouterOverrides(routerConf);
cluster.addNamenodeOverrides(hdfsConf);
@@ -407,6 +410,38 @@ public class
TestRouterRPCMultipleDestinationMountTableResolver {
}
@Test
+ public void testACLMultipleDestinations() throws Exception {
+ setupOrderMountPath(DestinationOrder.HASH_ALL);
+ Path mountPath = new Path("/mount/dir/dir");
+ Path nsPath = new Path("/tmp/dir/dir");
+ List<AclEntry> aclSpec = Collections.singletonList(
+ AclEntry.parseAclEntry("default:USER:TestUser:rwx", true));
+ routerFs.setAcl(mountPath, aclSpec);
+ assertEquals(5, nnFs0.getAclStatus(nsPath).getEntries().size());
+ assertEquals(5, nnFs1.getAclStatus(nsPath).getEntries().size());
+ aclSpec = Collections
+ .singletonList(AclEntry.parseAclEntry("USER:User:rwx::", true));
+
+ routerFs.modifyAclEntries(mountPath, aclSpec);
+ assertEquals(7, nnFs0.getAclStatus(nsPath).getEntries().size());
+ assertEquals(7, nnFs1.getAclStatus(nsPath).getEntries().size());
+
+ routerFs.removeAclEntries(mountPath, aclSpec);
+ assertEquals(6, nnFs0.getAclStatus(nsPath).getEntries().size());
+ assertEquals(6, nnFs1.getAclStatus(nsPath).getEntries().size());
+
+ routerFs.modifyAclEntries(mountPath, aclSpec);
+ routerFs.removeDefaultAcl(mountPath);
+ assertEquals(2, nnFs0.getAclStatus(nsPath).getEntries().size());
+ assertEquals(2, nnFs1.getAclStatus(nsPath).getEntries().size());
+
+ routerFs.removeAcl(mountPath);
+ assertEquals(0, nnFs0.getAclStatus(nsPath).getEntries().size());
+ assertEquals(0, nnFs1.getAclStatus(nsPath).getEntries().size());
+
+ }
+
+ @Test
public void testGetDestinationHashAll() throws Exception {
testGetDestination(DestinationOrder.HASH_ALL,
Arrays.asList("ns1"),
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]