From abf0898aa660ac11b9a1e913d43b4fc9aac5d907 Mon Sep 17 00:00:00 2001 From: yaphet <4414314+darionyaphet@users.noreply.github.com> Date: Wed, 9 Mar 2022 10:01:19 +0800 Subject: [PATCH] machine not registed should response leader address (#3950) Conflicts: src/meta/processors/BaseProcessor.h --- src/clients/meta/MetaClient.cpp | 7 ++++--- src/meta/processors/BaseProcessor.h | 19 +++++++++++++------ src/meta/processors/admin/HBProcessor.cpp | 10 ++++++++++ src/meta/processors/admin/HBProcessor.h | 2 ++ 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/clients/meta/MetaClient.cpp b/src/clients/meta/MetaClient.cpp index 684e5ce2d15..4a57894c53a 100644 --- a/src/clients/meta/MetaClient.cpp +++ b/src/clients/meta/MetaClient.cpp @@ -741,11 +741,12 @@ void MetaClient::getResponse(Request req, } auto&& resp = t.value(); - if (resp.get_code() == nebula::cpp2::ErrorCode::SUCCEEDED) { + auto code = resp.get_code(); + if (code == nebula::cpp2::ErrorCode::SUCCEEDED) { // succeeded pro.setValue(respGen(std::move(resp))); return; - } else if (resp.get_code() == nebula::cpp2::ErrorCode::E_LEADER_CHANGED) { + } else if (code == nebula::cpp2::ErrorCode::E_LEADER_CHANGED) { updateLeader(resp.get_leader()); if (retry < retryLimit) { evb->runAfterDelay( @@ -768,7 +769,7 @@ void MetaClient::getResponse(Request req, FLAGS_meta_client_retry_interval_secs * 1000); return; } - } else if (resp.get_code() == nebula::cpp2::ErrorCode::E_CLIENT_SERVER_INCOMPATIBLE) { + } else if (code == nebula::cpp2::ErrorCode::E_CLIENT_SERVER_INCOMPATIBLE) { pro.setValue(respGen(std::move(resp))); return; } else if (resp.get_code() == nebula::cpp2::ErrorCode::E_MACHINE_NOT_FOUND) { diff --git a/src/meta/processors/BaseProcessor.h b/src/meta/processors/BaseProcessor.h index 76430930cf4..4c4b1c4a947 100644 --- a/src/meta/processors/BaseProcessor.h +++ b/src/meta/processors/BaseProcessor.h @@ -73,17 +73,24 @@ class BaseProcessor { delete this; } - void handleErrorCode(nebula::cpp2::ErrorCode code, - GraphSpaceID spaceId = kDefaultSpaceId, - PartitionID partId = kDefaultPartId) { + /** + * @brief Set error code and handle leader changed. + * + * @param code + */ + void handleErrorCode(nebula::cpp2::ErrorCode code) { resp_.code_ref() = code; if (code == nebula::cpp2::ErrorCode::E_LEADER_CHANGED) { - handleLeaderChanged(spaceId, partId); + handleLeaderChanged(); } } - void handleLeaderChanged(GraphSpaceID spaceId, PartitionID partId) { - auto leaderRet = kvstore_->partLeader(spaceId, partId); + /** + * @brief Set leader address to reponse. + * + */ + void handleLeaderChanged() { + auto leaderRet = kvstore_->partLeader(kDefaultSpaceId, kDefaultPartId); if (ok(leaderRet)) { resp_.leader_ref() = toThriftHost(nebula::value(leaderRet)); } else { diff --git a/src/meta/processors/admin/HBProcessor.cpp b/src/meta/processors/admin/HBProcessor.cpp index 83c2984f513..3e0647b99e9 100644 --- a/src/meta/processors/admin/HBProcessor.cpp +++ b/src/meta/processors/admin/HBProcessor.cpp @@ -37,6 +37,7 @@ void HBProcessor::process(const cpp2::HBReq& req) { if (!ActiveHostsMan::machineRegisted(kvstore_, host)) { LOG(ERROR) << "Machine " << host << " is not registed"; handleErrorCode(nebula::cpp2::ErrorCode::E_MACHINE_NOT_FOUND); + setLeaderInfo(); onFinished(); return; } @@ -122,5 +123,14 @@ void HBProcessor::process(const cpp2::HBReq& req) { onFinished(); } +void HBProcessor::setLeaderInfo() { + auto leaderRet = kvstore_->partLeader(kDefaultSpaceId, kDefaultPartId); + if (ok(leaderRet)) { + resp_.leader_ref() = toThriftHost(nebula::value(leaderRet)); + } else { + resp_.code_ref() = nebula::error(leaderRet); + } +} + } // namespace meta } // namespace nebula diff --git a/src/meta/processors/admin/HBProcessor.h b/src/meta/processors/admin/HBProcessor.h index 4fde1b03bac..b87ee63fa2b 100644 --- a/src/meta/processors/admin/HBProcessor.h +++ b/src/meta/processors/admin/HBProcessor.h @@ -53,6 +53,8 @@ class HBProcessor : public BaseProcessor { HBProcessor(kvstore::KVStore* kvstore, const HBCounters* counters, ClusterID clusterId) : BaseProcessor(kvstore), clusterId_(clusterId), counters_(counters) {} + void setLeaderInfo(); + ClusterID clusterId_{0}; const HBCounters* counters_{nullptr}; static std::atomic metaVersion_;