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

Surendra Singh Lilhore commented on HDFS-12556:
-----------------------------------------------

Some time {{TestPersistentStoragePolicySatisfier#testWithRestarts}} failing 
because of {{ArrayIndexOutOfBoundsException}}. This is happening because when 
block movement analysis is going on, same time NN receive block report from one 
DN and it will update the block storage list. 
{{BlockManager#getStorages(BlockInfo)}}  API create internal array {{storages}} 
based on current number of node for a block but later number of node is 
increased while filling the array and it cause 
{{ArrayIndexOutOfBoundsException}}.

{code}
  public DatanodeStorageInfo[] getStorages(BlockInfo block) {
    final DatanodeStorageInfo[] storages = new 
DatanodeStorageInfo[block.numNodes()];
    int i = 0;
    for(DatanodeStorageInfo s : blocksMap.getStorages(block)) {
      storages[i++] = s;
    }
    return storages;
  }
{code}

Block analysis should be done in read lock, so we can avoid in-between block 
location storage  update.

 Attached initial patch. Please review...

> [SPS] : Block movement analysis should be done in read lock.
> ------------------------------------------------------------
>
>                 Key: HDFS-12556
>                 URL: https://issues.apache.org/jira/browse/HDFS-12556
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: datanode, namenode
>            Reporter: Surendra Singh Lilhore
>            Assignee: Surendra Singh Lilhore
>         Attachments: HDFS-12556-HDFS-10285-01.patch
>
>
> {noformat}
> 2017-09-27 15:58:32,852 [StoragePolicySatisfier] ERROR 
> namenode.StoragePolicySatisfier 
> (StoragePolicySatisfier.java:handleException(308)) - StoragePolicySatisfier 
> thread received runtime exception. Stopping Storage policy satisfier work
> java.lang.ArrayIndexOutOfBoundsException: 1
>       at 
> org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.getStorages(BlockManager.java:4130)
>       at 
> org.apache.hadoop.hdfs.server.namenode.StoragePolicySatisfier.analyseBlocksStorageMovementsAndAssignToDN(StoragePolicySatisfier.java:362)
>       at 
> org.apache.hadoop.hdfs.server.namenode.StoragePolicySatisfier.run(StoragePolicySatisfier.java:236)
>       at java.lang.Thread.run(Thread.java:745)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to