创建znode时导致MARSHALLINGERROR的原因是什么?

时间:2017-04-27 22:36:17

标签: apache-zookeeper

我正在使用createAsync() nuget包做一个简单的ZooKeeperNetEx,它会抛出一个由MARSHALLINGERROR触发的异常。

以下是两行摘要(在这些行之间,连接已成功确认给Zookeeper):

  var Zoo = new ZooKeeper("localhost:50002", 5000, new ClusterWatcher());
  . . .
  var parentNode = Zoo.createAsync("/election", null, null, CreateMode.PERSISTENT).Result 

我不明白。当然,ClusterWatcher是我自己的派生自Watcher的类。是的,我用C#写这个,但是这个问题很简单,我认为这不重要。如果重要的话,主机正在运行Windows 10 Pro。

1 个答案:

答案 0 :(得分:0)

可以通过不指定ACL模式(您似乎通过null)来触发此异常。在Java中,您可以为ACL模式传递预定义列表ZooDefs.Ids.OPEN_ACL_UNSAFE(例如,或该类中的其他一个);对于C#,可能会有一个类似命名的常量。

在Java客户端库中,这是一个方便常量,定义为:

/**
 * This is a completely open ACL .
 */
public final ArrayList<ACL> OPEN_ACL_UNSAFE = new ArrayList<ACL>(
        Collections.singletonList(new ACL(Perms.ALL, ANYONE_ID_UNSAFE))
);