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

Method UpdateZKTaskStatus

src/nameserver/name_server_impl.cc:1819–1879  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1817}
1818
1819int NameServerImpl::UpdateZKTaskStatus() {
1820 std::lock_guard<std::mutex> lock(mu_);
1821 for (const auto& op_list : task_vec_) {
1822 if (op_list.empty()) {
1823 continue;
1824 }
1825 std::shared_ptr<OPData> op_data = op_list.front();
1826 if (op_data->task_list_.empty()) {
1827 continue;
1828 }
1829 std::shared_ptr<Task> task = op_data->task_list_.front();
1830 if (!task->sub_task_.empty()) {
1831 bool has_done = true;
1832 bool has_failed = false;
1833 for (const auto& cur_task : task->sub_task_) {
1834 if (cur_task->task_info_->status() == ::fedb::api::kFailed) {
1835 has_failed = true;
1836 break;
1837 } else if (cur_task->task_info_->status() != ::fedb::api::kDone) {
1838 has_done = false;
1839 break;
1840 }
1841 }
1842 if (has_failed) {
1843 PDLOG(INFO,
1844 "update task status from[%s] to[kFailed]. op_id[%lu], "
1845 "task_type[%s]",
1846 ::fedb::api::TaskStatus_Name(task->task_info_->status()).c_str(), op_data->op_info_.op_id(),
1847 ::fedb::api::TaskType_Name(task->task_info_->task_type()).c_str());
1848 task->task_info_->set_status(::fedb::api::kFailed);
1849 } else if (has_done) {
1850 PDLOG(INFO,
1851 "update task status from[%s] to[kDone]. op_id[%lu], "
1852 "task_type[%s]",
1853 ::fedb::api::TaskStatus_Name(task->task_info_->status()).c_str(), op_data->op_info_.op_id(),
1854 ::fedb::api::TaskType_Name(task->task_info_->task_type()).c_str());
1855 task->task_info_->set_status(::fedb::api::kDone);
1856 }
1857 }
1858 if (task->task_info_->status() == ::fedb::api::kDone) {
1859 uint32_t cur_task_index = op_data->op_info_.task_index();
1860 op_data->op_info_.set_task_index(cur_task_index + 1);
1861 std::string value;
1862 op_data->op_info_.SerializeToString(&value);
1863 std::string node = zk_op_data_path_ + "/" + std::to_string(op_data->op_info_.op_id());
1864 if (zk_client_->SetNodeValue(node, value)) {
1865 DEBUGLOG("set zk status value success. node[%s] value[%s]", node.c_str(), value.c_str());
1866 op_data->task_list_.pop_front();
1867 continue;
1868 }
1869 // revert task index
1870 op_data->op_info_.set_task_index(cur_task_index);
1871 PDLOG(WARNING,
1872 "set zk status value failed! node[%s] op_id[%lu] op_type[%s] "
1873 "task_index[%u]",
1874 node.c_str(), op_data->op_info_.op_id(),
1875 ::fedb::api::OPType_Name(op_data->op_info_.op_type()).c_str(), op_data->op_info_.task_index());
1876 }

Callers

nothing calls this directly

Calls 3

to_stringFunction · 0.85
SetNodeValueMethod · 0.80
emptyMethod · 0.45

Tested by

no test coverage detected