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

📄 commandinterpreter.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    ndbout_c("Executing RESTART on all nodes.");    ndbout_c("Starting shutdown. This may take a while. Please wait...");    (this->*fun)(nodeId, allAfterSecondToken, true);    ndbout_c("Trying to start all nodes of system.");    ndbout_c("Use ALL STATUS to see the system start-up phases.");  } else {    struct ndb_mgm_cluster_state *cl= ndb_mgm_get_status(m_mgmsrv);    if(cl == 0){      ndbout_c("Unable get status from management server");      printError();      return;    }    NdbAutoPtr<char> ap1((char*)cl);    while(get_next_nodeid(cl, &nodeId, NDB_MGM_NODE_TYPE_NDB))      (this->*fun)(nodeId, allAfterSecondToken, true);  }}//*****************************************************************************//*****************************************************************************bool CommandInterpreter::parseBlockSpecification(const char* allAfterLog,					    Vector<const char*>& blocks) {  // Parse: [BLOCK = {ALL|<blockName>+}]  if (emptyString(allAfterLog)) {    return true;  }  // Copy allAfterLog since strtok will modify it    char* newAllAfterLog = my_strdup(allAfterLog,MYF(MY_WME));  My_auto_ptr<char> ap1(newAllAfterLog);  char* firstTokenAfterLog = strtok(newAllAfterLog, " ");  for (unsigned int i = 0; i < strlen(firstTokenAfterLog); ++i) {    firstTokenAfterLog[i] = toupper(firstTokenAfterLog[i]);  }    if (strcasecmp(firstTokenAfterLog, "BLOCK") != 0) {    ndbout << "Unexpected value: " << firstTokenAfterLog 	   << ". Expected BLOCK." << endl;    return false;  }  char* allAfterFirstToken = strtok(NULL, "\0");  if (emptyString(allAfterFirstToken)) {    ndbout << "Expected =." << endl;    return false;  }  char* secondTokenAfterLog = strtok(allAfterFirstToken, " ");  if (strcasecmp(secondTokenAfterLog, "=") != 0) {    ndbout << "Unexpected value: " << secondTokenAfterLog 	   << ". Expected =." << endl;    return false;  }  char* blockName = strtok(NULL, " ");  bool all = false;  if (blockName != NULL && (strcasecmp(blockName, "ALL") == 0)) {    all = true;  }  while (blockName != NULL) {    blocks.push_back(strdup(blockName));    blockName = strtok(NULL, " ");  }  if (blocks.size() == 0) {    ndbout << "No block specified." << endl;    return false;  }  if (blocks.size() > 1 && all) {    // More than "ALL" specified    ndbout << "Nothing expected after ALL." << endl;    return false;  }    return true;}/***************************************************************************** * HELP *****************************************************************************/void CommandInterpreter::executeHelp(char* parameters){  if (emptyString(parameters)) {    ndbout << helpText;    ndbout << endl 	   << "<severity> = " 	   << "ALERT | CRITICAL | ERROR | WARNING | INFO | DEBUG"	   << endl;    ndbout << "<category> = ";    for(int i = CFG_MIN_LOGLEVEL; i <= CFG_MAX_LOGLEVEL; i++){      const char *str= ndb_mgm_get_event_category_string((ndb_mgm_event_category)i);      if (str) {	if (i != CFG_MIN_LOGLEVEL)	  ndbout << " | ";	ndbout << str;      }    }    ndbout << endl;    ndbout << "<level>    = " << "0 - 15" << endl;    ndbout << "<id>       = " << "ALL | Any database node id" << endl;    ndbout << endl;  } else if (strcasecmp(parameters, "SHOW") == 0) {    ndbout << helpTextShow;#ifdef HAVE_GLOBAL_REPLICATION  } else if (strcasecmp(parameters, "REPLICATION") == 0 ||	     strcasecmp(parameters, "REP") == 0) {    ndbout << helpTextRep;#endif // HAVE_GLOBAL_REPLICATION#ifdef VM_TRACE // DEBUG ONLY  } else if (strcasecmp(parameters, "DEBUG") == 0) {    ndbout << helpTextDebug;#endif  } else {    invalid_command(parameters);  }}/***************************************************************************** * SHUTDOWN *****************************************************************************/intCommandInterpreter::executeShutdown(char* parameters) {   ndb_mgm_cluster_state *state = ndb_mgm_get_status(m_mgmsrv);  if(state == NULL) {    ndbout_c("Could not get status");    printError();    return 1;  }  NdbAutoPtr<char> ap1((char*)state);  int result = 0;  result = ndb_mgm_stop(m_mgmsrv, 0, 0);  if (result < 0) {    ndbout << "Shutdown of NDB Cluster node(s) failed." << endl;    printError();    return result;  }  ndbout << result << " NDB Cluster node(s) have shutdown." << endl;  int mgm_id= 0;  mgm_id= ndb_mgm_get_mgmd_nodeid(m_mgmsrv);  if (mgm_id == 0)  {    ndbout << "Unable to locate management server, "           << "shutdown manually with <id> STOP"           << endl;    return 1;  }  result = ndb_mgm_stop(m_mgmsrv, 1, &mgm_id);  if (result <= 0) {    ndbout << "Shutdown of NDB Cluster management server failed." << endl;    printError();    if (result == 0)      return 1;    return result;  }  m_connected= false;  disconnect();  ndbout << "NDB Cluster management server shutdown." << endl;  return 0;}/***************************************************************************** * SHOW *****************************************************************************/staticconst char *status_string(ndb_mgm_node_status status){  switch(status){  case NDB_MGM_NODE_STATUS_NO_CONTACT:    return "not connected";  case NDB_MGM_NODE_STATUS_NOT_STARTED:    return "not started";  case NDB_MGM_NODE_STATUS_STARTING:    return "starting";  case NDB_MGM_NODE_STATUS_STARTED:    return "started";  case NDB_MGM_NODE_STATUS_SHUTTING_DOWN:    return "shutting down";  case NDB_MGM_NODE_STATUS_RESTARTING:    return "restarting";  case NDB_MGM_NODE_STATUS_SINGLEUSER:    return "single user mode";  default:    return "unknown state";  }}static voidprint_nodes(ndb_mgm_cluster_state *state, ndb_mgm_configuration_iterator *it,	    const char *proc_name, int no_proc, ndb_mgm_node_type type,	    int master_id){   int i;  ndbout << "[" << proc_name	 << "(" << ndb_mgm_get_node_type_string(type) << ")]\t"	 << no_proc << " node(s)" << endl;  for(i=0; i < state->no_of_nodes; i++) {    struct ndb_mgm_node_state *node_state= &(state->node_states[i]);    if(node_state->node_type == type) {      int node_id= node_state->node_id;      ndbout << "id=" << node_id;      if(node_state->version != 0) {	const char *hostname= node_state->connect_address;	if (hostname == 0	    || strlen(hostname) == 0	    || strcasecmp(hostname,"0.0.0.0") == 0)	  ndbout << " ";	else	  ndbout << "\t@" << hostname;	ndbout << "  (Version: "	       << getMajor(node_state->version) << "."	       << getMinor(node_state->version) << "."	       << getBuild(node_state->version);	if (type == NDB_MGM_NODE_TYPE_NDB) {	  if (node_state->node_status != NDB_MGM_NODE_STATUS_STARTED) {	    ndbout << ", " << status_string(node_state->node_status);	  }	  if (node_state->node_group >= 0) {	    ndbout << ", Nodegroup: " << node_state->node_group;	    if (master_id && node_state->dynamic_id == master_id)	      ndbout << ", Master";	  }	}	ndbout << ")" << endl;      } else {	ndb_mgm_first(it);	if(ndb_mgm_find(it, CFG_NODE_ID, node_id) == 0){	  const char *config_hostname= 0;	  ndb_mgm_get_string_parameter(it, CFG_NODE_HOST, &config_hostname);	  if (config_hostname == 0 || config_hostname[0] == 0)	    config_hostname= "any host";	  ndbout_c(" (not connected, accepting connect from %s)",		   config_hostname);	}	else	{	  ndbout_c("Unable to find node with id: %d", node_id);	}      }    }  }  ndbout << endl;}voidCommandInterpreter::executePurge(char* parameters) {   int command_ok= 0;  do {    if (emptyString(parameters))      break;    char* firstToken = strtok(parameters, " ");    char* nextToken = strtok(NULL, " \0");    if (strcasecmp(firstToken,"STALE") == 0 &&	nextToken &&	strcasecmp(nextToken, "SESSIONS") == 0) {      command_ok= 1;      break;    }  } while(0);  if (!command_ok) {    ndbout_c("Unexpected command, expected: PURGE STALE SESSIONS");    return;  }  int i;  char *str;    if (ndb_mgm_purge_stale_sessions(m_mgmsrv, &str)) {    ndbout_c("Command failed");    return;  }  if (str) {    ndbout_c("Purged sessions with node id's: %s", str);    free(str);  }  else  {    ndbout_c("No sessions purged");  }}voidCommandInterpreter::executeShow(char* parameters) {   int i;  if (emptyString(parameters)) {    ndb_mgm_cluster_state *state = ndb_mgm_get_status(m_mgmsrv);    if(state == NULL) {      ndbout_c("Could not get status");      printError();      return;    }    NdbAutoPtr<char> ap1((char*)state);    ndb_mgm_configuration * conf = ndb_mgm_get_configuration(m_mgmsrv,0);    if(conf == 0){      ndbout_c("Could not get configuration");      printError();      return;    }    ndb_mgm_configuration_iterator * it;    it = ndb_mgm_create_configuration_iterator((struct ndb_mgm_configuration *)conf, CFG_SECTION_NODE);    if(it == 0){      ndbout_c("Unable to create config iterator");      return;    }    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;      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;    return;  } 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;  }}voidCommandInterpreter::executeConnect(char* parameters) {  disconnect();  if (!emptyString(parameters)) {    if (ndb_mgm_set_connectstring(m_mgmsrv,				  BaseString(parameters).trim().c_str()))    {      printError();      return;    }  }  connect();}//*****************************************************************************//*****************************************************************************void CommandInterpreter::executeClusterLog(char* parameters) {  DBUG_ENTER("CommandInterpreter::executeClusterLog");  int i;  if (emptyString(parameters))  {    ndbout << "Missing argument." << endl;    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();    DBUG_VOID_RETURN;  }  /********************   * CLUSTERLOG INFO   ********************/  if (strcasecmp(item, "INFO") == 0) {    DBUG_PRINT("info",("INFO"));    if(enabled[0] == 0)    {      ndbout << "Cluster logging is disabled." << endl;      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])

⌨️ 快捷键说明

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