Paul Ward created HDFS-14610:
--------------------------------

             Summary: HashMap is not thread safe. Field storageMap is typically 
synchronized by storageMap. However, in one place, field storageMap is not 
protected with synchronized.
                 Key: HDFS-14610
                 URL: https://issues.apache.org/jira/browse/HDFS-14610
             Project: Hadoop HDFS
          Issue Type: Bug
            Reporter: Paul Ward


The field *storageMap* (a *HashMap*)

[https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java#L155]

is typically protected by synchronization on *storageMap*, e.g.,

[https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java#L294]

[https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java#L443]

[https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java#L484]

For a total of 9 locations.

The reason is because *HashMap* is not thread safe.

However, here:

[https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java#L455]


{{ DatanodeStorageInfo storage =}}
{{   storageMap.get(report.getStorage().getStorageID());}}

It is not synchronized.

Note that in the same method:

[https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java#L484]

*storageMap* is again protected by synchronization:


{{ synchronized (storageMap) {}}
{{   storageMapSize = storageMap.size();}}
{{ }}}

I submitted a CR:

 

[https://github.com/apache/hadoop/pull/1015]

 

This CR protected the above instance (line 455 ) with synchronization
 like in line 484 and in all other occurrences.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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

Reply via email to