[ 
https://issues.apache.org/jira/browse/HDFS-14346?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Erik Krogen updated HDFS-14346:
-------------------------------
       Resolution: Fixed
     Hadoop Flags: Reviewed
    Fix Version/s: 3.1.3
                   3.2.1
                   3.3.0
                   3.0.4
           Status: Resolved  (was: Patch Available)

Just committed this to branch-3.0, branch-3.1, branch-3.2, trunk. Thanks for 
the contribution [~csun]!

> 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
>             Fix For: 3.0.4, 3.3.0, 3.2.1, 3.1.3
>
>         Attachments: HDFS-14346.000.patch, HDFS-14346.001.patch, 
> HDFS-14346.002.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