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)

Reply via email to