Return-Path: X-Original-To: apmail-hadoop-common-commits-archive@www.apache.org Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D177717433 for ; Mon, 30 Mar 2015 17:52:20 +0000 (UTC) Received: (qmail 97734 invoked by uid 500); 30 Mar 2015 17:52:20 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 97664 invoked by uid 500); 30 Mar 2015 17:52:20 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 97655 invoked by uid 99); 30 Mar 2015 17:52:20 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 30 Mar 2015 17:52:20 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 4E2BFE03C7; Mon, 30 Mar 2015 17:52:20 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: cmccabe@apache.org To: common-commits@hadoop.apache.org Message-Id: <8713155c8c5a42dbb8e689f3c894556e@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: hadoop git commit: HDFS-7261. storageMap is accessed without synchronization in DatanodeDescriptor#updateHeartbeatState() (Brahma Reddy Battula via Colin P. McCabe) Date: Mon, 30 Mar 2015 17:52:20 +0000 (UTC) Repository: hadoop Updated Branches: refs/heads/trunk 5358b8316 -> 1feb9569f HDFS-7261. storageMap is accessed without synchronization in DatanodeDescriptor#updateHeartbeatState() (Brahma Reddy Battula via Colin P. McCabe) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/1feb9569 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/1feb9569 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/1feb9569 Branch: refs/heads/trunk Commit: 1feb9569f366a29ecb43592d71ee21023162c18f Parents: 5358b83 Author: Colin Patrick Mccabe Authored: Mon Mar 30 10:46:21 2015 -0700 Committer: Colin Patrick Mccabe Committed: Mon Mar 30 10:46:21 2015 -0700 ---------------------------------------------------------------------- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 4 +++ .../blockmanagement/DatanodeDescriptor.java | 29 ++++++++++++-------- 2 files changed, 21 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/1feb9569/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index efba80e..79a81c6 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -379,6 +379,10 @@ Release 2.8.0 - UNRELEASED HDFS-8002. Website refers to /trash directory. (Brahma Reddy Battula via aajisaka) + HDFS-7261. storageMap is accessed without synchronization in + DatanodeDescriptor#updateHeartbeatState() (Brahma Reddy Battula via Colin + P. McCabe) + Release 2.7.0 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/1feb9569/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java index d0d7a72..4731ad4 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/DatanodeDescriptor.java @@ -447,8 +447,10 @@ public class DatanodeDescriptor extends DatanodeInfo { if (checkFailedStorages) { LOG.info("Number of failed storage changes from " + this.volumeFailures + " to " + volFailures); - failedStorageInfos = new HashSet( - storageMap.values()); + synchronized (storageMap) { + failedStorageInfos = + new HashSet(storageMap.values()); + } } setCacheCapacity(cacheCapacity); @@ -480,8 +482,11 @@ public class DatanodeDescriptor extends DatanodeInfo { if (checkFailedStorages) { updateFailedStorage(failedStorageInfos); } - - if (storageMap.size() != reports.length) { + long storageMapSize; + synchronized (storageMap) { + storageMapSize = storageMap.size(); + } + if (storageMapSize != reports.length) { pruneStorageMap(reports); } } @@ -491,14 +496,14 @@ public class DatanodeDescriptor extends DatanodeInfo { * as long as they have associated block replicas. */ private void pruneStorageMap(final StorageReport[] reports) { - if (LOG.isDebugEnabled()) { - LOG.debug("Number of storages reported in heartbeat=" + reports.length + - "; Number of storages in storageMap=" + storageMap.size()); - } + synchronized (storageMap) { + if (LOG.isDebugEnabled()) { + LOG.debug("Number of storages reported in heartbeat=" + reports.length + + "; Number of storages in storageMap=" + storageMap.size()); + } - HashMap excessStorages; + HashMap excessStorages; - synchronized (storageMap) { // Init excessStorages with all known storages. excessStorages = new HashMap(storageMap); @@ -515,8 +520,8 @@ public class DatanodeDescriptor extends DatanodeInfo { LOG.info("Removed storage " + storageInfo + " from DataNode" + this); } else if (LOG.isDebugEnabled()) { // This can occur until all block reports are received. - LOG.debug("Deferring removal of stale storage " + storageInfo + - " with " + storageInfo.numBlocks() + " blocks"); + LOG.debug("Deferring removal of stale storage " + storageInfo + + " with " + storageInfo.numBlocks() + " blocks"); } } }