2

私は Curator 1.2.4 を使用していますがConnectionLossException、1 つの znode の子の変更を監視したいときに取得し続けます。

次に、このようなウォッチャーを実装しました

public class CuratorChildWatcherImpl implements CuratorWatcher {

    private CuratorFramework client;

    public CuratorChildWatcherImpl(CuratorFramework client) {
        this.client = client;
    }

    @Override
    public void process(WatchedEvent event) throws Exception {
       List<String> children=client.getChildren().usingWatcher(this).forPath(event.getPath());
       // Do other stuff with the children znode.
    }
}

が 10 秒に設定されているConnectionLossException場合、コードは 11 秒ごとにスローします。connectionTimeout例外はconnectionTimeoutプラス1秒のようです。なんで?

GetChildrenBuilderImpl が、1 秒ごとに接続状態をチェックする CuratorZookeeperClient の blockUntilConnectedOrTimeout メソッドを呼び出すことが判明したソース コードを確認しました。

2013-04-17 17:22:08 [ERROR]-[com.netflix.curator.ConnectionState.getZooKeeper(ConnectionState.java:97)] Connection timed out for connection string (...) and timeout (10000) / elapsed (10317913)
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
    at com.netflix.curator.ConnectionState.getZooKeeper(ConnectionState.java:94)
    at com.netflix.curator.CuratorZookeeperClient.getZooKeeper(CuratorZookeeperClient.java:107)
    at com.netflix.curator.framework.imps.CuratorFrameworkImpl.getZooKeeper(CuratorFrameworkImpl.java:413)
    at com.netflix.curator.framework.imps.GetChildrenBuilderImpl$3.call(GetChildrenBuilderImpl.java:213)
    at com.netflix.curator.framework.imps.GetChildrenBuilderImpl$3.call(GetChildrenBuilderImpl.java:202)
    at com.netflix.curator.RetryLoop.callWithRetry(RetryLoop.java:106)
    at com.netflix.curator.framework.imps.GetChildrenBuilderImpl.pathInForeground(GetChildrenBuilderImpl.java:198)
    at com.netflix.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:190)
    at com.netflix.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:37)
    at com.netflix.curator.framework.imps.NamespaceWatcher.process(NamespaceWatcher.java:56)
    at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:521)
4

1 に答える 1

4

これは、 CURATOR-24で追跡されている Curator/ZooKeeper インタラクションの既知のバグでした。ハングした ZK ハンドルを管理する現在の方法には改善が必要です。2.0.1-incubating バージョンで修正されました。

于 2013-05-25T02:35:19.620 に答える