i3wangyi commented on a change in pull request #688: Fix the watcher leakage 
issue
URL: https://github.com/apache/helix/pull/688#discussion_r373696834
 
 

 ##########
 File path: 
helix-core/src/main/java/org/apache/helix/manager/zk/zookeeper/ZkClient.java
 ##########
 @@ -1309,22 +1306,24 @@ public void run() throws Exception {
     }
   }
 
-  private void fireChildChangedEvents(final String path, Set<IZkChildListener> 
childListeners) {
+  private void fireChildChangedEvents(final String path, Set<IZkChildListener> 
childListeners, boolean pathExists) {
     try {
-      final ZkPathStatRecord pathStatRecord = new ZkPathStatRecord(path);
       for (final IZkChildListener listener : childListeners) {
         _eventThread.send(new ZkEvent("Children of " + path + " changed sent 
to " + listener) {
           @Override
           public void run() throws Exception {
-            // Reinstall watch before listener callbacks to check the znode 
status
-            if (!pathStatRecord.pathChecked()) {
-              pathStatRecord.recordPathStat(getStat(path, hasListeners(path)),
-                  OptionalLong.empty());
-            }
             List<String> children = null;
-            if (pathStatRecord.pathExists()) {
+            if (pathExists) {
               try {
+                //TODO: duplicate reads when multiple child listener exists
                 children = getChildren(path);
+                if (children != null) {
+                  for (String child : children) {
+                    // add the exists watcher for all child path, it's to 
prevent watcher missing
+                    // in case of node recreation shortly after deletion
+                    watchForData(path + "/" + child);
 
 Review comment:
   That's true... However, I do feel it's odd to connect the relationship 
between two separate classes as it violates the separation of concern. I could 
either delete the added part or just add the change but remove the code path in 
CallbackListener. Which one do you prefer? 
   To make things easier, I will mark it as a TODO (IMO, Re-install watchers 
should be the concern of ZkClient(Watcher) class, not CallbackHandler).

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to