commandinterpreter.cpp

来自「MySQL源码文件5.X系列, 可自已编译到服务器」· C++ 代码 · 共 1,989 行 · 第 1/5 页

CPP
1,989
字号
    if(it == 0){      ndbout_c("Unable to create config iterator");      ndb_mgm_destroy_configuration(conf);      return -1;    }    NdbAutoPtr<ndb_mgm_configuration_iterator> ptr(it);    int      master_id= 0,      ndb_nodes= 0,      api_nodes= 0,      mgm_nodes= 0;    for(i=0; i < state->no_of_nodes; i++) {      if(state->node_states[i].node_type == NDB_MGM_NODE_TYPE_NDB &&	 state->node_states[i].version != 0){	master_id= state->node_states[i].dynamic_id;	break;      }    }        for(i=0; i < state->no_of_nodes; i++) {      switch(state->node_states[i].node_type) {      case NDB_MGM_NODE_TYPE_API:	api_nodes++;	break;      case NDB_MGM_NODE_TYPE_NDB:	if (state->node_states[i].dynamic_id &&	    state->node_states[i].dynamic_id < master_id)	  master_id= state->node_states[i].dynamic_id;	ndb_nodes++;	break;      case NDB_MGM_NODE_TYPE_MGM:	mgm_nodes++;	break;      case NDB_MGM_NODE_TYPE_UNKNOWN:        ndbout << "Error: Unknown Node Type" << endl;        return -1;      case NDB_MGM_NODE_TYPE_REP:	abort();      }    }    ndbout << "Cluster Configuration" << endl	   << "---------------------" << endl;    print_nodes(state, it, "ndbd",     ndb_nodes, NDB_MGM_NODE_TYPE_NDB, master_id);    print_nodes(state, it, "ndb_mgmd", mgm_nodes, NDB_MGM_NODE_TYPE_MGM, 0);    print_nodes(state, it, "mysqld",   api_nodes, NDB_MGM_NODE_TYPE_API, 0);    //    ndbout << helpTextShow;    ndb_mgm_destroy_configuration(conf);    return 0;  } else if (strcasecmp(parameters, "PROPERTIES") == 0 ||	     strcasecmp(parameters, "PROP") == 0) {    ndbout << "SHOW PROPERTIES is not yet implemented." << endl;    //  ndbout << "_mgmtSrvr.getConfig()->print();" << endl; /* XXX */  } else if (strcasecmp(parameters, "CONFIGURATION") == 0 ||	     strcasecmp(parameters, "CONFIG") == 0){    ndbout << "SHOW CONFIGURATION is not yet implemented." << endl;    //nbout << "_mgmtSrvr.getConfig()->printConfigFile();" << endl; /* XXX */  } else if (strcasecmp(parameters, "PARAMETERS") == 0 ||	     strcasecmp(parameters, "PARAMS") == 0 ||	     strcasecmp(parameters, "PARAM") == 0) {    ndbout << "SHOW PARAMETERS is not yet implemented." << endl;    //    ndbout << "_mgmtSrvr.getConfig()->getConfigInfo()->print();"     //           << endl; /* XXX */  } else {    ndbout << "Invalid argument." << endl;    return -1;  }  return 0;}intCommandInterpreter::executeConnect(char* parameters, bool interactive) {  BaseString *basestring = NULL;  int retval;  disconnect();  if (!emptyString(parameters)) {    basestring= new BaseString(parameters);    m_constr= basestring->trim().c_str();  }  if ( connect(interactive) == false ){    return -1;  }  if (basestring != NULL)    delete basestring;  return 0;}//*****************************************************************************//*****************************************************************************void CommandInterpreter::executeClusterLog(char* parameters) {  DBUG_ENTER("CommandInterpreter::executeClusterLog");  int i;  if (emptyString(parameters))  {    ndbout << "Missing argument." << endl;    m_error = -1;    DBUG_VOID_RETURN;  }  enum ndb_mgm_event_severity severity = NDB_MGM_EVENT_SEVERITY_ALL;      char * tmpString = my_strdup(parameters,MYF(MY_WME));  My_auto_ptr<char> ap1(tmpString);  char * tmpPtr = 0;  char * item = strtok_r(tmpString, " ", &tmpPtr);  int enable;  const unsigned int *enabled= ndb_mgm_get_logfilter(m_mgmsrv);  if(enabled == NULL) {    ndbout << "Couldn't get status" << endl;    printError();    m_error = -1;    DBUG_VOID_RETURN;  }  /********************   * CLUSTERLOG INFO   ********************/  if (strcasecmp(item, "INFO") == 0) {    DBUG_PRINT("info",("INFO"));    if(enabled[0] == 0)    {      ndbout << "Cluster logging is disabled." << endl;      m_error = 0;      DBUG_VOID_RETURN;    }#if 0     for(i = 0; i<7;i++)      printf("enabled[%d] = %d\n", i, enabled[i]);#endif    ndbout << "Severities enabled: ";    for(i = 1; i < (int)NDB_MGM_EVENT_SEVERITY_ALL; i++) {      const char *str= ndb_mgm_get_event_severity_string((ndb_mgm_event_severity)i);      if (str == 0)      {	DBUG_ASSERT(false);	continue;      }      if(enabled[i])	ndbout << BaseString(str).ndb_toupper() << " ";    }    ndbout << endl;    m_error = 0;    DBUG_VOID_RETURN;  }   else if (strcasecmp(item, "FILTER") == 0 ||	   strcasecmp(item, "TOGGLE") == 0)  {    DBUG_PRINT("info",("TOGGLE"));    enable= -1;  }   else if (strcasecmp(item, "OFF") == 0)   {    DBUG_PRINT("info",("OFF"));    enable= 0;  } else if (strcasecmp(item, "ON") == 0) {    DBUG_PRINT("info",("ON"));    enable= 1;  } else {    ndbout << "Invalid argument." << endl;    m_error = -1;    DBUG_VOID_RETURN;  }  int res_enable;  item = strtok_r(NULL, " ", &tmpPtr);  if (item == NULL) {    res_enable=      ndb_mgm_set_clusterlog_severity_filter(m_mgmsrv,					     NDB_MGM_EVENT_SEVERITY_ON,					     enable, NULL);    if (res_enable < 0)    {      ndbout << "Couldn't set filter" << endl;      printError();      m_error = -1;      DBUG_VOID_RETURN;    }    ndbout << "Cluster logging is " << (res_enable ? "enabled.":"disabled") << endl;    m_error = 0;    DBUG_VOID_RETURN;  }  do {    severity= NDB_MGM_ILLEGAL_EVENT_SEVERITY;    if (strcasecmp(item, "ALL") == 0) {      severity = NDB_MGM_EVENT_SEVERITY_ALL;	    } else if (strcasecmp(item, "ALERT") == 0) {      severity = NDB_MGM_EVENT_SEVERITY_ALERT;    } else if (strcasecmp(item, "CRITICAL") == 0) {       severity = NDB_MGM_EVENT_SEVERITY_CRITICAL;    } else if (strcasecmp(item, "ERROR") == 0) {      severity = NDB_MGM_EVENT_SEVERITY_ERROR;    } else if (strcasecmp(item, "WARNING") == 0) {      severity = NDB_MGM_EVENT_SEVERITY_WARNING;    } else if (strcasecmp(item, "INFO") == 0) {      severity = NDB_MGM_EVENT_SEVERITY_INFO;    } else if (strcasecmp(item, "DEBUG") == 0) {      severity = NDB_MGM_EVENT_SEVERITY_DEBUG;    } else if (strcasecmp(item, "OFF") == 0 ||	       strcasecmp(item, "ON") == 0) {      if (enable < 0) // only makes sense with toggle	severity = NDB_MGM_EVENT_SEVERITY_ON;    }    if (severity == NDB_MGM_ILLEGAL_EVENT_SEVERITY) {      ndbout << "Invalid severity level: " << item << endl;      m_error = -1;      DBUG_VOID_RETURN;    }    res_enable= ndb_mgm_set_clusterlog_severity_filter(m_mgmsrv, severity,						       enable, NULL);    if (res_enable < 0)    {      ndbout << "Couldn't set filter" << endl;      printError();      m_error = -1;      DBUG_VOID_RETURN;    }    ndbout << BaseString(item).ndb_toupper().c_str() << " " << (res_enable ? "enabled":"disabled") << endl;    item = strtok_r(NULL, " ", &tmpPtr);	  } while(item != NULL);    m_error = 0;  DBUG_VOID_RETURN;} //*****************************************************************************//*****************************************************************************intCommandInterpreter::executeStop(int processId, const char *parameters,                                bool all) {  int retval = 0;  Vector<BaseString> command_list;  if (parameters)  {    BaseString tmp(parameters);    tmp.split(command_list);    for (unsigned i= 0; i < command_list.size();)      command_list[i].c_str()[0] ? i++ : (command_list.erase(i),0);  }  if (all)    retval = executeStop(command_list, 0, 0, 0);  else    retval = executeStop(command_list, 0, &processId, 1);  return retval;}intCommandInterpreter::executeStop(Vector<BaseString> &command_list,                                unsigned command_pos,                                int *node_ids, int no_of_nodes){  int need_disconnect;  int abort= 0;  int retval = 0;  for (; command_pos < command_list.size(); command_pos++)  {    const char *item= command_list[command_pos].c_str();    if (strcasecmp(item, "-A") == 0)    {      abort= 1;      continue;    }    ndbout_c("Invalid option: %s. Expecting -A after STOP",             item);    return -1;  }  int result= ndb_mgm_stop3(m_mgmsrv, no_of_nodes, node_ids, abort,                            &need_disconnect);  if (result < 0)  {    ndbout_c("Shutdown failed.");    printError();    retval = -1;  }  else  {    if (node_ids == 0)      ndbout_c("NDB Cluster has shutdown.");    else    {      ndbout << "Node";      for (int i= 0; i < no_of_nodes; i++)          ndbout << " " << node_ids[i];      ndbout_c(" has shutdown.");    }  }  if(need_disconnect)  {    ndbout << "Disconnecting to allow Management Server to shutdown" << endl;    disconnect();  }  return retval;}intCommandInterpreter::executeEnterSingleUser(char* parameters) {  strtok(parameters, " ");  struct ndb_mgm_reply reply;  char* id = strtok(NULL, " ");  id = strtok(NULL, " ");  id = strtok(NULL, "\0");  int nodeId = -1;  if(id == 0 || sscanf(id, "%d", &nodeId) != 1){    ndbout_c("Invalid arguments: expected <NodeId>");    ndbout_c("Use SHOW to see what API nodes are configured");    return -1;  }  int result = ndb_mgm_enter_single_user(m_mgmsrv, nodeId, &reply);    if (result != 0) {    ndbout_c("Entering single user mode for node %d failed", nodeId);    printError();    return -1;  } else {    ndbout_c("Single user mode entered");    ndbout_c("Access is granted for API node %d only.", nodeId);  }  return 0;}intCommandInterpreter::executeExitSingleUser(char* parameters) {  int result = ndb_mgm_exit_single_user(m_mgmsrv, 0);  if (result != 0) {    ndbout_c("Exiting single user mode failed.");    printError();    return -1;  } else {    ndbout_c("Exiting single user mode in progress.");    ndbout_c("Use ALL STATUS or SHOW to see when single user mode has been exited.");    return 0;  }}intCommandInterpreter::executeStart(int processId, const char* parameters,				 bool all) {  int result;  int retval = 0;  if(all) {    result = ndb_mgm_start(m_mgmsrv, 0, 0);  } else {    result = ndb_mgm_start(m_mgmsrv, 1, &processId);  }  if (result <= 0) {    ndbout << "Start failed." << endl;    printError();    retval = -1;  } else    {      if(all)	ndbout_c("NDB Cluster is being started.");      else	ndbout_c("Database node %d is being started.", processId);    }  return retval;}intCommandInterpreter::executeRestart(int processId, const char* parameters,				   bool all){  Vector<BaseString> command_list;  int retval = 0;  if (parameters)  {    BaseString tmp(parameters);    tmp.split(command_list);    for (unsigned i= 0; i < command_list.size();)      command_list[i].c_str()[0] ? i++ : (command_list.erase(i),0);  }  if (all)    retval = executeRestart(comman

⌨️ 快捷键说明

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