Xiao Chen created HDFS-9250: ------------------------------- Summary: LocatedBlock#addCachedLoc may throw ArrayStoreException when cache is empty Key: HDFS-9250 URL: https://issues.apache.org/jira/browse/HDFS-9250 Project: Hadoop HDFS Issue Type: Bug Components: HDFS Reporter: Xiao Chen Assignee: Xiao Chen
We may see the following exception: {noformat} java.lang.ArrayStoreException at java.util.ArrayList.toArray(ArrayList.java:389) at org.apache.hadoop.hdfs.protocol.LocatedBlock.addCachedLoc(LocatedBlock.java:205) at org.apache.hadoop.hdfs.server.namenode.CacheManager.setCachedLocations(CacheManager.java:907) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsUpdateTimes(FSNamesystem.java:1974) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getBlockLocationsInt(FSNamesystem.java:1873) {noformat} The cause is that in LocatedBlock.java, when {{addCachedLoc}}: - Passed in parameter {{loc}}, which is type {{DatanodeDescriptor}}, is added to {{cachedList}} - {{cachedList}} was assigned to {{EMPTY_LOCS}}, which is type {{DatanodeInfoWithStorage}}. Both {{DatanodeDescriptor}} and {{DatanodeInfoWithStorage}} are subclasses of {{DatanodeInfo}} but do not inherit from each other, resulting in the ArrayStoreException. -- This message was sent by Atlassian JIRA (v6.3.4#6332)