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

Arpit Agarwal resolved HDFS-6577.
---------------------------------

    Resolution: Not a Problem

Resolving, feel free to respond if you disagree.

> Failure to create FinalizeCommand
> ---------------------------------
>
>                 Key: HDFS-6577
>                 URL: https://issues.apache.org/jira/browse/HDFS-6577
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: namenode
>    Affects Versions: 2.4.0
>            Reporter: Yongjun Zhang
>            Assignee: Yongjun Zhang
>
> I visually see a bug in NameNodeRpcServer.java, 
> {code}
>  @Override // DatanodeProtocol
>   public DatanodeCommand blockReport(DatanodeRegistration nodeReg,
>       String poolId, StorageBlockReport[] reports) throws IOException {
>     verifyRequest(nodeReg);
>     if(blockStateChangeLog.isDebugEnabled()) {
>       blockStateChangeLog.debug("*BLOCK* NameNode.blockReport: "
>            + "from " + nodeReg + ", reports.length=" + reports.length);
>     }
>     final BlockManager bm = namesystem.getBlockManager();
>     boolean noStaleStorages = false;
>     for(StorageBlockReport r : reports) {
>       final BlockListAsLongs blocks = new BlockListAsLongs(r.getBlocks());
>       noStaleStorages = bm.processReport(nodeReg, r.getStorage(), poolId, 
> blocks);
>       metrics.incrStorageBlockReportOps();
>     }
>     if (nn.getFSImage().isUpgradeFinalized() &&
>         !nn.isStandbyState() &&
>         noStaleStorages) {
>       return new FinalizeCommand(poolId);
>     }
>     return null;
>   }
> {code}
> noStaleStorage is initialized to false, then in the for loop {{ 
> for(StorageBlockReport r : reports) {}} it could be changed to true. 
> The problem is, since it's a loop of all reports, the value returned from the 
> last blockreport (the last iteration) will set it to the final value. Even if 
> it was set to true in the middle of a loop, the final iteration could 
> overwrite it to false. Similarly, if it was set to false in the middle, and 
> the final iter could overwrite it to true.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to