我有多个具有ACL属性的zknodes。根据新要求,我需要为新用户递归更新ACL。
我正在使用Zookeeper 3.4.3和apache策展人4.0.1。
我曾经尝试使用Apache Curator框架,但是似乎没有API可以递归更新ACL。
在同一线程上有一个单独的线程,但我无法弄清楚此python脚本如何递归更改ACL。 zookeeper zknodes traversal to update acl's
下面是我的代码,但是我看不到任何公开递归更新ACL的API:
public class App
{
private static String zkAdminUser = "zookeeper";
private static String zkAdminPassword = "********";
private static String theServers = "**.**.***.***:10181,**.**.***.***:10181,**.**.***.***:10181";
public static void main(String[] args)
{
CuratorFrameworkFactory.Builder builder =
CuratorFrameworkFactory.builder().connectString(theServers).retryPolicy(new ExponentialBackoffRetry(30000, 20)).connectionTimeoutMs(30000)
.sessionTimeoutMs(10000);
builder = builder.aclProvider(new ACLProvider()
{
@Override
public List<ACL> getDefaultAcl()
{
return ZooDefs.Ids.CREATOR_ALL_ACL;
}
@Override
public List<ACL> getAclForPath(String path)
{
// TODO Auto-generated method stub
return null;
}
}
);
if (zkAdminUser != null && zkAdminPassword != null)
{
String authenticationString = zkAdminUser + ":" + zkAdminPassword;
builder.authorization("ztpasswd", authenticationString.getBytes());
// .aclProvider(new ACLProvider()
// {
// @Override
// public List<ACL> getDefaultAcl()
// {
// return ZooDefs.Ids.CREATOR_ALL_ACL;
// }
//
// @Override
// public List<ACL> getAclForPath(String path)
// {
// return ZooDefs.Ids.CREATOR_ALL_ACL;
// }
// });
}
CuratorFramework client = builder.build();
client.start();
try
{
client.create().withMode(CreateMode.PERSISTENT).forPath("/beans/demo");
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
client.close();
}
}
}