harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: [jira] Created: (HARMONY-6675) Reducing timeout value in CanonicalPatchCache to fix a file not found error in Hadoop common
Date Tue, 16 Nov 2010 10:40:33 GMT
On 16 November 2010 06:56, Regis <xu.regis@gmail.com> wrote:
> On 2010-11-11 13:26, Regis wrote:
>>
>> On 2010-11-11 13:13, Charles Lee wrote:
>>>
>>> The cache is good for the performance. But when the cache meet link,
>>> there
>>> will be some difficult situation. The patch has attached is a
>>> workaround for
>>> the specified test case. The good choose for the timeout should bed
>>> discussed.
>>>
>>> On Thu, Nov 11, 2010 at 7:30 AM, Guillermo Cabrera (JIRA)
>>> <jira@apache.org>wrote:
>>>
>>>> Reducing timeout value in CanonicalPatchCache to fix a file not found
>>>> error
>>>> in Hadoop common
>>>>
>>>>
>>>> --------------------------------------------------------------------------------------------
>>>>
>>>>
>>>> Key: HARMONY-6675
>>>> URL: https://issues.apache.org/jira/browse/HARMONY-6675
>>>> Project: Harmony
>>>> Issue Type: New Feature
>>>> Environment: SLE v. 11, Apache Harmony 6
>>>> Reporter: Guillermo Cabrera
>>>> Priority: Minor
>>>>
>>>>
>>>> Testing Harmony Select (r1022137) with Hadoop common, we ran across the
>>>> following error:
>>>>
>>>> java.lang.RuntimeException: Error while running command to get file
>>>> permissions : org.apache.hadoop.util.Shell$ExitCodeException: /bin/ls:
>>>> /tmp/test1/file: No such file or directory
>>>>
>>>> Charles Lee (Apache Harmony developer) provided us with the following
>>>> answer:
>>>>
>>>> "For all the test case failures in
>>>> org.apache.hadoop.fs.TestLocalFSFileContextSymlink, the root cause is we
>>>> have a CanonicalPathCache under the File, so the file canonical path
>>>> will be
>>>> wrong if the test case highly stressed, (I remember the cache time is
>>>> set to
>>>> 10 minute)."
>>>>
>>>> His patch to fix this issue has been attached.
>>>>
>>>> --
>>>> This message is automatically generated by JIRA.
>>>> -
>>>> You can reply to this email to add a comment to the issue online.
>>>>
>>>>
>>>
>>>
>>
>> I think we should provide a way to configure this cache: enable/disable
>> it and timeout, something like
>> -Dorg.apache.harmony.canonpath.cache.timeout=60, this property could be
>> overwritten at run time.
>>
>> Also the default value of timeout, 10 minutes seems too long, maybe
>> reduce to one minute or half minute is reasonable for the most of
>> applications?
>>
>
> I propose following patch, which configure canonical path cache via system
> property 'org.apache.harmony.file.canonical.path.cache.timeout', set it to
> zero could disable the cache completely. And I also reduce default timeout
> from 10 minutes to 30 seconds. If no one object, I'll commit this path soon.
>
>
> Index:
> modules/luni/src/main/java/org/apache/harmony/luni/internal/io/FileCanonPathCache.java
> =====================================================================
> ---
> modules/luni/src/main/java/org/apache/harmony/luni/internal/io/FileCanonPathCache.java
> +++
> modules/luni/src/main/java/org/apache/harmony/luni/internal/io/FileCanonPathCache.java
> @@ -55,9 +55,29 @@ public class FileCanonPathCache {
>     private static Object lock = new Object();
>
>     /**
> -     * Expired time.
> +     * Expired time, 0 disable this cache.
>      */
> -    private static long timeout = 600000;
> +    private static long timeout = 30000;

Static variables should really be final (even if private).

> +
> +    /**
> +     * Whether to enable this cache.
> +     */
> +    private static boolean isEnable = true;
> +

Likewise.

> +    public static final String FILE_CANONICAL_PATH_CACHE_TIMEOUT =
> "org.apache.harmony.file.canonical.path.cache.timeout";
> +
> +    static {
> +        String value =
> System.getProperty(FILE_CANONICAL_PATH_CACHE_TIMEOUT);
> +        try {
> +            timeout = Long.parseLong(value);
> +        } catch (NumberFormatException e) {
> +            // use default timeout value
> +        }
> +
> +        if (timeout <= 0) {
> +            isEnable = false;
> +        }
> +    }
>
>     /**
>      * Retrieve element from cache.
> @@ -68,6 +88,10 @@ public class FileCanonPathCache {
>      *
>      */
>     public static String get(String path) {
> +        if (!isEnable) {
> +            return null;
> +        }
> +
>         CacheElement element = null;
>         synchronized (lock) {
>             element = cache.get(path);
> @@ -104,6 +128,10 @@ public class FileCanonPathCache {
>      *            the canonical path of <code>path</code>.
>      */
>     public static void put(String path, String canonicalPath) {
> +        if (!isEnable) {
> +            return;
> +        }
> +
>         CacheElement element = new CacheElement(canonicalPath);
>         synchronized (lock) {
>             if (cache.size() >= CACHE_SIZE) {
> @@ -120,6 +148,10 @@ public class FileCanonPathCache {
>      * Remove all elements from cache.
>      */
>     public static void clear() {
> +        if (!isEnable) {
> +            return;
> +        }
> +
>         synchronized (lock) {
>             cache.clear();
>             list.clear();
> @@ -132,5 +164,8 @@ public class FileCanonPathCache {
>
>     public static void setTimeout(long timeout) {
>         FileCanonPathCache.timeout = timeout;
> +        if (timeout <= 0) {
> +            isEnable = false;
> +        }
>     }
>  }
>
>
> --
> Best Regards,
> Regis.
>

Mime
View raw message