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

Erik Krogen commented on HDFS-14346:
------------------------------------

Thanks [~csun], makes sense. I gave the patch a thorough review and you have a 
+1 from me. My only small concern -- should the new {{getTimeDurationHelper()}} 
be {{private}}? {{Configuration}} is a very public interface and it seems 
better not to expose it if we don't have to.

> Better time precision in getTimeDuration
> ----------------------------------------
>
>                 Key: HDFS-14346
>                 URL: https://issues.apache.org/jira/browse/HDFS-14346
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>          Components: namenode
>            Reporter: Chao Sun
>            Assignee: Chao Sun
>            Priority: Minor
>         Attachments: HDFS-14346.000.patch
>
>
> Currently, {{Configuration#getTimeDuration}} has the following signature:
> {code}
>   /**
>    * Return time duration in the given time unit. Valid units are encoded in
>    * properties as suffixes: nanoseconds (ns), microseconds (us), milliseconds
>    * (ms), seconds (s), minutes (m), hours (h), and days (d).
>    * @param name Property name
>    * @param defaultValue Value returned if no mapping exists.
>    * @param unit Unit to convert the stored property, if it exists.
>    * @throws NumberFormatException If the property stripped of its unit is not
>    *         a number
>    */
>   public long getTimeDuration(String name, long defaultValue, TimeUnit unit)
> {code}
> This may lose precision in case the default time unit is larger than the time 
> unit that the configuration value is converted to in the call sites of this 
> method. For instance, in {{EditLogTailer}} this method is used in the 
> following manner:
> {code}
>     logRollPeriodMs = conf.getTimeDuration(
>         DFSConfigKeys.DFS_HA_LOGROLL_PERIOD_KEY,
>         DFSConfigKeys.DFS_HA_LOGROLL_PERIOD_DEFAULT, TimeUnit.SECONDS) * 1000;
>     sleepTimeMs = conf.getTimeDuration(
>         DFSConfigKeys.DFS_HA_TAILEDITS_PERIOD_KEY,
>         DFSConfigKeys.DFS_HA_TAILEDITS_PERIOD_DEFAULT, TimeUnit.SECONDS) * 
> 1000;
> {code}
> in both cases, the default time unit is second, and the configuration value 
> is converted into milli-seconds. Precision is lost when people want to 
> specify sub-second time duration such as {{100ms}}, which will be converted 
> to {{0ms}}.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to