/* * Copyright (c) 2019 TAOS Data, Inc. * * This program is free software: you can use, redistribute, and/or modify * it under the terms of the GNU Affero General Public License, version 3 * or later ("AGPL"), as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #define _DEFAULT_SOURCE #include "dmInt.h" static int32_t dmStartMgmt(SDnodeMgmt *pMgmt) { if (dmStartStatusThread(pMgmt) != 0) { return -1; } if (dmStartMonitorThread(pMgmt) != 0) { return -1; } if (dmStartCrashReportThread(pMgmt) != 0) { return -1; } return 0; } static void dmStopMgmt(SDnodeMgmt *pMgmt) { pMgmt->pData->stopped = true; dmStopMonitorThread(pMgmt); dmStopStatusThread(pMgmt); dmStopCrashReportThread(pMgmt); } static int32_t dmOpenMgmt(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) { SDnodeMgmt *pMgmt = taosMemoryCalloc(1, sizeof(SDnodeMgmt)); if (pMgmt == NULL) { terrno = TSDB_CODE_OUT_OF_MEMORY; return -1; } pMgmt->pData = pInput->pData; pMgmt->msgCb = pInput->msgCb; pMgmt->path = pInput->path; pMgmt->name = pInput->name; pMgmt->processCreateNodeFp = pInput->processCreateNodeFp; pMgmt->processAlterNodeTypeFp = pInput->processAlterNodeTypeFp; pMgmt->processDropNodeFp = pInput->processDropNodeFp; pMgmt->sendMonitorReportFp = pInput->sendMonitorReportFp; pMgmt->getVnodeLoadsFp = pInput->getVnodeLoadsFp; pMgmt->getMnodeLoadsFp = pInput->getMnodeLoadsFp; pMgmt->getQnodeLoadsFp = pInput->getQnodeLoadsFp; if (dmStartWorker(pMgmt) != 0) { return -1; } if (udfStartUdfd(pMgmt->pData->dnodeId) != 0) { dError("failed to start udfd"); } pOutput->pMgmt = pMgmt; return 0; } static void dmCloseMgmt(SDnodeMgmt *pMgmt) { dmStopWorker(pMgmt); taosMemoryFree(pMgmt); } static int32_t dmRequireMgmt(const SMgmtInputOpt *pInput, bool *required) { *required = true; return 0; } SMgmtFunc dmGetMgmtFunc() { SMgmtFunc mgmtFunc = {0}; mgmtFunc.openFp = dmOpenMgmt; mgmtFunc.closeFp = (NodeCloseFp)dmCloseMgmt; mgmtFunc.startFp = (NodeStartFp)dmStartMgmt; mgmtFunc.stopFp = (NodeStopFp)dmStopMgmt; mgmtFunc.requiredFp = dmRequireMgmt; mgmtFunc.getHandlesFp = dmGetMsgHandles; return mgmtFunc; }