⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgmtsrvr.cpp

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  }  // send the signals  NodeBitmask nodes;  if (nodeId)  {    if(nodeId==getOwnNodeId())    {      if(restart)        g_RestartServer= true;      g_StopServer= true;      return 0;    }    if(getNodeType(nodeId) == NDB_MGM_NODE_TYPE_NDB)    {      int r;      if((r= okToSendTo(nodeId, true)) != 0)        return r;      if (ss.sendSignal(nodeId, &ssig) != SEND_OK)	return SEND_OR_RECEIVE_FAILED;    }    else if(getNodeType(nodeId) == NDB_MGM_NODE_TYPE_MGM)    {      error= sendStopMgmd(nodeId, abort, stop, restart, nostart, initialStart);      if(error==0)        stoppedNodes.set(nodeId);      return error;    }    else      return WRONG_PROCESS_TYPE;    nodes.set(nodeId);  }  else  {    while(getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB))    {      if(okToSendTo(nodeId, true) == 0)      {	SendStatus result = ss.sendSignal(nodeId, &ssig);	if (result == SEND_OK)	  nodes.set(nodeId);      }    }    nodeId= 0;    while(getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_MGM))    {      if(nodeId==getOwnNodeId())        continue;      if(sendStopMgmd(nodeId, abort, stop, restart, nostart, initialStart)==0)        stoppedNodes.set(nodeId);    }  }  // now wait for the replies  while (!nodes.isclear())  {    SimpleSignal *signal = ss.waitFor();    int gsn = signal->readSignalNumber();    switch (gsn) {    case GSN_STOP_REF:{      const StopRef * const ref = CAST_CONSTPTR(StopRef, signal->getDataPtr());      const NodeId nodeId = refToNode(signal->header.theSendersBlockRef);#ifdef VM_TRACE      ndbout_c("Node %d refused stop", nodeId);#endif      assert(nodes.get(nodeId));      nodes.clear(nodeId);      error = translateStopRef(ref->errorCode);      break;    }    case GSN_STOP_CONF:{      const StopConf * const ref = CAST_CONSTPTR(StopConf, signal->getDataPtr());      const NodeId nodeId = refToNode(signal->header.theSendersBlockRef);#ifdef VM_TRACE      ndbout_c("Node %d single user mode", nodeId);#endif      assert(nodes.get(nodeId));      assert(singleUserNodeId != 0);      nodes.clear(nodeId);      stoppedNodes.set(nodeId);      break;    }    case GSN_NF_COMPLETEREP:{      const NFCompleteRep * const rep =	CAST_CONSTPTR(NFCompleteRep, signal->getDataPtr());#ifdef VM_TRACE      ndbout_c("Node %d fail completed", rep->failedNodeId);#endif      break;    }    case GSN_NODE_FAILREP:{      const NodeFailRep * const rep =	CAST_CONSTPTR(NodeFailRep, signal->getDataPtr());      NodeBitmask failedNodes;      failedNodes.assign(NodeBitmask::Size, rep->theNodes);#ifdef VM_TRACE      {	ndbout << "Failed nodes:";	for (unsigned i = 0; i < 32*NodeBitmask::Size; i++)	  if(failedNodes.get(i))	    ndbout << " " << i;	ndbout << endl;      }#endif      failedNodes.bitAND(nodes);      if (!failedNodes.isclear())      {	nodes.bitANDC(failedNodes); // clear the failed nodes	if (singleUserNodeId == 0)	  stoppedNodes.bitOR(failedNodes);      }      break;    }    default:      report_unknown_signal(signal);#ifdef VM_TRACE      ndbout_c("Unknown signal %d", gsn);#endif      return SEND_OR_RECEIVE_FAILED;    }  }  return error;}/* * Stop one node */int MgmtSrvr::stopNode(int nodeId, bool abort){  if (!abort)  {    NodeId nodeId = 0;    ClusterMgr::Node node;    while(getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB))    {      node = theFacade->theClusterMgr->getNodeInfo(nodeId);      if((node.m_state.startLevel != NodeState::SL_STARTED) && 	 (node.m_state.startLevel != NodeState::SL_NOTHING))	return OPERATION_NOT_ALLOWED_START_STOP;    }  }  NodeBitmask nodes;  return sendSTOP_REQ(nodeId,		      nodes,		      0,		      abort,		      false,		      false,		      false,		      false);}/* * Perform system shutdown */int MgmtSrvr::stop(int * stopCount, bool abort){  NodeBitmask nodes;  int ret = sendSTOP_REQ(0,			 nodes,			 0,			 abort,			 true,			 false,			 false,			 false);  if (stopCount)    *stopCount = nodes.count();  return ret;}/* * Enter single user mode on all live nodes */int MgmtSrvr::enterSingleUser(int * stopCount, Uint32 singleUserNodeId){  if (getNodeType(singleUserNodeId) != NDB_MGM_NODE_TYPE_API)    return NODE_NOT_API_NODE;  NodeId nodeId = 0;  ClusterMgr::Node node;  while(getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB))  {    node = theFacade->theClusterMgr->getNodeInfo(nodeId);    if((node.m_state.startLevel != NodeState::SL_STARTED) &&        (node.m_state.startLevel != NodeState::SL_NOTHING))      return OPERATION_NOT_ALLOWED_START_STOP;  }  NodeBitmask nodes;  int ret = sendSTOP_REQ(0,			 nodes,			 singleUserNodeId,			 false,			 false,			 false,			 false,			 false);  if (stopCount)    *stopCount = nodes.count();  return ret;}/* * Perform node restart */int MgmtSrvr::restartNode(int nodeId, bool nostart, bool initialStart, 			  bool abort){  NodeBitmask nodes;  return sendSTOP_REQ(nodeId,		      nodes,		      0,		      abort,		      false,		      true,		      nostart,		      initialStart);}/* * Perform system restart */int MgmtSrvr::restart(bool nostart, bool initialStart, 		      bool abort, int * stopCount ){  NodeBitmask nodes;  int ret = sendSTOP_REQ(0,			 nodes,			 0,			 abort,			 true,			 true,			 true,			 initialStart);  if (ret)    return ret;  if (stopCount)    *stopCount = nodes.count();#ifdef VM_TRACE    ndbout_c("Stopped %d nodes", nodes.count());#endif  /**   * Here all nodes were correctly stopped,   * so we wait for all nodes to be contactable   */  int waitTime = 12000;  NodeId nodeId = 0;  NDB_TICKS maxTime = NdbTick_CurrentMillisecond() + waitTime;  ndbout_c(" %d", nodes.get(1));  ndbout_c(" %d", nodes.get(2));  while(getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)) {    if (!nodes.get(nodeId))      continue;    enum ndb_mgm_node_status s;    s = NDB_MGM_NODE_STATUS_NO_CONTACT;#ifdef VM_TRACE    ndbout_c("Waiting for %d not started", nodeId);#endif    while (s != NDB_MGM_NODE_STATUS_NOT_STARTED && waitTime > 0) {      Uint32 startPhase = 0, version = 0, dynamicId = 0, nodeGroup = 0;      Uint32 connectCount = 0;      bool system;      const char *address;      status(nodeId, &s, &version, &startPhase, 	     &system, &dynamicId, &nodeGroup, &connectCount, &address);      NdbSleep_MilliSleep(100);        waitTime = (maxTime - NdbTick_CurrentMillisecond());    }  }    if(nostart)    return 0;    /**   * Now we start all database nodes (i.e. we make them non-idle)   * We ignore the result we get from the start command.   */  nodeId = 0;  while(getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)) {    if (!nodes.get(nodeId))      continue;    int result;    result = start(nodeId);    DEBUG("Starting node " << nodeId << " with result " << result);    /**     * Errors from this call are deliberately ignored.     * Maybe the user only wanted to restart a subset of the nodes.     * It is also easy for the user to check which nodes have      * started and which nodes have not.     */  }    return 0;}intMgmtSrvr::exitSingleUser(int * stopCount, bool abort){  NodeId nodeId = 0;  int count = 0;  SignalSender ss(theFacade);  ss.lock(); // lock will be released on exit  SimpleSignal ssig;  ResumeReq* const resumeReq =     CAST_PTR(ResumeReq, ssig.getDataPtrSend());  ssig.set(ss,TestOrd::TraceAPI, NDBCNTR, GSN_RESUME_REQ, 	   ResumeReq::SignalLength);  resumeReq->senderData = 12;  resumeReq->senderRef = ss.getOwnRef();  while(getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)){    if(okToSendTo(nodeId, true) == 0){      SendStatus result = ss.sendSignal(nodeId, &ssig);      if (result == SEND_OK)	count++;    }  }  if(stopCount != 0)    * stopCount = count;  return 0;}/***************************************************************************** * Status ****************************************************************************/#include <ClusterMgr.hpp>int MgmtSrvr::status(int nodeId,                  ndb_mgm_node_status * _status, 		 Uint32 * version,		 Uint32 * _phase, 		 bool * _system,		 Uint32 * dynamic,		 Uint32 * nodegroup,		 Uint32 * connectCount,		 const char **address){  if (getNodeType(nodeId) == NDB_MGM_NODE_TYPE_API ||      getNodeType(nodeId) == NDB_MGM_NODE_TYPE_MGM) {    versionNode(nodeId, *version, address);  } else {    *address= get_connect_address(nodeId);  }  const ClusterMgr::Node node =     theFacade->theClusterMgr->getNodeInfo(nodeId);  if(!node.connected){    * _status = NDB_MGM_NODE_STATUS_NO_CONTACT;    return 0;  }    if (getNodeType(nodeId) == NDB_MGM_NODE_TYPE_NDB) {    * version = node.m_info.m_version;  }  * dynamic = node.m_state.dynamicId;  * nodegroup = node.m_state.nodeGroup;  * connectCount = node.m_info.m_connectCount;    switch(node.m_state.startLevel){  case NodeState::SL_CMVMI:    * _status = NDB_MGM_NODE_STATUS_NOT_STARTED;    * _phase = 0;    return 0;    break;  case NodeState::SL_STARTING:    * _status     = NDB_MGM_NODE_STATUS_STARTING;    * _phase = node.m_state.starting.startPhase;    return 0;    break;  case NodeState::SL_STARTED:    * _status = NDB_MGM_NODE_STATUS_STARTED;    * _phase = 0;    return 0;    break;  case NodeState::SL_STOPPING_1:    * _status = NDB_MGM_NODE_STATUS_SHUTTING_DOWN;    * _phase = 1;    * _system = node.m_state.stopping.systemShutdown != 0;    return 0;    break;  case NodeState::SL_STOPPING_2:    * _status = NDB_MGM_NODE_STATUS_SHUTTING_DOWN;    * _phase = 2;    * _system = node.m_state.stopping.systemShutdown != 0;    return 0;    break;  case NodeState::SL_STOPPING_3:    * _status = NDB_MGM_NODE_STATUS_SHUTTING_DOWN;    * _phase = 3;    * _system = node.m_state.stopping.systemShutdown != 0;    return 0;    break;  case NodeState::SL_STOPPING_4:    * _status = NDB_MGM_NODE_STATUS_SHUTTING_DOWN;    * _phase = 4;    * _system = node.m_state.stopping.systemShutdown != 0;    return 0;    break;  case NodeState::SL_SINGLEUSER:    * _status = NDB_MGM_NODE_STATUS_SINGLEUSER;    * _phase  = 0;    return 0;    break;  default:    * _status = NDB_MGM_NODE_STATUS_UNKNOWN;    * _phase = 0;    return 0;  }    return -1;}int MgmtSrvr::setEventReportingLevelImpl(int nodeId, 				     const EventSubscribeReq& ll){  INIT_SIGNAL_SENDER(ss,nodeId);  SimpleSignal ssig;  EventSubscribeReq * dst =     CAST_PTR(EventSubscribeReq, ssig.getDataPtrSend());  ssig.set(ss,TestOrd::TraceAPI, CMVMI, GSN_EVENT_SUBSCRIBE_REQ,	   EventSubscribeReq::SignalLength);  *dst = ll;  send(ss,ssig,nodeId,NODE_TYPE_DB);#if 0  while (1)  {    SimpleSignal *signal = ss.waitFor();    int gsn = signal->readSignalNumber();    switch (gsn) {     case GSN_EVENT_SUBSCRIBE_CONF:{      break;    }    case GSN_EVENT_SUBSCRIBE_REF:{      return SEND_OR_RECEIVE_FAILED;    }    case GSN_NF_COMPLETEREP:{      const NFCompleteRep * const rep =	CAST_CONSTPTR(NFCompleteRep, signal->getDataPtr());      if (rep->failedNodeId == nodeId)	return SEND_OR_RECEIVE_FAILED;      break;    }    case GSN_NODE_FAILREP:{      const NodeFailRep * const rep =	CAST_CONSTPTR(NodeFailRep, signal->getDataPtr());      if (NodeBitmask::get(rep->theNodes,nodeId))	return SEND_OR_RECEIVE_FAILED;      break;    }    default:      report_unknown_signal(signal);      return SEND_OR_RECEIVE_FAILED;    }  }#endif  return 0;}//****************************************************************************//****************************************************************************int MgmtSrvr::setNodeLogLevelImpl(int nodeId, const SetLogLevelOrd & ll){  INIT_SIGNAL_SENDER(ss,nodeId);  SimpleSignal ssig;  ssig.set(ss,TestOrd::TraceAPI, CMVMI, GSN_SET_LOGLEVELORD,	   SetLogLevelOrd::SignalLength);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -