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

Arpit Agarwal commented on HDFS-5484:
-------------------------------------

Thanks for the contribution Eric. I don't think Jenkins can test patches out of 
trunk.

Minor issues: 
# Extra indentation in body of {{FsVolumeImpl#toDatanodeStorage}}.
{code}
+  DatanodeStorage toDatanodeStorage() {
+      return new DatanodeStorage(storageID, DatanodeStorage.State.NORMAL, 
storageType);
+  }
{code}
# Javadoc for {{FsDatasetSpi#getBlockReports}} needs update for return value.

Since this is new functionality you can consider adding a test case to make 
sure the storage type is propagated from DN to NN and then to client via 
LocatedBlock.

> StorageType and State in DatanodeStorageInfo in NameNode is not accurate
> ------------------------------------------------------------------------
>
>                 Key: HDFS-5484
>                 URL: https://issues.apache.org/jira/browse/HDFS-5484
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: datanode
>    Affects Versions: Heterogeneous Storage (HDFS-2832)
>            Reporter: Eric Sirianni
>         Attachments: HDFS-5484-HDFS-2832.patch
>
>
> 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#6144)

Reply via email to