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

Weiwei Yang commented on HDFS-12082:
------------------------------------

Hi [~arpitagarwal]

Thanks for looking at this issue. This issue is a bit complex than it looks to 
be, please allow me to explain. 

Basically this is because following code isn't exactly working as expected,

{code}
this.blockInvalidateLimit = conf.getInt(
        DFSConfigKeys.DFS_BLOCK_INVALIDATE_LIMIT_KEY, blockInvalidateLimit);
{code}

*expected*:
# Use the value of {{dfs.block.invalidate.limit}} from hdfs-site.xml if set
# If {{dfs.block.invalidate.limit}} is not set in hdfs-site.xml, use max(20 * 
HBInterval, 1000)
(like you mentioned)

however in *actual*, it behaves like following
# Use the value of {{dfs.block.invalidate.limit}} from hdfs-site.xml if set
# Use the value of {{dfs.block.invalidate.limit}} in hdfs-default.xml if it is 
not set in hdfs-site.xml

it will NEVER return the default value given by argument 
{{blockInvalidateLimit}} in cluster env, because we always ship 
{{hdfs-default.xml}} in hdfs jar file, that contains property 
{{dfs.block.invalidate.limit=1000}}.

The logic in my patch is

Find the bigger value from configuration files (first hdfs-site.xml then back 
off to hdfs-default.xml) and compare it with 20*HB_interval, use the bigger one 
as the effective value for the invalidate limit. This will ensure that user 
won't throttle the block deletion too much for datanodes (even after HB 
interval is reconfigured). For example, if HB is 60s, we don't want to let user 
to set the limit to less than 1200, otherwise the block deletion will be too 
slow.

It might be possible to fix this in another way round, by respecting to its 
"original" idea, but that will need to add a method in Configuration class to 
tell if a property is configured by user (use getPropertySources?). A bit over 
complex?

Please let me know your thought.

Thanks

> BlockInvalidateLimit value is incorrectly set after namenode heartbeat 
> interval reconfigured 
> ---------------------------------------------------------------------------------------------
>
>                 Key: HDFS-12082
>                 URL: https://issues.apache.org/jira/browse/HDFS-12082
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: hdfs, namenode
>            Reporter: Weiwei Yang
>            Assignee: Weiwei Yang
>         Attachments: HDFS-12082.001.patch, HDFS-12082.002.patch, 
> HDFS-12082.003.patch
>
>
> HDFS-1477 provides an option to reconfigured namenode heartbeat interval 
> without restarting the namenode. When the heartbeat interval is reconfigured, 
> {{blockInvalidateLimit}} gets recounted
> {code}
>  this.blockInvalidateLimit = Math.max(20 * (int) (intervalSeconds),
>         DFSConfigKeys.DFS_BLOCK_INVALIDATE_LIMIT_DEFAULT);
> {code}
> this doesn't honor the existing value set by {{dfs.block.invalidate.limit}}.



--
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