You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by al...@apache.org on 2020/01/29 19:07:03 UTC

[kudu] 01/02: [master] fix race in MiniMaster-based scenarios

This is an automated email from the ASF dual-hosted git repository.

alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git

commit e730ebd7ee0577e43098af697d2bace4c7384da3
Author: Alexey Serbin <al...@apache.org>
AuthorDate: Tue Jan 28 20:59:25 2020 -0800

    [master] fix race in MiniMaster-based scenarios
    
    I saw a warning from the ThreadSanitizer while running the
    TsTabletManagerITest.TestTableStats scenario (TSAN build).  It turned
    to be a test-only race in scenarios where MiniMaster is involved in
    single-master test mini-cluster if calling MiniMaster::Shutdown()
    after MiniMaster::Start() but before the catalog manager has completed
    its initialization.
    
    The relevant snippet from the warning:
    
    WARNING: ThreadSanitizer: data race (pid=6972)
      Write of size 8 at 0x7b7000000c70 by main thread:
        #0 pthread_cond_destroy
        #1 ConditionVariable::~ConditionVariable()
        #2 CountDownLatch::~CountDownLatch()
        #3 Promise<Status>::~Promise()
        #4 Master::~Master() src/kudu/master/master.cc:129
        #5 Master::~Master() src/kudu/master/master.cc:127
        #6 std::__1::default_delete<Master>::operator(Master*)
        #7 std::__1::unique_ptr<Master, std::__1::default_delete<Master>>::reset(Master*)
        #8 MiniMaster::Shutdown() src/kudu/master/mini_master.cc:118
    ...
    
      Previous read of size 8 at 0x7b7000000c70 by thread T20 (mutexes: write M50614):
        #0 pthread_cond_broadcast
        #1 ConditionVariable::Broadcast()
        #2 CountDownLatch::CountDown(int)
        #3 CountDownLatch::CountDown()
        #4 Promise<Status>::Set(Status const&)
        #5 Master::InitCatalogManagerTask() src/kudu/master/master.cc:206
    ...
    
    Change-Id: If5122a16bb04f089fe1ec4a0d0ff157164ebfdc4
    Reviewed-on: http://gerrit.cloudera.org:8080/15125
    Tested-by: Kudu Jenkins
    Reviewed-by: Adar Dembo <ad...@cloudera.com>
---
 src/kudu/master/master.cc | 1 +
 src/kudu/master/master.h  | 6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/kudu/master/master.cc b/src/kudu/master/master.cc
index 6594c96..650b4fc 100644
--- a/src/kudu/master/master.cc
+++ b/src/kudu/master/master.cc
@@ -249,6 +249,7 @@ void Master::Shutdown() {
     UnregisterAllServices();
 
     // 2. Shut down the master's subsystems.
+    init_pool_->Shutdown();
     maintenance_manager_->Shutdown();
     catalog_manager_->Shutdown();
     fs_manager_->UnsetErrorNotificationCb(ErrorHandlerType::DISK_ERROR);
diff --git a/src/kudu/master/master.h b/src/kudu/master/master.h
index 783c39f..4f7ce66 100644
--- a/src/kudu/master/master.h
+++ b/src/kudu/master/master.h
@@ -142,13 +142,13 @@ class Master : public kserver::KuduServer {
   std::unique_ptr<CatalogManager> catalog_manager_;
   std::unique_ptr<MasterPathHandlers> path_handlers_;
 
-  // For initializing the catalog manager.
-  std::unique_ptr<ThreadPool> init_pool_;
-
   // The status of the master initialization. This is set
   // by the async initialization task.
   Promise<Status> init_status_;
 
+  // For initializing the catalog manager.
+  std::unique_ptr<ThreadPool> init_pool_;
+
   MasterOptions opts_;
 
   ServerRegistrationPB registration_;