AF backed by RAFT
This commit is contained in:
parent
1177a46dc3
commit
890e5bc499
@ -542,24 +542,6 @@ auto CoordinatorInstance::SetReplicationInstanceToMain(std::string instance_name
|
|||||||
return SetInstanceToMainCoordinatorStatus::NO_INSTANCE_WITH_NAME;
|
return SetInstanceToMainCoordinatorStatus::NO_INSTANCE_WITH_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!raft_state_.RequestLeadership()) {
|
|
||||||
return SetInstanceToMainCoordinatorStatus::NOT_LEADER;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto const res = raft_state_.AppendSetInstanceAsMain(instance_name);
|
|
||||||
if (!res->get_accepted()) {
|
|
||||||
spdlog::error(
|
|
||||||
"Failed to accept request for promoting instance {}. Most likely the reason is that the instance is not "
|
|
||||||
"the leader.",
|
|
||||||
instance_name);
|
|
||||||
return SetInstanceToMainCoordinatorStatus::RAFT_COULD_NOT_ACCEPT;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res->get_result_code() != nuraft::cmd_result_code::OK) {
|
|
||||||
spdlog::error("Failed to promote instance {} with error code {}", instance_name, res->get_result_code());
|
|
||||||
return SetInstanceToMainCoordinatorStatus::RAFT_COULD_NOT_APPEND;
|
|
||||||
}
|
|
||||||
|
|
||||||
new_main->PauseFrequentCheck();
|
new_main->PauseFrequentCheck();
|
||||||
utils::OnScopeExit scope_exit{[&new_main] { new_main->ResumeFrequentCheck(); }};
|
utils::OnScopeExit scope_exit{[&new_main] { new_main->ResumeFrequentCheck(); }};
|
||||||
|
|
||||||
@ -587,6 +569,7 @@ auto CoordinatorInstance::SetReplicationInstanceToMain(std::string instance_name
|
|||||||
return SetInstanceToMainCoordinatorStatus::COULD_NOT_PROMOTE_TO_MAIN;
|
return SetInstanceToMainCoordinatorStatus::COULD_NOT_PROMOTE_TO_MAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: (andi) This should be replicated across all coordinator instances with Raft log
|
||||||
SetMainUUID(new_main_uuid);
|
SetMainUUID(new_main_uuid);
|
||||||
spdlog::info("Instance {} promoted to main", instance_name);
|
spdlog::info("Instance {} promoted to main", instance_name);
|
||||||
return SetInstanceToMainCoordinatorStatus::SUCCESS;
|
return SetInstanceToMainCoordinatorStatus::SUCCESS;
|
||||||
|
@ -48,10 +48,6 @@ class CoordinatorInstance {
|
|||||||
|
|
||||||
auto AddCoordinatorInstance(uint32_t raft_server_id, uint32_t raft_port, std::string raft_address) -> void;
|
auto AddCoordinatorInstance(uint32_t raft_server_id, uint32_t raft_port, std::string raft_address) -> void;
|
||||||
|
|
||||||
auto GetMainUUID() const -> utils::UUID;
|
|
||||||
|
|
||||||
auto SetMainUUID(utils::UUID new_uuid) -> void;
|
|
||||||
|
|
||||||
auto FindReplicationInstance(std::string_view replication_instance_name) -> ReplicationInstance &;
|
auto FindReplicationInstance(std::string_view replication_instance_name) -> ReplicationInstance &;
|
||||||
|
|
||||||
void MainFailCallback(std::string_view);
|
void MainFailCallback(std::string_view);
|
||||||
|
Loading…
Reference in New Issue
Block a user