[ https://issues.apache.org/jira/browse/HDFS-14346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16789787#comment-16789787 ]
Chao Sun commented on HDFS-14346: --------------------------------- Thanks [~xkrogen] for the reviewing! changed the title and description. Regarding the added method, it is currently only used by the method: {code:java} public long getTimeDuration(String name, long defaultValue, TimeUnit unit) {code} which simply delegate to the former. It may also be useful when people uses a string to specify the default time duration. Taking the following config as example: {code:java} public static final String DFS_NAMENODE_REENCRYPT_SLEEP_INTERVAL_DEFAULT = "1m"; {code} which is used by the following code: {code:java} this.interval = conf.getTimeDuration(DFS_NAMENODE_REENCRYPT_SLEEP_INTERVAL_KEY, DFS_NAMENODE_REENCRYPT_SLEEP_INTERVAL_DEFAULT, TimeUnit.MILLISECONDS); {code} If someone (perhaps accidentally) set {{"10"}} for this config, we may want to use {{TimeUnit.MINUTE}} for the {{defaultUnit}} while {{TimeUnit.MILLISECONDS}} for the {{returnUnit}}. > 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