需要递归更新Zookeeper节点的ACL

时间:2019-01-22 05:50:48

标签: apache-zookeeper apache-curator

我有多个具有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();
    }
}
}

0 个答案:

没有答案