From 57ff7d87cc525ad84e1930a6e4762b858252f8d2 Mon Sep 17 00:00:00 2001 From: "darion.yaphet" Date: Mon, 28 Feb 2022 19:33:15 +0800 Subject: [PATCH] machine not registed should response leader address --- src/clients/meta/MetaClient.cpp | 7 ++++--- src/meta/processors/BaseProcessor.h | 14 ++++---------- src/meta/processors/admin/HBProcessor.cpp | 10 ++++++++++ src/meta/processors/admin/HBProcessor.h | 2 ++ 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/clients/meta/MetaClient.cpp b/src/clients/meta/MetaClient.cpp index 0107ec1789f..4c6ff5f0cb3 100644 --- a/src/clients/meta/MetaClient.cpp +++ b/src/clients/meta/MetaClient.cpp @@ -738,11 +738,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( @@ -765,7 +766,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 78e16b61066..877c89364fc 100644 --- a/src/meta/processors/BaseProcessor.h +++ b/src/meta/processors/BaseProcessor.h @@ -67,26 +67,20 @@ class BaseProcessor { * @brief Set error code and handle leader changed. * * @param code - * @param spaceId - * @param partId */ - void handleErrorCode(nebula::cpp2::ErrorCode code, - GraphSpaceID spaceId = kDefaultSpaceId, - PartitionID partId = kDefaultPartId) { + void handleErrorCode(nebula::cpp2::ErrorCode code) { resp_.code_ref() = code; if (code == nebula::cpp2::ErrorCode::E_LEADER_CHANGED) { - handleLeaderChanged(spaceId, partId); + handleLeaderChanged(); } } /** * @brief Set leader address to reponse. * - * @param spaceId - * @param partId */ - void handleLeaderChanged(GraphSpaceID spaceId, PartitionID partId) { - auto leaderRet = kvstore_->partLeader(spaceId, partId); + 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 2d875db9e2a..2f0b4dee83f 100644 --- a/src/meta/processors/admin/HBProcessor.cpp +++ b/src/meta/processors/admin/HBProcessor.cpp @@ -39,6 +39,7 @@ void HBProcessor::process(const cpp2::HBReq& req) { if (!ActiveHostsMan::machineRegisted(kvstore_, host)) { LOG(INFO) << "Machine " << host << " is not registed"; handleErrorCode(nebula::cpp2::ErrorCode::E_MACHINE_NOT_FOUND); + setLeaderInfo(); onFinished(); return; } @@ -114,5 +115,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 8b8caf5c358..4f782a888da 100644 --- a/src/meta/processors/admin/HBProcessor.h +++ b/src/meta/processors/admin/HBProcessor.h @@ -58,6 +58,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_;