MCPcopy Create free account
hub / github.com/4paradigm/OpenMLDB / RecoverOPTask

Method RecoverOPTask

src/nameserver/name_server_impl.cc:954–1166  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

952}
953
954bool NameServerImpl::RecoverOPTask() {
955 for (auto& op_list : task_vec_) {
956 op_list.clear();
957 }
958 std::vector<std::string> op_vec;
959 if (!zk_client_->GetChildren(zk_op_data_path_, op_vec)) {
960 if (zk_client_->IsExistNode(zk_op_data_path_) > 0) {
961 PDLOG(WARNING, "op data node is not exist");
962 return true;
963 }
964 PDLOG(WARNING, "get op failed!");
965 return false;
966 }
967 PDLOG(INFO, "need to recover op num[%d]", op_vec.size());
968 for (const auto& op_id : op_vec) {
969 std::string op_node = zk_op_data_path_ + "/" + op_id;
970 std::string value;
971 if (!zk_client_->GetNodeValue(op_node, value)) {
972 PDLOG(WARNING, "get table info failed! table node[%s]", op_node.c_str());
973 continue;
974 }
975 std::shared_ptr<OPData> op_data = std::make_shared<OPData>();
976 if (!op_data->op_info_.ParseFromString(value)) {
977 PDLOG(WARNING, "parse op info failed! value[%s]", value.c_str());
978 continue;
979 }
980 if (op_data->op_info_.task_status() == ::fedb::api::TaskStatus::kDone) {
981 DEBUGLOG("op status is kDone. op_id[%lu]", op_data->op_info_.op_id());
982 continue;
983 }
984 if (op_data->op_info_.task_status() == ::fedb::api::TaskStatus::kCanceled) {
985 DEBUGLOG("op status is kCanceled. op_id[%lu]", op_data->op_info_.op_id());
986 continue;
987 }
988 switch (op_data->op_info_.op_type()) {
989 case ::fedb::api::OPType::kMakeSnapshotOP:
990 if (CreateMakeSnapshotOPTask(op_data) < 0) {
991 PDLOG(WARNING, "recover op[%s] failed. op_id[%lu]",
992 ::fedb::api::OPType_Name(op_data->op_info_.op_type()).c_str(), op_data->op_info_.op_id());
993 continue;
994 }
995 break;
996 case ::fedb::api::OPType::kAddReplicaOP:
997 if (CreateAddReplicaOPTask(op_data) < 0) {
998 PDLOG(WARNING, "recover op[%s] failed. op_id[%lu]",
999 ::fedb::api::OPType_Name(op_data->op_info_.op_type()).c_str(), op_data->op_info_.op_id());
1000 continue;
1001 }
1002 break;
1003 case ::fedb::api::OPType::kChangeLeaderOP:
1004 if (CreateChangeLeaderOPTask(op_data) < 0) {
1005 PDLOG(WARNING, "recover op[%s] failed. op_id[%lu]",
1006 ::fedb::api::OPType_Name(op_data->op_info_.op_type()).c_str(), op_data->op_info_.op_id());
1007 continue;
1008 }
1009 break;
1010 case ::fedb::api::OPType::kMigrateOP:
1011 if (CreateMigrateTask(op_data) < 0) {

Callers

nothing calls this directly

Calls 5

clearMethod · 0.80
GetChildrenMethod · 0.80
IsExistNodeMethod · 0.80
GetNodeValueMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected