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

Yiqun Lin edited comment on HDFS-12802 at 1/5/18 9:11 AM:
----------------------------------------------------------

[~elgoiri], patch looks good to me, only two comments:

* It would be better to define configs {{MAX_CACHE_TIME_MILLIS_KEY}} and 
{{MAX_CACHE_TIME_MILLIS_DEFAULT}} in {{DFSConfigKeys}} rather than in class 
{{MountTableResolver}}. It Then document this in {{hdfs-default.xml}}.
* In test {{testCacheCleaning}}, we can use {{TEST_MAX_CACHE_SIZE}} to replace 
{{10}} here {{assertTrue(cacheSize <= 10)}}.

I have one another thought but not must need to change in this JIRA: Can we use 
the util class {{com.google.common.cache.Cache}} in guava for control this? It 
will simplify the code a bunch I think. The maximum number size and expire time 
of cache can be set in guava Cache.
Sample codes
{code}
        Cache<String, String> cache = CacheBuilder.newBuilder()
                .expireAfterAccess(2000, TimeUnit.MILLISECONDS)
                .maximumSize(10)
                .removalListener(new RemovalListener<String, String>() {
                    @Override
                    public void onRemoval(RemovalNotification<String, String> 
removalNotification) {
                        System.out.println("Removing " + 
removalNotification.getKey());
                    }
                }).build();
        cache.put("1", "2");
        cache.put("2", "3");
        System.out.println("Sleeping");

        Thread.sleep(3000);
        System.out.println("Re-put");
        // latest access behavior to cache will trigger clean-up operation
        cache.put("3", "4");
        System.out.println("Size: " + cache.size());
{code}


was (Author: linyiqun):
[~elgoiri], I have one another thought: Can we use the util class 
{{com.google.common.cache.Cache}} in guava for control this? It will simplify 
the code a bunch I think. The maximum number size and expire time of cache can 
be set in guava Cache.
Sample codes
{code}
        Cache<String, String> cache = CacheBuilder.newBuilder()
                .expireAfterAccess(2000, TimeUnit.MILLISECONDS)
                .maximumSize(10)
                .removalListener(new RemovalListener<String, String>() {
                    @Override
                    public void onRemoval(RemovalNotification<String, String> 
removalNotification) {
                        System.out.println("Removing " + 
removalNotification.getKey());
                    }
                }).build();
        cache.put("1", "2");
        cache.put("2", "3");
        System.out.println("Sleeping");

        Thread.sleep(3000);
        System.out.println("Re-put");
        // latest access behavior to cache will trigger clean-up operation
        cache.put("3", "4");
        System.out.println("Size: " + cache.size());
{code}

> RBF: Control MountTableResolver cache size
> ------------------------------------------
>
>                 Key: HDFS-12802
>                 URL: https://issues.apache.org/jira/browse/HDFS-12802
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>            Reporter: Íñigo Goiri
>            Assignee: Íñigo Goiri
>         Attachments: HDFS-12802.000.patch, HDFS-12802.001.patch, 
> HDFS-12802.002.patch
>
>
> Currently, the {{MountTableResolver}} caches the resolutions for the 
> {{PathLocation}}. However, this cache can grow with no limits if there are a 
> lot of unique paths. Some of these cached resolutions might not be used at 
> all.
> The {{MountTableResolver}} should clean the {{locationCache}} periodically.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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

Reply via email to