[ https://issues.apache.org/jira/browse/HDFS-5496?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13847063#comment-13847063 ]
Vinay commented on HDFS-5496: ----------------------------- bq. So for that part of the change, can we make sure that markAllDatanodesStale() is called before calling processMisReplicateBlocks? Currently in {{startActiveServices()}}, markAllDatanodesStale() is called before processMisReplicateBlocks(). Also queues are cleared unconditionally at this time which destroys the result of ongoing initialization. {code} blockManager.setPostponeBlocksFromFuture(false); blockManager.getDatanodeManager().markAllDatanodesStale(); blockManager.clearQueues(); blockManager.processAllPendingDNMessages();{code} So that means if we continue with the ongoing initialization, all further blocks will be added to postponed list only. right? Something we are missing here? > Make replication queue initialization asynchronous > -------------------------------------------------- > > Key: HDFS-5496 > URL: https://issues.apache.org/jira/browse/HDFS-5496 > Project: Hadoop HDFS > Issue Type: Sub-task > Components: namenode > Reporter: Kihwal Lee > Assignee: Vinay > Attachments: HDFS-5496.patch, HDFS-5496.patch > > > Today, initialization of replication queues blocks safe mode exit and certain > HA state transitions. For a big name space, this can take hundreds of seconds > with the FSNamesystem write lock held. During this time, important requests > (e.g. initial block reports, heartbeat, etc) are blocked. > The effect of delaying the initialization would be not starting replication > right away, but I think the benefit outweighs. If we make it asynchronous, > the work per iteration should be limited, so that the lock duration is > capped. > If full/incremental block reports and any other requests that modifies block > state properly performs replication checks while the blocks are scanned and > the queues populated in background, every block will be processed. (Some may > be done twice) The replication monitor should run even before all blocks are > processed. > This will allow namenode to exit safe mode and start serving immediately even > with a big name space. It will also reduce the HA failover latency. -- This message was sent by Atlassian JIRA (v6.1.4#6159)