You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ad...@apache.org on 2016/07/14 20:56:12 UTC
[2/2] incubator-kudu git commit: master: fix initialization race with
consensus RPCs
master: fix initialization race with consensus RPCs
The master initialization order is such that the various RPC services are
brought up before the catalog manager. With multiple masters, it's possible
for a master to receive a consensus-related RPC at this delicate time,
causing a crash.
I spent some time trying to unravel this mess but it proved too thorny, so I
relaxed the CHECK instead. The other masters appear to cope with this error.
There's no explicit test here, but this path is exercised by a stress test
in a follow-on patch.
Change-Id: I3d1276dd4d3c2f555d63d97d7a16d54181a352b7
Reviewed-on: http://gerrit.cloudera.org:8080/3605
Reviewed-by: Dan Burkert <da...@cloudera.com>
Tested-by: Kudu Jenkins
Project: http://git-wip-us.apache.org/repos/asf/incubator-kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kudu/commit/2525ad09
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kudu/tree/2525ad09
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kudu/diff/2525ad09
Branch: refs/heads/master
Commit: 2525ad094234e6bc901b8bc544801ca00e8f411e
Parents: 37f1604
Author: Adar Dembo <ad...@cloudera.com>
Authored: Fri Jul 8 18:52:38 2016 -0700
Committer: Adar Dembo <ad...@cloudera.com>
Committed: Thu Jul 14 20:55:22 2016 +0000
----------------------------------------------------------------------
src/kudu/master/catalog_manager.cc | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/2525ad09/src/kudu/master/catalog_manager.cc
----------------------------------------------------------------------
diff --git a/src/kudu/master/catalog_manager.cc b/src/kudu/master/catalog_manager.cc
index 819b3a3..07d8487 100644
--- a/src/kudu/master/catalog_manager.cc
+++ b/src/kudu/master/catalog_manager.cc
@@ -1764,7 +1764,9 @@ Status CatalogManager::GetTabletPeer(const string& tablet_id,
// Note: CatalogManager has only one table, 'sys_catalog', with only
// one tablet.
shared_lock<LockType> l(lock_);
- CHECK(sys_catalog_.get() != nullptr) << "sys_catalog_ must be initialized!";
+ if (!sys_catalog_) {
+ return Status::ServiceUnavailable("Systable not yet initialized");
+ }
if (sys_catalog_->tablet_id() == tablet_id) {
*tablet_peer = sys_catalog_->tablet_peer();
} else {