diff --git a/src/meta/processors/Common.h b/src/meta/processors/Common.h index 8b97d7d33a0..dd7c30e6bf1 100644 --- a/src/meta/processors/Common.h +++ b/src/meta/processors/Common.h @@ -19,6 +19,16 @@ class LockUtils { static folly::SharedMutex lock; return lock; } + + static folly::SharedMutex& heartbeatLock() { + static folly::SharedMutex heartbeatLock; + return heartbeatLock; + } + + static folly::SharedMutex& snapshotLock() { + static folly::SharedMutex snapshotLock; + return snapshotLock; + } }; } // namespace meta diff --git a/src/meta/processors/admin/AgentHBProcessor.cpp b/src/meta/processors/admin/AgentHBProcessor.cpp index ac9c818588d..cecfd9485de 100644 --- a/src/meta/processors/admin/AgentHBProcessor.cpp +++ b/src/meta/processors/admin/AgentHBProcessor.cpp @@ -28,7 +28,7 @@ void AgentHBProcessor::process(const cpp2::AgentHBReq& req) { HostAddr agentAddr((*req.host_ref()).host, (*req.host_ref()).port); LOG(INFO) << "Receive heartbeat from " << agentAddr << ", role = AGENT"; - folly::SharedMutex::WriteHolder holder(LockUtils::lock()); + folly::SharedMutex::WriteHolder holder(LockUtils::heartbeatLock()); nebula::cpp2::ErrorCode ret = nebula::cpp2::ErrorCode::SUCCEEDED; do { // update agent host info diff --git a/src/meta/processors/admin/CreateBackupProcessor.cpp b/src/meta/processors/admin/CreateBackupProcessor.cpp index 4263ea4e567..b345a9f0e3a 100644 --- a/src/meta/processors/admin/CreateBackupProcessor.cpp +++ b/src/meta/processors/admin/CreateBackupProcessor.cpp @@ -97,7 +97,7 @@ void CreateBackupProcessor::process(const cpp2::CreateBackupReq& req) { return; } - folly::SharedMutex::WriteHolder holder(LockUtils::lock()); + folly::SharedMutex::WriteHolder holder(LockUtils::snapshotLock()); // get active storage host list auto activeHostsRet = ActiveHostsMan::getActiveHosts(kvstore_); if (!nebula::ok(activeHostsRet)) { diff --git a/src/meta/processors/admin/CreateSnapshotProcessor.cpp b/src/meta/processors/admin/CreateSnapshotProcessor.cpp index 5d5536822a4..90c7bbd89c6 100644 --- a/src/meta/processors/admin/CreateSnapshotProcessor.cpp +++ b/src/meta/processors/admin/CreateSnapshotProcessor.cpp @@ -31,7 +31,7 @@ void CreateSnapshotProcessor::process(const cpp2::CreateSnapshotReq&) { } auto snapshot = folly::sformat("SNAPSHOT_{}", MetaKeyUtils::genTimestampStr()); - folly::SharedMutex::WriteHolder holder(LockUtils::lock()); + folly::SharedMutex::WriteHolder holder(LockUtils::snapshotLock()); auto activeHostsRet = ActiveHostsMan::getActiveHosts(kvstore_); if (!nebula::ok(activeHostsRet)) { diff --git a/src/meta/processors/admin/DropSnapshotProcessor.cpp b/src/meta/processors/admin/DropSnapshotProcessor.cpp index b339f52dd35..641c03633fd 100644 --- a/src/meta/processors/admin/DropSnapshotProcessor.cpp +++ b/src/meta/processors/admin/DropSnapshotProcessor.cpp @@ -13,7 +13,7 @@ namespace meta { void DropSnapshotProcessor::process(const cpp2::DropSnapshotReq& req) { auto& snapshot = req.get_name(); - folly::SharedMutex::WriteHolder holder(LockUtils::lock()); + folly::SharedMutex::WriteHolder holder(LockUtils::snapshotLock()); // Check snapshot is exists auto key = MetaKeyUtils::snapshotKey(snapshot); diff --git a/src/meta/processors/admin/HBProcessor.cpp b/src/meta/processors/admin/HBProcessor.cpp index e699352c053..3892a900392 100644 --- a/src/meta/processors/admin/HBProcessor.cpp +++ b/src/meta/processors/admin/HBProcessor.cpp @@ -32,7 +32,7 @@ void HBProcessor::process(const cpp2::HBReq& req) { auto role = req.get_role(); LOG(INFO) << "Receive heartbeat from " << host << ", role = " << apache::thrift::util::enumNameSafe(role); - folly::SharedMutex::WriteHolder holder(LockUtils::lock()); + folly::SharedMutex::WriteHolder holder(LockUtils::heartbeatLock()); if (role == cpp2::HostRole::STORAGE) { if (!ActiveHostsMan::machineRegisted(kvstore_, host)) { LOG(INFO) << "Machine " << host << " is not registed"; diff --git a/src/meta/processors/index/CreateEdgeIndexProcessor.cpp b/src/meta/processors/index/CreateEdgeIndexProcessor.cpp index 7c83e3ca568..ab5e97f06e9 100644 --- a/src/meta/processors/index/CreateEdgeIndexProcessor.cpp +++ b/src/meta/processors/index/CreateEdgeIndexProcessor.cpp @@ -36,6 +36,7 @@ void CreateEdgeIndexProcessor::process(const cpp2::CreateEdgeIndexReq& req) { return; } + folly::SharedMutex::ReadHolder rHolder(LockUtils::snapshotLock()); folly::SharedMutex::WriteHolder holder(LockUtils::lock()); auto ret = getIndexID(space, indexName); if (nebula::ok(ret)) { diff --git a/src/meta/processors/index/CreateTagIndexProcessor.cpp b/src/meta/processors/index/CreateTagIndexProcessor.cpp index 5b44a8663be..e0ab420d686 100644 --- a/src/meta/processors/index/CreateTagIndexProcessor.cpp +++ b/src/meta/processors/index/CreateTagIndexProcessor.cpp @@ -36,6 +36,7 @@ void CreateTagIndexProcessor::process(const cpp2::CreateTagIndexReq& req) { return; } + folly::SharedMutex::ReadHolder rHolder(LockUtils::snapshotLock()); folly::SharedMutex::WriteHolder holder(LockUtils::lock()); auto ret = getIndexID(space, indexName); if (nebula::ok(ret)) { diff --git a/src/meta/processors/parts/DropSpaceProcessor.cpp b/src/meta/processors/parts/DropSpaceProcessor.cpp index b15c0cbbef8..aeeaaff8543 100644 --- a/src/meta/processors/parts/DropSpaceProcessor.cpp +++ b/src/meta/processors/parts/DropSpaceProcessor.cpp @@ -9,6 +9,7 @@ namespace nebula { namespace meta { void DropSpaceProcessor::process(const cpp2::DropSpaceReq& req) { + folly::SharedMutex::ReadHolder rHolder(LockUtils::snapshotLock()); folly::SharedMutex::WriteHolder holder(LockUtils::lock()); const auto& spaceName = req.get_space_name(); auto spaceRet = getSpaceId(spaceName); diff --git a/src/meta/processors/schema/AlterEdgeProcessor.cpp b/src/meta/processors/schema/AlterEdgeProcessor.cpp index d88cf0da2f1..6850e6fa914 100644 --- a/src/meta/processors/schema/AlterEdgeProcessor.cpp +++ b/src/meta/processors/schema/AlterEdgeProcessor.cpp @@ -15,6 +15,7 @@ void AlterEdgeProcessor::process(const cpp2::AlterEdgeReq& req) { CHECK_SPACE_ID_AND_RETURN(spaceId); const auto& edgeName = req.get_edge_name(); + folly::SharedMutex::ReadHolder rHolder(LockUtils::snapshotLock()); folly::SharedMutex::WriteHolder holder(LockUtils::lock()); auto ret = getEdgeType(spaceId, edgeName); if (!nebula::ok(ret)) { diff --git a/src/meta/processors/schema/AlterTagProcessor.cpp b/src/meta/processors/schema/AlterTagProcessor.cpp index e322e98e66f..c741b37fd6d 100644 --- a/src/meta/processors/schema/AlterTagProcessor.cpp +++ b/src/meta/processors/schema/AlterTagProcessor.cpp @@ -15,6 +15,7 @@ void AlterTagProcessor::process(const cpp2::AlterTagReq& req) { CHECK_SPACE_ID_AND_RETURN(spaceId); const auto& tagName = req.get_tag_name(); + folly::SharedMutex::ReadHolder rHolder(LockUtils::snapshotLock()); folly::SharedMutex::WriteHolder holder(LockUtils::lock()); auto ret = getTagId(spaceId, tagName); if (!nebula::ok(ret)) { diff --git a/src/meta/processors/schema/DropEdgeProcessor.cpp b/src/meta/processors/schema/DropEdgeProcessor.cpp index 74a53ce82af..b098bc14aeb 100644 --- a/src/meta/processors/schema/DropEdgeProcessor.cpp +++ b/src/meta/processors/schema/DropEdgeProcessor.cpp @@ -12,6 +12,7 @@ void DropEdgeProcessor::process(const cpp2::DropEdgeReq& req) { GraphSpaceID spaceId = req.get_space_id(); CHECK_SPACE_ID_AND_RETURN(spaceId); + folly::SharedMutex::ReadHolder rHolder(LockUtils::snapshotLock()); folly::SharedMutex::WriteHolder holder(LockUtils::lock()); const auto& edgeName = req.get_edge_name(); diff --git a/src/meta/processors/schema/DropTagProcessor.cpp b/src/meta/processors/schema/DropTagProcessor.cpp index 3bf1243e76d..bc37bc2b06b 100644 --- a/src/meta/processors/schema/DropTagProcessor.cpp +++ b/src/meta/processors/schema/DropTagProcessor.cpp @@ -12,6 +12,7 @@ void DropTagProcessor::process(const cpp2::DropTagReq& req) { GraphSpaceID spaceId = req.get_space_id(); CHECK_SPACE_ID_AND_RETURN(spaceId); + folly::SharedMutex::ReadHolder rHolder(LockUtils::snapshotLock()); folly::SharedMutex::WriteHolder holder(LockUtils::lock()); const auto& tagName = req.get_tag_name();