Eric Sirianni created HDFS-5667:
-----------------------------------

             Summary: StorageType and State in DatanodeStorageInfo in NameNode 
is not accurate
                 Key: HDFS-5667
                 URL: https://issues.apache.org/jira/browse/HDFS-5667
             Project: Hadoop HDFS
          Issue Type: Sub-task
          Components: datanode
    Affects Versions: Heterogeneous Storage (HDFS-2832)
            Reporter: Eric Sirianni
             Fix For: Heterogeneous Storage (HDFS-2832)


The fields in DatanodeStorageInfo are updated from two distinct paths:
# block reports
# storage reports (via heartbeats)

The {{state}} and {{storageType}} fields are updated via the Block Report.  
However, as seen in the code blow, these fields are populated from a "dummy" 
{{DatanodeStorage}} object constructed in the DataNode:
{code}
BPServiceActor.blockReport() {
//...
        // Dummy DatanodeStorage object just for sending the block report.
        DatanodeStorage dnStorage = new DatanodeStorage(storageID);
//...
}
{code}

The net effect is that the {{state}} and {{storageType}} fields are always the 
default of {{NORMAL}} and {{DISK}} in the NameNode.

The recommended fix is to change {{FsDatasetSpi.getBlockReports()}} from:
{code}
public Map<String, BlockListAsLongs> getBlockReports(String bpid);
{code}
to:
{code}
public Map<DatanodeStorage, BlockListAsLongs> getBlockReports(String bpid);
{code}
thereby allowing {{BPServiceActor}} to send the "real" {{DatanodeStorage}} 
object with the block report.



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)

Reply via email to