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

📄 main.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   end:  fclose(f);  return result;}boolconnect_hosts(atrt_config& config){  for(size_t i = 0; i<config.m_hosts.size(); i++){    if(config.m_hosts[i].m_cpcd->connect() != 0){      g_logger.error("Unable to connect to cpc %s:%d",		     config.m_hosts[i].m_cpcd->getHost(),		     config.m_hosts[i].m_cpcd->getPort());      return false;    }    g_logger.debug("Connected to %s:%d",		   config.m_hosts[i].m_cpcd->getHost(),		   config.m_hosts[i].m_cpcd->getPort());  }    return true;}boolconnect_ndb_mgm(atrt_process & proc){  NdbMgmHandle handle = ndb_mgm_create_handle();  if(handle == 0){    g_logger.critical("Unable to create mgm handle");    return false;  }  BaseString tmp = proc.m_hostname;  tmp.appfmt(":%d", proc.m_ndb_mgm_port);  if (ndb_mgm_set_connectstring(handle,tmp.c_str()))  {    g_logger.critical("Unable to create parse connectstring");    return false;  }  if(ndb_mgm_connect(handle, 30, 1, 0) != -1)  {    proc.m_ndb_mgm_handle = handle;    return true;  }  g_logger.critical("Unable to connect to ndb mgm %s", tmp.c_str());  return false;}boolconnect_ndb_mgm(atrt_config& config){  for(size_t i = 0; i<config.m_processes.size(); i++){    atrt_process & proc = config.m_processes[i];    if((proc.m_type & atrt_process::NDB_MGM) != 0){      if(!connect_ndb_mgm(proc)){	return false;      }    }  }    return true;}static int remap(int i){  if(i == NDB_MGM_NODE_STATUS_NO_CONTACT) return NDB_MGM_NODE_STATUS_UNKNOWN;  if(i == NDB_MGM_NODE_STATUS_UNKNOWN) return NDB_MGM_NODE_STATUS_NO_CONTACT;  return i;}boolwait_ndb(atrt_config& config, int goal){  goal = remap(goal);  /**   * Get mgm handle for cluster   */  NdbMgmHandle handle = 0;  for(size_t i = 0; i<config.m_processes.size(); i++){    atrt_process & proc = config.m_processes[i];    if((proc.m_type & atrt_process::NDB_MGM) != 0){      handle = proc.m_ndb_mgm_handle;      break;    }  }  if(handle == 0){    g_logger.critical("Unable to find mgm handle");    return false;  }  if(goal == NDB_MGM_NODE_STATUS_STARTED){    /**     * 1) wait NOT_STARTED     * 2) send start     * 3) wait STARTED     */    if(!wait_ndb(config, NDB_MGM_NODE_STATUS_NOT_STARTED))      return false;        ndb_mgm_start(handle, 0, 0);  }  struct ndb_mgm_cluster_state * state;  time_t now = time(0);  time_t end = now + 360;  int min = remap(NDB_MGM_NODE_STATUS_NO_CONTACT);  int min2 = goal;  while(now < end){    /**     * 1) retreive current state     */    state = 0;    do {      state = ndb_mgm_get_status(handle);      if(state == 0){	const int err = ndb_mgm_get_latest_error(handle);	g_logger.error("Unable to poll db state: %d %s %s",		       ndb_mgm_get_latest_error(handle),		       ndb_mgm_get_latest_error_msg(handle),		       ndb_mgm_get_latest_error_desc(handle));	if(err == NDB_MGM_SERVER_NOT_CONNECTED && connect_ndb_mgm(config)){	  g_logger.error("Reconnected...");	  continue;	}	return false;      }    } while(state == 0);    NdbAutoPtr<void> tmp(state);        min2 = goal;    for(int i = 0; i<state->no_of_nodes; i++){      if(state->node_states[i].node_type == NDB_MGM_NODE_TYPE_NDB){	const int s = remap(state->node_states[i].node_status);	min2 = (min2 < s ? min2 : s );		if(s < remap(NDB_MGM_NODE_STATUS_NO_CONTACT) || 	   s > NDB_MGM_NODE_STATUS_STARTED){	  g_logger.critical("Strange DB status during start: %d %d", i, min2);	  return false;	}	if(min2 < min){	  g_logger.critical("wait ndb failed node: %d %d %d %d", 			    state->node_states[i].node_id, min, min2, goal);	}      }    }        if(min2 < min){      g_logger.critical("wait ndb failed %d %d %d", min, min2, goal);      return false;    }        if(min2 == goal){      return true;      break;    }        min = min2;    now = time(0);  }    g_logger.critical("wait ndb timed out %d %d %d", min, min2, goal);    return false;}boolstart_process(atrt_process & proc){  if(proc.m_proc.m_id != -1){    g_logger.critical("starting already started process: %d", proc.m_index);    return false;  }    BaseString path = proc.m_proc.m_cwd.substr(proc.m_host->m_base_dir.length()+BaseString("/run").length());    BaseString tmp = g_setup_progname;  tmp.appfmt(" %s %s/%s/ %s",	     proc.m_host->m_hostname.c_str(),	     g_setup_path,	     path.c_str(),	     proc.m_proc.m_cwd.c_str());  const int r1 = system(tmp.c_str());  if(r1 != 0){    g_logger.critical("Failed to setup process");    return false;  }  {    Properties reply;    if(proc.m_host->m_cpcd->define_process(proc.m_proc, reply) != 0){      BaseString msg;      reply.get("errormessage", msg);      g_logger.error("Unable to define process: %s", msg.c_str());            return false;    }  }  {    Properties reply;    if(proc.m_host->m_cpcd->start_process(proc.m_proc.m_id, reply) != 0){      BaseString msg;      reply.get("errormessage", msg);      g_logger.error("Unable to start process: %s", msg.c_str());      return false;    }  }  return true;}boolstart_processes(atrt_config& config, int types){  for(size_t i = 0; i<config.m_processes.size(); i++){    atrt_process & proc = config.m_processes[i];    if((types & proc.m_type) != 0 && proc.m_proc.m_path != ""){      if(!start_process(proc)){	return false;      }    }  }  return true;}boolstop_process(atrt_process & proc){  if(proc.m_proc.m_id == -1){    return true;  }  {    Properties reply;    if(proc.m_host->m_cpcd->stop_process(proc.m_proc.m_id, reply) != 0){      Uint32 status;      reply.get("status", &status);      if(status != 4){	BaseString msg;	reply.get("errormessage", msg);	g_logger.error("Unable to stop process: %s(%d)", msg.c_str(), status);	return false;      }    }  }  {    Properties reply;    if(proc.m_host->m_cpcd->undefine_process(proc.m_proc.m_id, reply) != 0){      BaseString msg;      reply.get("errormessage", msg);      g_logger.error("Unable to undefine process: %s", msg.c_str());            return false;    }    proc.m_proc.m_id = -1;  }  return true;}boolstop_processes(atrt_config& config, int types){  for(size_t i = 0; i<config.m_processes.size(); i++){    atrt_process & proc = config.m_processes[i];    if((types & proc.m_type) != 0){      if(!stop_process(proc)){	return false;      }    }  }  return true;}boolupdate_status(atrt_config& config, int){    Vector<Vector<SimpleCpcClient::Process> > m_procs;    Vector<SimpleCpcClient::Process> dummy;  m_procs.fill(config.m_hosts.size(), dummy);  for(size_t i = 0; i<config.m_hosts.size(); i++){    Properties p;    config.m_hosts[i].m_cpcd->list_processes(m_procs[i], p);  }  for(size_t i = 0; i<config.m_processes.size(); i++){    atrt_process & proc = config.m_processes[i];    if(proc.m_proc.m_id != -1){      Vector<SimpleCpcClient::Process> &h_procs= m_procs[proc.m_host->m_index];      bool found = false;      for(size_t j = 0; j<h_procs.size(); j++){	if(proc.m_proc.m_id == h_procs[j].m_id){	  found = true;	  proc.m_proc.m_status = h_procs[j].m_status;	  break;	}      }      if(!found){	g_logger.error("update_status: not found");	g_logger.error("id: %d host: %s cmd: %s", 		       proc.m_proc.m_id,		       proc.m_hostname.c_str(),		       proc.m_proc.m_path.c_str());	for(size_t j = 0; j<h_procs.size(); j++){	  g_logger.error("found: %d %s", h_procs[j].m_id, 			 h_procs[j].m_path.c_str());	}	return false;      }    }  }  return true;}intis_running(atrt_config& config, int types){  int found = 0, running = 0;  for(size_t i = 0; i<config.m_processes.size(); i++){    atrt_process & proc = config.m_processes[i];     if((types & proc.m_type) != 0){      found++;      if(proc.m_proc.m_status == "running")	running++;    }  }    if(found == running)    return 2;  if(running == 0)    return 0;  return 1;}intinsert(const char * pair, Properties & p){  BaseString tmp(pair);    tmp.trim(" \t\n\r");  Vector<BaseString> split;  tmp.split(split, ":=", 2);  if(split.size() != 2)    return -1;  p.put(split[0].trim().c_str(), split[1].trim().c_str());   return 0;}boolread_test_case(FILE * file, atrt_testcase& tc, int& line){  Properties p;  int elements = 0;  char buf[1024];  while(!feof(file)){    if(!fgets(buf, 1024, file))      break;    line++;    BaseString tmp = buf;        if(tmp.length() > 0 && tmp.c_str()[0] == '#')      continue;        if(insert(tmp.c_str(), p) != 0)      break;        elements++;  }    if(elements == 0){    if(file == stdin){      BaseString tmp(buf);       tmp.trim(" \t\n\r");      Vector<BaseString> split;      tmp.split(split, " ", 2);      tc.m_command = split[0];      if(split.size() == 2)	tc.m_args = split[1];      else	tc.m_args = "";      tc.m_max_time = 60000;      return true;    }    return false;  }  if(!p.get("cmd", tc.m_command)){    g_logger.critical("Invalid test file: cmd is missing near line: %d", line);    return false;  }    if(!p.get("args", tc.m_args))    tc.m_args = "";  const char * mt = 0;  if(!p.get("max-time", &mt))    tc.m_max_time = 60000;  else    tc.m_max_time = atoi(mt);  if(p.get("type", &mt) && strcmp(mt, "bench") == 0)    tc.m_report= true;  else    tc.m_report= false;  if(p.get("run-all", &mt) && strcmp(mt, "yes") == 0)    tc.m_run_all= true;  else    tc.m_run_all= false;    return true;}boolsetup_test_case(atrt_config& config, const atrt_testcase& tc){  const int r1 = system(g_clear_progname);  if(r1 != 0){    g_logger.critical("Failed to clear result");    return false;  }    size_t i = 0;  for(; i<config.m_processes.size(); i++){    atrt_process & proc = config.m_processes[i];     if(proc.m_type == atrt_process::NDB_API || proc.m_type == atrt_process::MYSQL_CLIENT){      proc.m_proc.m_path.assfmt("%s/bin/%s", proc.m_host->m_base_dir.c_str(),				tc.m_command.c_str());      proc.m_proc.m_args.assign(tc.m_args);      if(!tc.m_run_all)        break;    }  }  for(i++; i<config.m_processes.size(); i++){    atrt_process & proc = config.m_processes[i];     if(proc.m_type == atrt_process::NDB_API || proc.m_type == atrt_process::MYSQL_CLIENT){      proc.m_proc.m_path.assign("");      proc.m_proc.m_args.assign("");    }  }  return true;}boolgather_result(atrt_config& config, int * result){  BaseString tmp = g_gather_progname;  for(size_t i = 0; i<config.m_processes.size(); i++){    atrt_process & proc = config.m_processes[i];     if(proc.m_proc.m_path != ""){      tmp.appfmt(" %s:%s", 		 proc.m_hostname.c_str(),		 proc.m_proc.m_cwd.c_str());    }  }    const int r1 = system(tmp.c_str());  if(r1 != 0){    g_logger.critical("Failed to gather result");    return false;  }  const int r2 = system(g_analyze_progname);  if(r2 == -1 || r2 == (127 << 8)){    g_logger.critical("Failed to analyze results");    return false;  }    * result = r2 ;  return true;}boolsetup_hosts(atrt_config& config){  const int r1 = system(g_clear_progname);  if(r1 != 0){    g_logger.critical("Failed to clear result");    return false;  }  for(size_t i = 0; i<config.m_hosts.size(); i++){    BaseString tmp = g_setup_progname;    tmp.appfmt(" %s %s/ %s/run", 	       config.m_hosts[i].m_hostname.c_str(),	       g_setup_path,	       config.m_hosts[i].m_base_dir.c_str());        const int r1 = system(tmp.c_str());    if(r1 != 0){      g_logger.critical("Failed to setup %s",			config.m_hosts[i].m_hostname.c_str());      return false;    }  }  return true;}template class Vector<Vector<SimpleCpcClient::Process> >;template class Vector<atrt_host>;template class Vector<atrt_process>;

⌨️ 快捷键说明

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