apache / dubbo

The java implementation of Apache Dubbo. An RPC and microservice framework.
https://dubbo.apache.org/
Apache License 2.0
40.44k stars 26.42k forks source link

CuratorZookeeperClient中isConnected判断逻辑 #4838

Closed hengyoush closed 2 years ago

hengyoush commented 5 years ago

目前的判断逻辑:

    public boolean isConnected() {
        return client.getZookeeperClient().isConnected();
    }

这里存在一个问题, 就是在client的实现org.apache.curator.framework.imps.CuratorFrameworkImpl中,close方法实现简要如下:

if ( state.compareAndSet(CuratorFrameworkState.STARTED, CuratorFrameworkState.STOPPED) ) {
...
client.close(); // 此处的client即client.getZookeeperClient()的返回值
}

所以原先的isConnected实现可能会出现问题, 可以将其修改为同时判断client.getState()和client.getZookeeperClient().isConnected()

wavesZh commented 5 years ago

client.close()会将isConnected.set(false);。如果close了,CuratorZookeeperClient#isConnected()的确会返回false,看起来没什么问题。你指的场景是什么?

CrazyHZM commented 2 years ago

No feedback for a long time, please close the issue temporarily. If there is still a problem, you can reopen it.