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

He Xiaoqiao commented on HDFS-9334:
-----------------------------------

hi [~walter.k.su], the case happens at SBN when do editlog tailer. Stack trace:
{code:xml}
2015-10-28 23:14:36,737 ERROR 
org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader: Encountered exception 
on operation DeleteOp [length=0, path=$PATH, timestamp=1446044851382, 
RpcClientId=42f62f2c-2d6a-4bfd-8988-e1ae9fe15b34, RpcCallId=53195, 
opCode=OP_DELETE, txid=26131111424]
java.lang.ArrayIndexOutOfBoundsException: -2
        at 
org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo.setPrevious(BlockInfo.java:140)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo.listRemove(BlockInfo.java:333)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.DatanodeStorageInfo.removeBlock(DatanodeStorageInfo.java:227)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.DatanodeDescriptor.removeBlock(DatanodeDescriptor.java:288)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.BlocksMap.removeBlock(BlocksMap.java:125)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.removeBlock(BlockManager.java:3212)
        at 
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.removeBlocksAndUpdateSafemodeTotal(FSNamesystem.java:3473)
        at 
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.removePathAndBlocks(FSNamesystem.java:3445)
        at 
org.apache.hadoop.hdfs.server.namenode.FSDirectory.unprotectedDelete(FSDirectory.java:1418)
        at 
org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.applyEditLogOp(FSEditLogLoader.java:502)
        at 
org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadEditRecords(FSEditLogLoader.java:224)
        at 
org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadFSEdits(FSEditLogLoader.java:133)
        at 
org.apache.hadoop.hdfs.server.namenode.FSImage.loadEdits(FSImage.java:805)
        at 
org.apache.hadoop.hdfs.server.namenode.FSImage.loadEdits(FSImage.java:786)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer.doTailEdits(EditLogTailer.java:230)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread.doWork(EditLogTailer.java:324)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread.access$200(EditLogTailer.java:282)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread$1.run(EditLogTailer.java:299)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:356)
        at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1536)
        at 
org.apache.hadoop.security.SecurityUtil.doAsLoginUserOrFatal(SecurityUtil.java:413)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread.run(EditLogTailer.java:295)
2015-10-28 23:14:36,739 FATAL 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer: Unknown error 
encountered while tailing edits. Shutting down standby NN.
java.io.IOException: java.lang.ArrayIndexOutOfBoundsException: -2
        at 
org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadEditRecords(FSEditLogLoader.java:234)
        at 
org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadFSEdits(FSEditLogLoader.java:133)
        at 
org.apache.hadoop.hdfs.server.namenode.FSImage.loadEdits(FSImage.java:805)
        at 
org.apache.hadoop.hdfs.server.namenode.FSImage.loadEdits(FSImage.java:786)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer.doTailEdits(EditLogTailer.java:230)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread.doWork(EditLogTailer.java:324)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread.access$200(EditLogTailer.java:282)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread$1.run(EditLogTailer.java:299)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:356)
        at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1536)
        at 
org.apache.hadoop.security.SecurityUtil.doAsLoginUserOrFatal(SecurityUtil.java:413)
        at 
org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer$EditLogTailerThread.run(EditLogTailer.java:295)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -2
        at 
org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo.setPrevious(BlockInfo.java:140)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo.listRemove(BlockInfo.java:333)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.DatanodeStorageInfo.removeBlock(DatanodeStorageInfo.java:227)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.DatanodeDescriptor.removeBlock(DatanodeDescriptor.java:288)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.BlocksMap.removeBlock(BlocksMap.java:125)
        at 
org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.removeBlock(BlockManager.java:3212)
        at 
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.removeBlocksAndUpdateSafemodeTotal(FSNamesystem.java:3473)
        at 
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.removePathAndBlocks(FSNamesystem.java:3445)
        at 
org.apache.hadoop.hdfs.server.namenode.FSDirectory.unprotectedDelete(FSDirectory.java:1418)
        at 
org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.applyEditLogOp(FSEditLogLoader.java:502)
        at 
org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader.loadEditRecords(FSEditLogLoader.java:224)
        ... 12 more
{code}

> NameNode crash caused by ArrayIndexOutOfBoundsException
> -------------------------------------------------------
>
>                 Key: HDFS-9334
>                 URL: https://issues.apache.org/jira/browse/HDFS-9334
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: namenode
>    Affects Versions: 2.4.1
>            Reporter: He Xiaoqiao
>            Assignee: He Xiaoqiao
>
> when remove block from list of blocks by method {{listRemove}} in 
> {{BlockInfo.java}}, and {{findStorageInfo(storage)}} return -1 means not 
> found, {{prev.setNext(prev.findStorageInfo(storage), next)}} or 
> {{next.setPrevious(next.findStorageInfo(storage), prev)}} could throw 
> ArrayIndexOutOfBoundsException cause NameNode Process exit.
> {code:title=BlockInfo.java}
>   BlockInfo listRemove(BlockInfo head, DatanodeStorageInfo storage) {
>     if(head == null)
>       return null;
>     int dnIndex = this.findStorageInfo(storage);
>     if(dnIndex < 0) // this block is not on the data-node list
>       return head;
>     BlockInfo next = this.getNext(dnIndex);
>     BlockInfo prev = this.getPrevious(dnIndex);
>     this.setNext(dnIndex, null);
>     this.setPrevious(dnIndex, null);
>     if(prev != null)
>       prev.setNext(prev.findStorageInfo(storage), next);
>     if(next != null)
>       next.setPrevious(next.findStorageInfo(storage), prev);
>     if(this == head)  // removing the head
>       head = next;
>     return head;
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to