[ https://issues.apache.org/jira/browse/HDFS-9334?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14979765#comment-14979765 ]
He Xiaoqiao commented on HDFS-9334: ----------------------------------- the following scenario may occur ArrayIndexOutOfBoundsException: 1. more than one replica of Block located at same DN, then part circular are included in Double linked list, 2. delete one replica when DN hb/other, 3. delete File of Block belong to when do editlog tailer . not find proof through log yet. [~walter.k.su] FYI. > 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)