[
https://issues.apache.org/jira/browse/HDFS-5483?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13867031#comment-13867031
]
Eric Sirianni commented on HDFS-5483:
-------------------------------------
This {{BLOCK_RECEIVED}} code path appears to modify the {{BlockInfo}}} list
directly:
{noformat}
BlockInfo.listInsert(BlockInfo, DatanodeStorageInfo) line: 308
DatanodeStorageInfo.addBlock(BlockInfo) line: 208
DatanodeDescriptor.addBlock(String, BlockInfo) line: 168
BlockManager.addStoredBlock(BlockInfo, DatanodeDescriptor, String,
DatanodeDescriptor, boolean) line: 2215
BlockManager.processAndHandleReportedBlock(DatanodeDescriptor, String,
Block, HdfsServerConstants$ReplicaState, DatanodeDescriptor) line: 2720
BlockManager.addBlock(DatanodeDescriptor, String, Block, String) line:
2695
BlockManager.processIncrementalBlockReport(DatanodeID, String,
StorageReceivedDeletedBlocks) line: 2769
FSNamesystem.processIncrementalBlockReport(DatanodeID, String,
StorageReceivedDeletedBlocks) line: 5285
NameNodeRpcServer.blockReceivedAndDeleted(DatanodeRegistration, String,
StorageReceivedDeletedBlocks[]) line: 993
{noformat}
Couldn't this corrupt the {{BlockInfo}} list if a datanode sent two
{{BLOCK_RECEIVED}}s for two different storages?
> NN should gracefully handle multiple block replicas on same DN
> --------------------------------------------------------------
>
> Key: HDFS-5483
> URL: https://issues.apache.org/jira/browse/HDFS-5483
> Project: Hadoop HDFS
> Issue Type: Sub-task
> Components: namenode
> Affects Versions: Heterogeneous Storage (HDFS-2832)
> Reporter: Arpit Agarwal
> Fix For: 3.0.0
>
> Attachments: h5483.02.patch
>
>
> {{BlockManager#reportDiff}} can cause an assertion failure in
> {{BlockInfo#moveBlockToHead}} if the block report shows the same block as
> belonging to more than one storage.
> The issue is that {{moveBlockToHead}} assumes it will find the
> DatanodeStorageInfo for the given block.
> Exception details:
> {code}
> java.lang.AssertionError: Index is out of bound
> at
> org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo.setNext(BlockInfo.java:152)
> at
> org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo.moveBlockToHead(BlockInfo.java:351)
> at
> org.apache.hadoop.hdfs.server.blockmanagement.DatanodeStorageInfo.moveBlockToHead(DatanodeStorageInfo.java:243)
> at
> org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.reportDiff(BlockManager.java:1841)
> at
> org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.processReport(BlockManager.java:1709)
> at
> org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.processReport(BlockManager.java:1637)
> at
> org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.blockReport(NameNodeRpcServer.java:984)
> at
> org.apache.hadoop.hdfs.server.datanode.TestDataNodeVolumeFailure.testVolumeFailure(TestDataNodeVolumeFailure.java:165)
> {code}
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)