[
https://issues.apache.org/jira/browse/ZOOKEEPER-2155?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14498785#comment-14498785
]
Raul Gutierrez Segales commented on ZOOKEEPER-2155:
---------------------------------------------------
Thanks for the report [~linking12] - though, watches are expected to be cleared
when an Observer resyncs with the Leader. Given that clients get disconnected
when the Observer goes from OBSERVING → LOOKING, it's also expected for them to
reset their watches when the Observer becomes available again (i.e.: LOOKING →
OBSERVING).
> network is not good, the watcher in observer env will clear
> -----------------------------------------------------------
>
> Key: ZOOKEEPER-2155
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2155
> Project: ZooKeeper
> Issue Type: Bug
> Components: quorum
> Affects Versions: 3.4.6
> Reporter: linking12
> Priority: Critical
> Labels: moreinfo
> Fix For: 3.5.0
>
>
> When I set up a ZooKeeper ensemble that uses Observers, The network is not
> very good.
> I find all of the watcher disappear.
> I read the source code and find:
> When the observer connect to leader, will dump the DataTree from leader and
> rebuild in observer.
> But the datawachers and childWatches is cleared for this operation.
> after i change code like:
> WatchManager dataWatchers = zk.getZKDatabase().getDataTree()
> .getDataWatches();
> WatchManager childWatchers = zk.getZKDatabase().getDataTree()
> .getChildWatches();
> zk.getZKDatabase().clear();
> zk.getZKDatabase().deserializeSnapshot(leaderIs);
> zk.getZKDatabase().getDataTree().setDataWatches(dataWatchers);
> zk.getZKDatabase().getDataTree().setChildWatches(childWatchers);
> The watcher do not disappear
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)