You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by mp...@apache.org on 2017/06/05 21:06:31 UTC

kudu git commit: Add a workaround for LSAN bug #757

Repository: kudu
Updated Branches:
  refs/heads/master 732ee211a -> 0f31386d2


Add a workaround for LSAN bug #757

This adds a workaround for an LSAN bug[1] which causes some tests to
report false positive leaks when shutting down minicluster daemons.
The workaround simply retries the checks a few times to see if they go
away.

Hopefully this will reduce flakiness of exactly_once_writes-itest.

https://github.com/google/sanitizers/issues/757

Change-Id: Id79e4ed7fa6311bcabdb55b8d4fff9f9a4f242bc
Reviewed-on: http://gerrit.cloudera.org:8080/7052
Tested-by: Kudu Jenkins
Reviewed-by: Mike Percy <mp...@apache.org>
Reviewed-by: David Ribeiro Alves <da...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/0f31386d
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/0f31386d
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/0f31386d

Branch: refs/heads/master
Commit: 0f31386d26ffe614a66f5bc57f73cfa78f8a326b
Parents: 732ee21
Author: Todd Lipcon <to...@cloudera.com>
Authored: Thu Jun 1 18:20:33 2017 -0700
Committer: Mike Percy <mp...@apache.org>
Committed: Mon Jun 5 21:05:49 2017 +0000

----------------------------------------------------------------------
 src/kudu/server/generic_service.cc | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/0f31386d/src/kudu/server/generic_service.cc
----------------------------------------------------------------------
diff --git a/src/kudu/server/generic_service.cc b/src/kudu/server/generic_service.cc
index f4562b3..63dd4b2 100644
--- a/src/kudu/server/generic_service.cc
+++ b/src/kudu/server/generic_service.cc
@@ -124,7 +124,21 @@ void GenericServiceImpl::CheckLeaks(const CheckLeaksRequestPB* /*req*/,
 #else
   LOG(INFO) << "Checking for leaks (request via RPC)";
   resp->set_success(true);
-  resp->set_found_leaks(__lsan_do_recoverable_leak_check());
+
+  // Workaround for LSAN issue 757 (leak check can give false positives when
+  // run concurrently with other work). If LSAN reports a leak, we'll retry
+  // a few times and see if it goes away on its own. Any real leak would,
+  // by definition, not resolve itself over time.
+  //
+  // See https://github.com/google/sanitizers/issues/757
+  bool has_leaks = true;
+  for (int i = 0; i < 5; i++) {
+    has_leaks = __lsan_do_recoverable_leak_check();
+    if (!has_leaks) break;
+    SleepFor(MonoDelta::FromMilliseconds(5));
+  }
+
+  resp->set_found_leaks(has_leaks);
 #endif
 #undef LSAN_ENABLED
   rpc->RespondSuccess();