| 1817 | } |
| 1818 | |
| 1819 | int 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 | } |
nothing calls this directly
no test coverage detected