[ 
https://issues.apache.org/jira/browse/CURATOR-477?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16625163#comment-16625163
 ] 

ASF GitHub Bot commented on CURATOR-477:
----------------------------------------

Github user dragonsinth commented on a diff in the pull request:

    https://github.com/apache/curator/pull/278#discussion_r219703563
  
    --- Diff: 
curator-recipes/src/main/java/org/apache/curator/framework/recipes/cache/TreeCache.java
 ---
    @@ -263,15 +284,31 @@ private void doRefreshData() throws Exception
                 {
                     if ( dataIsCompressed )
                     {
    -                    
client.getData().decompressed().usingWatcher(this).inBackground(this).forPath(path);
    +                    
maybeWatch(client.getData().decompressed()).forPath(path);
                     }
                     else
                     {
    -                    
client.getData().usingWatcher(this).inBackground(this).forPath(path);
    +                    maybeWatch(client.getData()).forPath(path);
                     }
                 }
             }
     
    +        private ErrorListenerPathable<byte[]> 
maybeWatch(GetDataWatchBackgroundStatable dataBuilder) {
    +            if (disableZkWatches) {
    +                return dataBuilder.inBackground(this);
    +            } else {
    +                return dataBuilder.usingWatcher(this).inBackground(this);
    +            }
    +        }
    +
    +        private ErrorListenerPathable<byte[]> maybeWatch(GetDataBuilder 
dataBuilder) {
    +            if (disableZkWatches) {
    +                return dataBuilder.inBackground(this);
    +            } else {
    +                return dataBuilder.usingWatcher(this).inBackground(this);
    +            }
    +        }
    +
    --- End diff --
    
    ```java
            private void doRefreshChildren() throws Exception
            {
                if ( treeState.get() == TreeState.STARTED )
                {
                    maybeWatch(client.getChildren()).forPath(path);
                }
            }
    
            private void doRefreshData() throws Exception
            {
                if ( treeState.get() == TreeState.STARTED )
                {
                    if ( dataIsCompressed )
                    {
                        
maybeWatch(client.getData().decompressed()).forPath(path);
                    }
                    else
                    {
                        maybeWatch(client.getData()).forPath(path);
                    }
                }
            }
    
            private <T, P extends Watchable<BackgroundPathable<T>> & 
BackgroundPathable<T>> Pathable<T> maybeWatch(P dataBuilder)
            {
                if ( disableZkWatches )
                {
                    return dataBuilder.inBackground(this);
                }
                else
                {
                    return dataBuilder.usingWatcher(this).inBackground(this);
                }
            }
    ```


> Ability to turn off Zk Watches in Curator Framework
> ---------------------------------------------------
>
>                 Key: CURATOR-477
>                 URL: https://issues.apache.org/jira/browse/CURATOR-477
>             Project: Apache Curator
>          Issue Type: Improvement
>          Components: Framework
>    Affects Versions: 4.0.1
>            Reporter: Rama Chavali
>            Priority: Major
>
> In our use case, we use *{{TreeCache}}* to get Zk Data periodically. We start 
> *{{TreeCache}}* read data and close it. In this use case, The 
> {{ZkWatchManager}} of {{ZooKeeper}} class keeps growing for every TreeCache 
> operation because new {{TreeNode}} objects are created and added there 
> leading to a memory leak. Also since we do not want the Watcher to 
> periodically watch, this creates unnecessary background operations.
> Can we introduce a builder flag in CuratorFramework's Builder some thing 
> called "createZkWatches" that we can use to turn the watchers off? The 
> default would be set to true to retain the current behaviour.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to