Skip to content

Commit bc938b1

Browse files
author
meiyi
committed
some rename
1 parent 19f9ce9 commit bc938b1

File tree

3 files changed

+97
-73
lines changed

3 files changed

+97
-73
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/HDFSAclController.java renamed to hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclController.java

Lines changed: 46 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.apache.hadoop.hbase.HBaseInterfaceAudience;
3535
import org.apache.hadoop.hbase.NamespaceDescriptor;
3636
import org.apache.hadoop.hbase.TableName;
37+
import org.apache.hadoop.hbase.TableNotFoundException;
3738
import org.apache.hadoop.hbase.client.Admin;
3839
import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
3940
import org.apache.hadoop.hbase.client.Delete;
@@ -56,8 +57,8 @@
5657
import org.apache.hadoop.hbase.master.MasterServices;
5758
import org.apache.hadoop.hbase.security.User;
5859
import org.apache.hadoop.hbase.security.UserProvider;
59-
import org.apache.hadoop.hbase.security.access.HDFSAclHelper.PathHelper;
6060
import org.apache.hadoop.hbase.security.access.Permission.Action;
61+
import org.apache.hadoop.hbase.security.access.SnapshotScannerHDFSAclHelper.PathHelper;
6162
import org.apache.hadoop.hbase.util.Bytes;
6263
import org.apache.yetus.audience.InterfaceAudience;
6364
import org.slf4j.Logger;
@@ -94,10 +95,10 @@
9495
*/
9596
@CoreCoprocessor
9697
@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)
97-
public class HDFSAclController implements MasterCoprocessor, MasterObserver {
98-
private static final Logger LOG = LoggerFactory.getLogger(HDFSAclController.class);
98+
public class SnapshotScannerHDFSAclController implements MasterCoprocessor, MasterObserver {
99+
private static final Logger LOG = LoggerFactory.getLogger(SnapshotScannerHDFSAclController.class);
99100

100-
private HDFSAclHelper hdfsAclHelper = null;
101+
private SnapshotScannerHDFSAclHelper hdfsAclHelper = null;
101102
private PathHelper pathHelper = null;
102103
private FileSystem fs = null;
103104
/** Provider for mapping principal names to Users */
@@ -117,8 +118,8 @@ public void preMasterInitialization(final ObserverContext<MasterCoprocessorEnvir
117118
throw new IOException("Does not implement HMasterServices");
118119
}
119120
MasterServices masterServices = ((HasMasterServices) mEnv).getMasterServices();
120-
hdfsAclHelper =
121-
new HDFSAclHelper(masterServices.getConfiguration(), masterServices.getConnection());
121+
hdfsAclHelper = new SnapshotScannerHDFSAclHelper(masterServices.getConfiguration(),
122+
masterServices.getConnection());
122123
pathHelper = hdfsAclHelper.getPathHelper();
123124
fs = pathHelper.getFileSystem();
124125
hdfsAclHelper.setCommonDirPermission();
@@ -132,14 +133,20 @@ public void postStartMaster(ObserverContext<MasterCoprocessorEnvironment> ctx)
132133
if (admin.tableExists(PermissionStorage.ACL_TABLE_NAME)) {
133134
// check if hbase:acl table has 'm' CF
134135
TableDescriptor tableDescriptor = admin.getDescriptor(PermissionStorage.ACL_TABLE_NAME);
135-
boolean containHdfsAclFamily = Arrays.stream(tableDescriptor.getColumnFamilies())
136-
.anyMatch(family -> Bytes.equals(family.getName(), HDFSAclStorage.HDFS_ACL_FAMILY));
136+
boolean containHdfsAclFamily = Arrays.stream(tableDescriptor.getColumnFamilies()).anyMatch(
137+
family -> Bytes.equals(family.getName(), SnapshotScannerHDFSAclStorage.HDFS_ACL_FAMILY));
137138
if (!containHdfsAclFamily) {
138-
TableDescriptorBuilder builder =
139-
TableDescriptorBuilder.newBuilder(tableDescriptor).setColumnFamily(
140-
ColumnFamilyDescriptorBuilder.newBuilder(HDFSAclStorage.HDFS_ACL_FAMILY).build());
139+
TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableDescriptor)
140+
.setColumnFamily(ColumnFamilyDescriptorBuilder
141+
.newBuilder(SnapshotScannerHDFSAclStorage.HDFS_ACL_FAMILY).build());
141142
admin.modifyTable(builder.build());
142143
}
144+
} else {
145+
LOG.error("Table {} is not yet created. {} should be configured after the {} Coprocessor",
146+
PermissionStorage.ACL_TABLE_NAME, getClass().getSimpleName(),
147+
AccessController.class.getSimpleName());
148+
throw new TableNotFoundException(
149+
"Table " + PermissionStorage.ACL_TABLE_NAME + " is not yet created");
143150
}
144151
}
145152
this.userProvider = UserProvider.instantiate(ctx.getEnvironment().getConfiguration());
@@ -171,7 +178,7 @@ public void postCompletedCreateTableAction(ObserverContext<MasterCoprocessorEnvi
171178
hdfsAclHelper.addTableAcl(desc.getTableName(), owner);
172179
try (Table aclTable =
173180
c.getEnvironment().getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {
174-
HDFSAclStorage.addUserTableHdfsAcl(aclTable, owner, desc.getTableName());
181+
SnapshotScannerHDFSAclStorage.addUserTableHdfsAcl(aclTable, owner, desc.getTableName());
175182
}
176183
}
177184
}
@@ -217,10 +224,10 @@ public void postDeleteTable(ObserverContext<MasterCoprocessorEnvironment> ctx,
217224
Set<String> removeUsers = new HashSet<>();
218225
try (Table aclTable =
219226
ctx.getEnvironment().getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {
220-
List<String> users = HDFSAclStorage.getTableUsers(aclTable, tableName);
221-
HDFSAclStorage.deleteTableHdfsAcl(aclTable, tableName);
227+
List<String> users = SnapshotScannerHDFSAclStorage.getTableUsers(aclTable, tableName);
228+
SnapshotScannerHDFSAclStorage.deleteTableHdfsAcl(aclTable, tableName);
222229
for (String user : users) {
223-
List<byte[]> userEntries = HDFSAclStorage.getUserEntries(aclTable, user);
230+
List<byte[]> userEntries = SnapshotScannerHDFSAclStorage.getUserEntries(aclTable, user);
224231
boolean remove = true;
225232
for (byte[] entry : userEntries) {
226233
if (PermissionStorage.isGlobalEntry(entry)) {
@@ -253,7 +260,7 @@ public void postDeleteNamespace(ObserverContext<MasterCoprocessorEnvironment> ct
253260
if (hdfsAclHelper != null) {
254261
try (Table aclTable =
255262
ctx.getEnvironment().getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {
256-
HDFSAclStorage.deleteNamespaceHdfsAcl(aclTable, namespace);
263+
SnapshotScannerHDFSAclStorage.deleteNamespaceHdfsAcl(aclTable, namespace);
257264
}
258265
Path tmpNsDir = pathHelper.getTmpNsDir(namespace);
259266
if (fs.exists(tmpNsDir)) {
@@ -279,7 +286,8 @@ public void postGrant(ObserverContext<MasterCoprocessorEnvironment> c,
279286
case GLOBAL:
280287
UserPermission perm = getUserGlobalPermission(conf, userName);
281288
if (containReadPermission(perm)) {
282-
List<byte[]> userEntries = HDFSAclStorage.getUserEntries(aclTable, userName);
289+
List<byte[]> userEntries =
290+
SnapshotScannerHDFSAclStorage.getUserEntries(aclTable, userName);
283291
Set<String> skipNamespaces = new HashSet<>();
284292
Set<TableName> skipTables = new HashSet<>();
285293
for (byte[] entry : userEntries) {
@@ -290,7 +298,7 @@ public void postGrant(ObserverContext<MasterCoprocessorEnvironment> c,
290298
}
291299
}
292300
hdfsAclHelper.grantAcl(userPermission, skipNamespaces, skipTables);
293-
HDFSAclStorage.addUserGlobalHdfsAcl(aclTable, userName);
301+
SnapshotScannerHDFSAclStorage.addUserGlobalHdfsAcl(aclTable, userName);
294302
} else {
295303
revokeUserGlobalPermission(aclTable, userName, userPermission);
296304
}
@@ -300,8 +308,9 @@ public void postGrant(ObserverContext<MasterCoprocessorEnvironment> c,
300308
((NamespacePermission) userPermission.getPermission()).getNamespace();
301309
UserPermission nsPerm = getUserNamespacePermission(conf, userName, namespace);
302310
if (containReadPermission(nsPerm)) {
303-
if (!HDFSAclStorage.hasUserGlobalHdfsAcl(aclTable, userName)) {
304-
List<byte[]> userEntries = HDFSAclStorage.getUserEntries(aclTable, userName);
311+
if (!SnapshotScannerHDFSAclStorage.hasUserGlobalHdfsAcl(aclTable, userName)) {
312+
List<byte[]> userEntries =
313+
SnapshotScannerHDFSAclStorage.getUserEntries(aclTable, userName);
305314
Set<TableName> skipTables = new HashSet<>();
306315
for (byte[] entry : userEntries) {
307316
if (!PermissionStorage.isNamespaceEntry(entry)
@@ -311,7 +320,7 @@ public void postGrant(ObserverContext<MasterCoprocessorEnvironment> c,
311320
}
312321
hdfsAclHelper.grantAcl(userPermission, new HashSet<>(0), skipTables);
313322
}
314-
HDFSAclStorage.addUserNamespaceHdfsAcl(aclTable, userName, namespace);
323+
SnapshotScannerHDFSAclStorage.addUserNamespaceHdfsAcl(aclTable, userName, namespace);
315324
} else {
316325
revokeUserNamespacePermission(aclTable, userName, namespace, userPermission);
317326
}
@@ -324,11 +333,12 @@ public void postGrant(ObserverContext<MasterCoprocessorEnvironment> c,
324333
break;
325334
}
326335
if (containReadPermission(tPerm)) {
327-
if (!HDFSAclStorage.hasUserGlobalHdfsAcl(aclTable, userName) && !HDFSAclStorage
328-
.hasUserNamespaceHdfsAcl(aclTable, userName, tableName.getNamespaceAsString())) {
336+
if (!SnapshotScannerHDFSAclStorage.hasUserGlobalHdfsAcl(aclTable, userName)
337+
&& !SnapshotScannerHDFSAclStorage.hasUserNamespaceHdfsAcl(aclTable, userName,
338+
tableName.getNamespaceAsString())) {
329339
hdfsAclHelper.grantAcl(userPermission, new HashSet<>(0), new HashSet<>(0));
330340
}
331-
HDFSAclStorage.addUserTableHdfsAcl(aclTable, userName, tableName);
341+
SnapshotScannerHDFSAclStorage.addUserTableHdfsAcl(aclTable, userName, tableName);
332342
} else {
333343
revokeUserTablePermission(aclTable, userName, tableName, userPermission);
334344
}
@@ -378,7 +388,7 @@ private void revokeUserGlobalPermission(Table aclTable, String userName,
378388
// remove user global acls but reserve ns and table acls
379389
Set<String> skipNamespaces = new HashSet<>();
380390
Set<TableName> skipTables = new HashSet<>();
381-
List<byte[]> userEntries = HDFSAclStorage.getUserEntries(aclTable, userName);
391+
List<byte[]> userEntries = SnapshotScannerHDFSAclStorage.getUserEntries(aclTable, userName);
382392
for (byte[] entry : userEntries) {
383393
if (PermissionStorage.isNamespaceEntry(entry)) {
384394
skipNamespaces.add(Bytes.toString(PermissionStorage.fromNamespaceEntry(entry)));
@@ -393,33 +403,34 @@ private void revokeUserGlobalPermission(Table aclTable, String userName,
393403
}
394404
}
395405
hdfsAclHelper.revokeAcl(userPermission, skipNamespaces, filterTableNames);
396-
HDFSAclStorage.deleteUserGlobalHdfsAcl(aclTable, userName);
406+
SnapshotScannerHDFSAclStorage.deleteUserGlobalHdfsAcl(aclTable, userName);
397407
}
398408

399409
private void revokeUserNamespacePermission(Table aclTable, String userName, String namespace,
400410
UserPermission userPermission) throws IOException {
401411
// remove user ns acls but reserve table acls
402-
if (!HDFSAclStorage.hasUserGlobalHdfsAcl(aclTable, userName)) {
412+
if (!SnapshotScannerHDFSAclStorage.hasUserGlobalHdfsAcl(aclTable, userName)) {
403413
Set<TableName> skipTables = new HashSet<>();
404-
List<byte[]> userEntries = HDFSAclStorage.getUserEntries(aclTable, userName);
414+
List<byte[]> userEntries = SnapshotScannerHDFSAclStorage.getUserEntries(aclTable, userName);
405415
for (byte[] entry : userEntries) {
406416
if (!PermissionStorage.isNamespaceEntry(entry) && !PermissionStorage.isGlobalEntry(entry)) {
407417
skipTables.add(TableName.valueOf(entry));
408418
}
409419
}
410420
hdfsAclHelper.revokeAcl(userPermission, new HashSet<>(), skipTables);
411421
}
412-
HDFSAclStorage.deleteUserNamespaceHdfsAcl(aclTable, userName, namespace);
422+
SnapshotScannerHDFSAclStorage.deleteUserNamespaceHdfsAcl(aclTable, userName, namespace);
413423
}
414424

415425
private void revokeUserTablePermission(Table aclTable, String userName, TableName tableName,
416426
UserPermission userPermission) throws IOException {
417-
if (!HDFSAclStorage.hasUserGlobalHdfsAcl(aclTable, userName) && !HDFSAclStorage
418-
.hasUserNamespaceHdfsAcl(aclTable, userName, tableName.getNamespaceAsString())) {
427+
if (!SnapshotScannerHDFSAclStorage.hasUserGlobalHdfsAcl(aclTable, userName)
428+
&& !SnapshotScannerHDFSAclStorage.hasUserNamespaceHdfsAcl(aclTable, userName,
429+
tableName.getNamespaceAsString())) {
419430
// remove table acls
420431
hdfsAclHelper.revokeAcl(userPermission, new HashSet<>(0), new HashSet<>(0));
421432
}
422-
HDFSAclStorage.deleteUserTableHdfsAcl(aclTable, userName, tableName);
433+
SnapshotScannerHDFSAclStorage.deleteUserTableHdfsAcl(aclTable, userName, tableName);
423434
}
424435

425436
private boolean containReadPermission(UserPermission userPermission) {
@@ -461,11 +472,11 @@ private UserPermission getUserTablePermission(Configuration conf, String userNam
461472
}
462473

463474
private boolean isHdfsAclEnabled(Configuration configuration) {
464-
return configuration.getBoolean(HDFSAclHelper.HDFS_ACL_ENABLE, false);
475+
return configuration.getBoolean(SnapshotScannerHDFSAclHelper.USER_SCAN_SNAPSHOT_ENABLE, false);
465476
}
466477

467-
protected static final class HDFSAclStorage {
468-
public static final byte[] HDFS_ACL_FAMILY = Bytes.toBytes("m");
478+
protected static final class SnapshotScannerHDFSAclStorage {
479+
static final byte[] HDFS_ACL_FAMILY = Bytes.toBytes("m");
469480
private static final byte[] HDFS_ACL_VALUE = Bytes.toBytes("R");
470481

471482
static void addUserGlobalHdfsAcl(Table aclTable, String user) throws IOException {

hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/HDFSAclHelper.java renamed to hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.java

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import static org.apache.hadoop.fs.permission.AclEntryScope.ACCESS;
2222
import static org.apache.hadoop.fs.permission.AclEntryScope.DEFAULT;
23+
import static org.apache.hadoop.fs.permission.AclEntryType.GROUP;
2324
import static org.apache.hadoop.fs.permission.AclEntryType.USER;
2425
import static org.apache.hadoop.fs.permission.FsAction.READ_EXECUTE;
2526
import static org.apache.hadoop.hbase.security.access.Permission.Action.READ;
@@ -44,6 +45,7 @@
4445
import org.apache.hadoop.fs.permission.AclEntryScope;
4546
import org.apache.hadoop.fs.permission.FsAction;
4647
import org.apache.hadoop.fs.permission.FsPermission;
48+
import org.apache.hadoop.hbase.AuthUtil;
4749
import org.apache.hadoop.hbase.HConstants;
4850
import org.apache.hadoop.hbase.TableName;
4951
import org.apache.hadoop.hbase.client.Admin;
@@ -64,35 +66,38 @@
6466
* A helper to set HBase granted user access acl and default acl over hFiles.
6567
*/
6668
@InterfaceAudience.Private
67-
public class HDFSAclHelper implements Closeable {
68-
private static final Logger LOG = LoggerFactory.getLogger(HDFSAclHelper.class);
69+
public class SnapshotScannerHDFSAclHelper implements Closeable {
70+
private static final Logger LOG = LoggerFactory.getLogger(SnapshotScannerHDFSAclHelper.class);
6971

70-
public static final String HDFS_ACL_ENABLE = "hbase.hdfs.acl.enable";
71-
public static final String HDFS_ACL_THREAD_NUMBER = "hbase.hdfs.acl.thread.number";
72+
public static final String USER_SCAN_SNAPSHOT_ENABLE = "hbase.user.scan.snapshot.enable";
73+
public static final String USER_SCAN_SNAPSHOT_THREAD_NUMBER =
74+
"hbase.user.scan.snapshot.thread.number";
7275
// the tmp directory to restore snapshot, it can not be a sub directory of HBase root dir
7376
public static final String SNAPSHOT_RESTORE_TMP_DIR = "hbase.snapshot.restore.tmp.dir";
7477
public static final String SNAPSHOT_RESTORE_TMP_DIR_DEFAULT =
7578
"/hbase/.tmpdir-to-restore-snapshot";
7679
// If enable this feature, set public directories permission to 751
77-
public static final FsPermission ACL_ENABLE_PUBLIC_HFILE_PERMISSION =
78-
new FsPermission((short) 0751);
80+
public static final String COMMON_DIRECTORY_PERMISSION =
81+
"hbase.user.scan.snapshot.common.directory.permission";
82+
public static final String COMMON_DIRECTORY_PERMISSION_DEFAULT = "751";
7983
// If enable this feature, set restore directory permission to 703
80-
public static final FsPermission ACL_ENABLE_RESTORE_HFILE_PERMISSION =
81-
new FsPermission((short) 0703);
84+
public static final String SNAPSHOT_RESTORE_DIRECTORY_PERMISSION =
85+
"hbase.user.scan.snapshot.restore.directory.permission";
86+
public static final String SNAPSHOT_RESTORE_DIRECTORY_PERMISSION_DEFAULT = "703";
8287

8388
private Admin admin;
8489
private final Configuration conf;
8590
private FileSystem fs;
8691
private PathHelper pathHelper;
8792
private ExecutorService pool;
8893

89-
public HDFSAclHelper(Configuration configuration, Connection connection)
94+
public SnapshotScannerHDFSAclHelper(Configuration configuration, Connection connection)
9095
throws IOException {
9196
this.conf = configuration;
9297
this.pathHelper = new PathHelper(conf);
9398
this.fs = pathHelper.getFileSystem();
9499
this.pathHelper = new PathHelper(conf);
95-
this.pool = Executors.newFixedThreadPool(conf.getInt(HDFS_ACL_THREAD_NUMBER, 10),
100+
this.pool = Executors.newFixedThreadPool(conf.getInt(USER_SCAN_SNAPSHOT_THREAD_NUMBER, 10),
96101
new ThreadFactoryBuilder().setNameFormat("hdfs-acl-thread-%d").setDaemon(true).build());
97102
if (connection == null) {
98103
connection = ConnectionFactory.createConnection(conf);
@@ -122,14 +127,16 @@ public void setCommonDirPermission() throws IOException {
122127
if (!fs.exists(path)) {
123128
fs.mkdirs(path);
124129
}
125-
fs.setPermission(path, ACL_ENABLE_PUBLIC_HFILE_PERMISSION);
130+
fs.setPermission(path, new FsPermission(
131+
conf.get(COMMON_DIRECTORY_PERMISSION, COMMON_DIRECTORY_PERMISSION_DEFAULT)));
126132
}
127133
// create snapshot restore directory
128134
Path restoreDir =
129135
new Path(conf.get(SNAPSHOT_RESTORE_TMP_DIR, SNAPSHOT_RESTORE_TMP_DIR_DEFAULT));
130136
if (!fs.exists(restoreDir)) {
131137
fs.mkdirs(restoreDir);
132-
fs.setPermission(restoreDir, ACL_ENABLE_RESTORE_HFILE_PERMISSION);
138+
fs.setPermission(restoreDir, new FsPermission(conf.get(SNAPSHOT_RESTORE_DIRECTORY_PERMISSION,
139+
SNAPSHOT_RESTORE_DIRECTORY_PERMISSION_DEFAULT)));
133140
}
134141
}
135142

@@ -235,10 +242,9 @@ public boolean resetTableAcl(TableName tableName) {
235242
public boolean removeNamespaceAcl(TableName tableName, Set<String> removeUsers) {
236243
try {
237244
long start = System.currentTimeMillis();
238-
List<AclEntry> aclEntries = removeUsers.stream()
239-
.map(removeUser -> new AclEntry.Builder().setScope(AclEntryScope.ACCESS).setType(USER)
240-
.setName(removeUser).setPermission(FsAction.READ_EXECUTE).build())
241-
.collect(Collectors.toList());
245+
List<AclEntry> aclEntries =
246+
removeUsers.stream().map(removeUser -> aclEntry(ACCESS, removeUser, READ_EXECUTE))
247+
.collect(Collectors.toList());
242248
Path nsPath = pathHelper.getDataNsDir(tableName.getNamespaceAsString());
243249
fs.removeAclEntries(nsPath, aclEntries);
244250
LOG.info("Remove HDFS acl when delete table {}, cost {} ms", tableName,
@@ -259,11 +265,9 @@ public void addTableAcl(TableName tableName, String user) {
259265
try {
260266
long start = System.currentTimeMillis();
261267
List<AclEntry> aclEntries = new ArrayList<>(2);
262-
AclEntry accessAclEntry = new AclEntry.Builder().setScope(AclEntryScope.ACCESS).setType(USER)
263-
.setName(user).setPermission(FsAction.READ_EXECUTE).build();
268+
AclEntry accessAclEntry = aclEntry(ACCESS, user, READ_EXECUTE);
264269
aclEntries.add(accessAclEntry);
265-
aclEntries.add(new AclEntry.Builder().setScope(AclEntryScope.DEFAULT).setType(USER)
266-
.setName(user).setPermission(FsAction.READ_EXECUTE).build());
270+
aclEntries.add(aclEntry(DEFAULT, user, READ_EXECUTE));
267271
// set access and default HDFS acl for table dir
268272
fs.modifyAclEntries(pathHelper.getTmpTableDir(tableName), aclEntries);
269273
fs.modifyAclEntries(pathHelper.getArchiveTableDir(tableName), aclEntries);
@@ -540,6 +544,12 @@ private CompletableFuture<Void> setHDFSAclParallel(List<HDFSAclOperation> operat
540544
return future;
541545
}
542546

547+
private static AclEntry aclEntry(AclEntryScope scope, String name, FsAction action) {
548+
return new AclEntry.Builder().setScope(scope)
549+
.setType(AuthUtil.isGroupPrincipal(name) ? GROUP : USER).setName(name).setPermission(action)
550+
.build();
551+
}
552+
543553
/**
544554
* Inner class used to describe modify or remove what acl entries for files or directories(and
545555
* child files)
@@ -629,11 +639,6 @@ private List<AclEntry> getDefaultAclEntries(Set<String> users, FsAction action)
629639
}
630640
return dirAclList;
631641
}
632-
633-
private AclEntry aclEntry(AclEntryScope scope, String name, FsAction action) {
634-
return new AclEntry.Builder().setScope(scope).setType(USER).setName(name)
635-
.setPermission(action).build();
636-
}
637642
}
638643

639644
protected static final class PathHelper {

0 commit comments

Comments
 (0)