From c728377e0e18ff108a43f42815f2d187c7f2b1ff Mon Sep 17 00:00:00 2001 From: liubingbing2 Date: Fri, 24 Feb 2023 14:39:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=9A=E5=89=AF=E6=9C=AC=E6=89=A7?= =?UTF-8?q?=E8=A1=8CaddTaskReq=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AdminRegistryServer/AdminRegistryImp.cpp | 15 ++- AdminRegistryServer/AdminRegistryImp.h | 1 + AdminRegistryServer/ExecuteTask.cpp | 124 +++-------------------- AdminRegistryServer/ExecuteTask.h | 3 +- 4 files changed, 31 insertions(+), 112 deletions(-) diff --git a/AdminRegistryServer/AdminRegistryImp.cpp b/AdminRegistryServer/AdminRegistryImp.cpp index 058df34b..e83fbf10 100644 --- a/AdminRegistryServer/AdminRegistryImp.cpp +++ b/AdminRegistryServer/AdminRegistryImp.cpp @@ -598,6 +598,7 @@ int AdminRegistryImp::restartServer(const string & application, const string & s bool isDnsServer = false; int iRet = EM_TARS_SUCCESS; + CurrentPtr nodeCurrent = NodeManager::getInstance()->getNodeCurrent(nodeName); try { if(application == ServerConfig::Application && serverName == ServerConfig::ServerName) @@ -629,10 +630,14 @@ int AdminRegistryImp::restartServer(const string & application, const string & s { isDnsServer = true; } - else + else if (nodeCurrent) { - iRet = NodeManager::getInstance()->stopServer(application, serverName, nodeName, result, current); + iRet = NodeManager::getInstance()->stopServer(application, serverName, nodeName, result, NULL); } + else + { + iRet = NodeManager::getInstance()->stopServer(application, serverName, nodeName, result, current); + } TLOG_DEBUG("call node restartServer, stop|" << application << "." << serverName << "_" << nodeName << "|" << current->getHostName() << ":" << current->getPort() << endl); if (iRet != EM_TARS_SUCCESS) @@ -664,9 +669,13 @@ int AdminRegistryImp::restartServer(const string & application, const string & s TLOG_DEBUG( "|" << " '" + application + "." + serverName + "_" + nodeName + "' is tars_dns server" << endl); return DBPROXY->updateServerState(application, serverName, nodeName, "present_state", tars::Active); } + else if (nodeCurrent) + { + return NodeManager::getInstance()->startServer(application, serverName, nodeName, result, NULL); + } else { - return NodeManager::getInstance()->startServer(application, serverName, nodeName, result, current); + return NodeManager::getInstance()->startServer(application, serverName, nodeName, result, current); } } catch(TarsSyncCallTimeoutException& ex) diff --git a/AdminRegistryServer/AdminRegistryImp.h b/AdminRegistryServer/AdminRegistryImp.h index d492d806..b3cb667c 100644 --- a/AdminRegistryServer/AdminRegistryImp.h +++ b/AdminRegistryServer/AdminRegistryImp.h @@ -17,6 +17,7 @@ #ifndef __AMIN_REGISTRY_H__ #define __AMIN_REGISTRY_H__ +#include "util/tc_common.h" #include "AdminReg.h" #include "Registry.h" #include "Patch.h" diff --git a/AdminRegistryServer/ExecuteTask.cpp b/AdminRegistryServer/ExecuteTask.cpp index 5e205b02..01f94b73 100644 --- a/AdminRegistryServer/ExecuteTask.cpp +++ b/AdminRegistryServer/ExecuteTask.cpp @@ -15,7 +15,7 @@ */ #include "ExecuteTask.h" -#include "servant/Communicator.h" +#include "servant/Application.h" #include "servant/RemoteLogger.h" #include "util/tc_timeprovider.h" #include @@ -24,8 +24,8 @@ extern TC_Config * g_pconf; TaskList::TaskList(const TaskReq &taskReq, unsigned int t) : _taskReq(taskReq) { - //_adminPrx = Communicator::getInstance()->stringToProxy(g_pconf->get("/tars/objname", "")); - _adminPrx = ExecuteTask::getInstance()->getAdminImp(); + _adminPrx = Application::getCommunicator()->stringToProxy(g_pconf->get("/tars/objname", "tars.tarsAdminRegistry.AdminRegObj")); + _adminImp = ExecuteTask::getInstance()->getAdminImp(); _taskRsp.taskNo = _taskReq.taskNo; _taskRsp.serial = _taskReq.serial; @@ -122,7 +122,7 @@ void TaskList::setRspInfo(size_t index, bool start, EMTaskItemStatus status) try { - _adminPrx->setTaskItemInfo_inner(rsp.req.itemNo, info); + _adminImp->setTaskItemInfo_inner(rsp.req.itemNo, info); } catch (exception &ex) { @@ -153,7 +153,7 @@ void TaskList::setRspLog(size_t index, const string &log) try { - _adminPrx->setTaskItemInfo_inner(rsp.req.itemNo, info); + _adminImp->setTaskItemInfo_inner(rsp.req.itemNo, info); } catch (exception &ex) { @@ -211,7 +211,7 @@ int TaskList::prepareFile() string result; - int ret = _adminPrx->prepareInfo_inner(pi, result); + int ret = _adminImp->prepareInfo_inner(pi, result); if (ret != 0) { TLOG_ERROR("preparePatch_inner error:" << result << endl); @@ -231,7 +231,7 @@ int TaskList::prepareFile() TLOG_DEBUG("preparePatch_inner prepare :" << e.second.application << "." << e.second.serverName << ", patchId:" << e.second.patchId << ", file:" << e.second.patchFile << ", docker image:" << e.second.baseImage << endl); - int ret = this->_adminPrx->preparePatch_inner(e.second, result); + int ret = _adminImp->preparePatch_inner(e.second, result); if(ret != 0) { TLOG_ERROR("preparePatch_inner error:" << result << endl); @@ -248,7 +248,7 @@ EMTaskItemStatus TaskList::start(const TaskItemReq &req, string &log) int ret = -1; try { - ret = _adminPrx->startServer_inner(req.application, req.serverName, req.nodeName, log); + ret = _adminPrx->tars_hash(tars::hash()(req.nodeName))->startServer(req.application, req.serverName, req.nodeName, log); if (ret == 0) return EM_I_SUCCESS; } @@ -268,7 +268,7 @@ EMTaskItemStatus TaskList::restart(const TaskItemReq &req, string &log) int ret = -1; try { - ret = _adminPrx->restartServer_inner(req.application, req.serverName, req.nodeName, log); + ret = _adminPrx->tars_hash(tars::hash()(req.nodeName))->restartServer(req.application, req.serverName, req.nodeName, log); if (ret == 0) { return EM_I_SUCCESS; @@ -297,7 +297,7 @@ EMTaskItemStatus TaskList::graceRestart(const TaskItemReq &req, string &log) TLOG_ERROR("TaskList::graceRestartServer no servers" << endl); return EM_I_FAILED; } - ret = _adminPrx->notifyServer_inner(req.application, req.serverName, req.nodeName, "tars.gracerestart",log); + ret = _adminPrx->tars_hash(tars::hash()(req.nodeName))->notifyServer(req.application, req.serverName, req.nodeName, "tars.gracerestart",log); if (ret == 0) { return EM_I_SUCCESS; } @@ -317,7 +317,7 @@ EMTaskItemStatus TaskList::undeploy(const TaskItemReq &req, string &log) int ret = -1; try { - ret = _adminPrx->undeploy_inner(req.application, req.serverName, req.nodeName, req.userName, log); + ret = _adminPrx->tars_hash(tars::hash()(req.nodeName))->undeploy(req.application, req.serverName, req.nodeName, req.userName, log); if (ret == 0) return EM_I_SUCCESS; } @@ -337,7 +337,7 @@ EMTaskItemStatus TaskList::stop(const TaskItemReq &req, string &log) int ret = -1; try { - ret = _adminPrx->stopServer_inner(req.application, req.serverName, req.nodeName, log); + ret = _adminPrx->tars_hash(tars::hash()(req.nodeName))->stopServer(req.application, req.serverName, req.nodeName, log); if (ret == 0) return EM_I_SUCCESS; } @@ -387,7 +387,7 @@ EMTaskItemStatus TaskList::patch(size_t index, const TaskItemReq &req, string &l //外部是串行处理的 try { - ret = _adminPrx->batchPatch_inner(patchReq, log); + ret = _adminPrx->tars_hash(tars::hash()(req.nodeName))->batchPatch(patchReq, log); } catch (exception &ex) { @@ -416,7 +416,7 @@ EMTaskItemStatus TaskList::patch(size_t index, const TaskItemReq &req, string &l try { - ret = _adminPrx->getPatchPercent_inner(req.application, req.serverName, req.nodeName, pi); + ret = _adminPrx->tars_hash(tars::hash()(req.nodeName))->getPatchPercent(req.application, req.serverName, req.nodeName, pi); } catch (exception &ex) { @@ -430,14 +430,14 @@ EMTaskItemStatus TaskList::patch(size_t index, const TaskItemReq &req, string &l if (ret != 0) { log = pi.sResult; - _adminPrx->updatePatchLog_inner(req.application, req.serverName, req.nodeName, patchId, req.userName, patchType, false); + _adminImp->updatePatchLog_inner(req.application, req.serverName, req.nodeName, patchId, req.userName, patchType, false); TLOG_ERROR("getPatchPercent error, ret:" << ret << ", " << req.application << "." << req.serverName << "_" << req.nodeName << ", percent:" << pi.iPercent << ", log:" << pi.sResult << endl); return EM_I_FAILED; } if(pi.iPercent == 100 && pi.bSucc) { - _adminPrx->updatePatchLog_inner(req.application, req.serverName, req.nodeName, patchId, req.userName, patchType, true); + _adminImp->updatePatchLog_inner(req.application, req.serverName, req.nodeName, patchId, req.userName, patchType, true); TLOG_DEBUG("getPatchPercent ok, percent:" << pi.iPercent << "%" << endl); retStatus = EM_I_SUCCESS; break; @@ -460,98 +460,6 @@ EMTaskItemStatus TaskList::patch(size_t index, const TaskItemReq &req, string &l } return EM_I_SUCCESS; } -// -//EMTaskItemStatus TaskList::patch(const TaskItemReq &req, string &log,std::size_t index) -//{ -// try -// { -// int ret = EM_TARS_UNKNOWN_ERR; -// -// TLOG_DEBUG("TaskList::patch:" << TC_Common::tostr(req.parameters.begin(), req.parameters.end()) -// << req.application << "." << req.serverName << ", " << req.nodeName << endl); -// -// string patchId = get("patch_id", req.parameters); -// string patchType = get("patch_type", req.parameters); -// string runType = get("run_type",req.parameters); -// -// tars::PatchRequest patchReq; -// patchReq.appname = req.application; -// patchReq.servername = req.serverName; -// patchReq.nodename = req.nodeName; -// patchReq.version = patchId; -// patchReq.user = req.userName; -// patchReq.md5 = get("run_type",req.parameters); -// -// //外部是并行处理的! -// try { -//// ret = _adminPrx->preparePatch_inner(patchReq, log, index != 0, taskItemSharedState); -//// if (ret != 0) { -//// log = "tarsAdminRegistry batchPatch err:" + log; -//// TLOG_ERROR("TaskList::patch batchPatch error:" << log << endl); -//// return EM_I_FAILED; -//// } -// ret = _adminPrx->batchPatch_inner(patchReq, runType=="container", log); -// } -// catch (exception &ex) -// { -// log = ex.what(); -// TLOG_ERROR("TaskList::patch batchPatch error:" << log << endl); -// return EM_I_FAILED; -// } -// -// if (ret != EM_TARS_SUCCESS) -// { -// log = "tarsAdminRegistry batchPatch err:" + log; -// return EM_I_FAILED; -// } -// -// // 这里做个超时保护, 否则如果tarsnode状态错误, 这里一直循环调用 -// time_t tNow = TNOW; -// unsigned int patchTimeout = TC_Common::strto(g_pconf->get("/tars/patch/", "300")); -// -// EMTaskItemStatus retStatus = EM_I_FAILED; -// while (TNOW < tNow + patchTimeout) -// { -// PatchInfo pi; -// -// try -// { -// ret = _adminPrx->getPatchPercent_inner(req.application, req.serverName, req.nodeName, pi); -// } -// catch (exception &ex) -// { -// log = ex.what(); -// TLOG_ERROR("TaskList::patch getPatchPercent error, ret:" << ret << endl); -// } -// -// if (ret != 0) -// { -// _adminPrx->updatePatchLog_inner(req.application, req.serverName, req.nodeName, patchId, req.userName, patchType, false); -// TLOG_ERROR("TaskList::patch getPatchPercent error, ret:" << ret << endl); -// return EM_I_FAILED; -// } -// -// if(pi.iPercent == 100 && pi.bSucc) -// { -// _adminPrx->updatePatchLog_inner(req.application, req.serverName, req.nodeName, patchId, req.userName, patchType, true); -// TLOG_DEBUG("TaskList::patch getPatchPercent ok, percent:" << pi.iPercent << "%" << endl); -// retStatus = EM_I_SUCCESS; -// break; -// } -// -// TLOG_DEBUG("TaskList::patch getPatchPercent percent:" << pi.iPercent << "%, succ:" << pi.bSucc << endl); -// -// std::this_thread::sleep_for(std::chrono::seconds(1)); -// } -// return retStatus; -// } -// catch (exception &ex) -// { -// TLOG_ERROR("TaskList::patch error:" << ex.what() << endl); -// return EM_I_FAILED; -// } -// return EM_I_FAILED; -//} EMTaskItemStatus TaskList::executeSingleTask(size_t index, const TaskItemReq &req) { diff --git a/AdminRegistryServer/ExecuteTask.h b/AdminRegistryServer/ExecuteTask.h index 84096e05..aea496a2 100644 --- a/AdminRegistryServer/ExecuteTask.h +++ b/AdminRegistryServer/ExecuteTask.h @@ -110,7 +110,8 @@ class TaskList : public TC_ThreadMutex //返回任务 TaskRsp _taskRsp; - AdminRegistryImp* _adminPrx; + AdminRegPrx _adminPrx; + AdminRegistryImp* _adminImp; time_t _createTime; unsigned int _timeout; bool _finished;