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