You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by ta...@apache.org on 2016/07/14 19:05:05 UTC

[08/18] incubator-impala git commit: IMPALA-3757: Add missing lock in RuntimeProfile::ComputeTimeInProfile

IMPALA-3757: Add missing lock in RuntimeProfile::ComputeTimeInProfile

We've seen a number of issues that appear to be a race
around the RuntimeProfile handling on the coordinator. We
don't have a consistent repro and haven't been able to find
the root cause of the crashes/hangs, but we have seen a
number of stacks from crashes that include the following
frames:

...
RuntimeProfile::ComputeTimeInProfile
RuntimeProfile::UpdateAverage
Coordinator::UpdateAverageProfile
Coordinator::UpdateFragmentExecStatus
...

This patch fixes a case where we iterate over children_
without holding the lock. I can't prove that this causes the
hangs but we certainly should fix this regardless.

Testing: Passed several exhaustive test runs successfully.

Change-Id: Ibb40ebfa2e58ecaa8668d30ad92003fc75483517
Reviewed-on: http://gerrit.cloudera.org:8080/3397
Reviewed-by: Matthew Jacobs <mj...@cloudera.com>
Tested-by: Internal Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/d75f327a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/d75f327a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/d75f327a

Branch: refs/heads/master
Commit: d75f327adda7377300e448cdda12d321da837efe
Parents: 59cdec2
Author: Matthew Jacobs <mj...@cloudera.com>
Authored: Thu Jun 16 16:31:48 2016 -0700
Committer: Taras Bobrovytsky <ta...@apache.org>
Committed: Thu Jul 14 19:04:44 2016 +0000

----------------------------------------------------------------------
 be/src/util/runtime-profile.cc | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/d75f327a/be/src/util/runtime-profile.cc
----------------------------------------------------------------------
diff --git a/be/src/util/runtime-profile.cc b/be/src/util/runtime-profile.cc
index 714180a..ce5e934 100644
--- a/be/src/util/runtime-profile.cc
+++ b/be/src/util/runtime-profile.cc
@@ -363,8 +363,11 @@ void RuntimeProfile::ComputeTimeInProfile(int64_t total) {
   local_time_percent_ = ::min(1.0, local_time_percent_) * 100;
 
   // Recurse on children
-  for (int i = 0; i < children_.size(); ++i) {
-    children_[i].first->ComputeTimeInProfile(total);
+  {
+    lock_guard<SpinLock> l(children_lock_);
+    for (int i = 0; i < children_.size(); ++i) {
+      children_[i].first->ComputeTimeInProfile(total);
+    }
   }
 }