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

📄 services.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    m_output->println("result: %s", get_error_text(result));  }  else {    m_output->println("result: Ok");  }  m_output->println("");}voidMgmApiSession::exitSingleUser(Parser<MgmApiSession>::Context &,			      Properties const &args) {  int stopped = 0;  int result = m_mgmsrv.exitSingleUser(&stopped, false);  m_output->println("exit single user reply");  if(result != 0)    m_output->println("result: %s", get_error_text(result));  else    m_output->println("result: Ok");  m_output->println("");}voidMgmApiSession::startSignalLog(Parser<MgmApiSession>::Context &,			      Properties const &args) {  Uint32 node;  args.get("node", &node);  int result = m_mgmsrv.startSignalTracing(node);  m_output->println("start signallog reply");  if(result != 0)    m_output->println("result: %s", get_error_text(result));  else    m_output->println("result: Ok");  m_output->println("");}voidMgmApiSession::logSignals(Parser<MgmApiSession>::Context &,			   Properties const &args) {  Uint32 node = 0, in = 0, out = 0;  //  BaseString blocks;  BaseString blockList;  char * blockName;  args.get("node", &node);  args.get("in", &in);  args.get("out", &out);  args.get("blocks", blockList);  // fast fix - pekka  char buf[200];  BaseString::snprintf(buf, 200, "%s", blockList.c_str());  Vector<BaseString> blocks;    blockName=strtok(buf,"|");  while( blockName != NULL)    {      blocks.push_back(blockName);      blockName=strtok(NULL,"|");    }    if(in > 1 || out > 1)    return; /* Invalid arguments */    const MgmtSrvr::LogMode modes[] = {    MgmtSrvr::Off,    MgmtSrvr::Out,    MgmtSrvr::In,    MgmtSrvr::InOut,  };  MgmtSrvr::LogMode mode = modes[in<<1 | out];  int result = m_mgmsrv.setSignalLoggingMode(node, mode, blocks);  m_output->println("log signals reply");  if(result != 0)    m_output->println("result: %s", get_error_text(result));  else    m_output->println("result: Ok");  m_output->println("");}voidMgmApiSession::start(Parser<MgmApiSession>::Context &,		     Properties const &args) {  Uint32 node;  args.get("node", &node);    int result = m_mgmsrv.start(node);  m_output->println("start reply");  if(result != 0)    m_output->println("result: %s", get_error_text(result));  else    m_output->println("result: Ok");  m_output->println("");}voidMgmApiSession::startAll(Parser<MgmApiSession>::Context &,			Properties const &) {  NodeId node = 0;  int started = 0;  while(m_mgmsrv.getNextNodeId(&node, NDB_MGM_NODE_TYPE_NDB))    if(m_mgmsrv.start(node) == 0)      started++;  m_output->println("start reply");  m_output->println("result: Ok");  m_output->println("started: %d", started);  m_output->println("");}voidMgmApiSession::setLogFilter(Parser_t::Context &ctx,			    const class Properties &args) {  Uint32 severity;  Uint32 enable;  args.get("level", &severity);  args.get("enable", &enable);  int result = m_mgmsrv.setEventLogFilter(severity, enable);  m_output->println("set logfilter reply");  m_output->println("result: %d", result);  m_output->println("");}static NdbOut&operator<<(NdbOut& out, const LogLevel & ll){  out << "[LogLevel: ";  for(size_t i = 0; i<LogLevel::LOGLEVEL_CATEGORIES; i++)    out << ll.getLogLevel((LogLevel::EventCategory)i) << " ";  out << "]";  return out;}voidNdb_mgmd_event_service::log(int eventType, const Uint32* theData, NodeId nodeId){    Uint32 threshold;  LogLevel::EventCategory cat;  Logger::LoggerLevel severity;  EventLoggerBase::EventTextFunction textF;  int i, n;  DBUG_ENTER("Ndb_mgmd_event_service::log");  DBUG_PRINT("enter",("eventType=%d, nodeid=%d", eventType, nodeId));  if (EventLoggerBase::event_lookup(eventType,cat,threshold,severity,textF))    DBUG_VOID_RETURN;  char m_text[256];  EventLogger::getText(m_text, sizeof(m_text),		       textF, theData, nodeId);  BaseString str("log event reply\n");  str.appfmt("type=%d\n", eventType);  str.appfmt("time=%d\n", 0);  str.appfmt("source_nodeid=%d\n", nodeId);  for (i= 0; ndb_logevent_body[i].token; i++)  {    if ( ndb_logevent_body[i].type != eventType)      continue;    int val= theData[ndb_logevent_body[i].index];    if (ndb_logevent_body[i].index_fn)      val= (*(ndb_logevent_body[i].index_fn))(val);    str.appfmt("%s=%d\n",ndb_logevent_body[i].token, val);  }  Vector<NDB_SOCKET_TYPE> copy;  m_clients.lock();  for(i = m_clients.size() - 1; i >= 0; i--)  {    if(threshold <= m_clients[i].m_logLevel.getLogLevel(cat))    {      NDB_SOCKET_TYPE fd= m_clients[i].m_socket;      if(fd != NDB_INVALID_SOCKET)      {	int r;	if (m_clients[i].m_parsable)	  r= println_socket(fd,			    MAX_WRITE_TIMEOUT, str.c_str());	else	  r= println_socket(fd,			    MAX_WRITE_TIMEOUT, m_text);	if (r == -1) {	  copy.push_back(fd);	  m_clients.erase(i, false);	}      }    }  }  m_clients.unlock();    if ((n= (int)copy.size()))  {    for(i= 0; i < n; i++)      NDB_CLOSE_SOCKET(copy[i]);    LogLevel tmp; tmp.clear();    m_clients.lock();    for(i= m_clients.size() - 1; i >= 0; i--)      tmp.set_max(m_clients[i].m_logLevel);    m_clients.unlock();    update_log_level(tmp);  }  DBUG_VOID_RETURN;}voidNdb_mgmd_event_service::update_max_log_level(const LogLevel &log_level){  LogLevel tmp= m_logLevel;  tmp.set_max(log_level);  update_log_level(tmp);}voidNdb_mgmd_event_service::update_log_level(const LogLevel &tmp){  if(!(tmp == m_logLevel)){    m_logLevel = tmp;    EventSubscribeReq req;    req = tmp;    req.blockRef = 0;    m_mgmsrv->m_log_level_requests.push_back(req);  }}voidNdb_mgmd_event_service::check_listeners(){  int i, n= 0;  DBUG_ENTER("Ndb_mgmd_event_service::check_listeners");  m_clients.lock();  for(i= m_clients.size() - 1; i >= 0; i--)  {    int fd= m_clients[i].m_socket;    DBUG_PRINT("info",("%d %d",i,fd));    char buf[1];    buf[0]=0;    if (fd != NDB_INVALID_SOCKET &&	println_socket(fd,MAX_WRITE_TIMEOUT,"<PING>") == -1)    {      NDB_CLOSE_SOCKET(fd);      m_clients.erase(i, false);      n=1;    }  }  if (n)  {    LogLevel tmp; tmp.clear();    for(i= m_clients.size() - 1; i >= 0; i--)      tmp.set_max(m_clients[i].m_logLevel);    update_log_level(tmp);  }  m_clients.unlock();  DBUG_VOID_RETURN;}voidNdb_mgmd_event_service::add_listener(const Event_listener& client){  DBUG_ENTER("Ndb_mgmd_event_service::add_listener");  DBUG_PRINT("enter",("client.m_socket: %d", client.m_socket));  check_listeners();  m_clients.push_back(client);  update_max_log_level(client.m_logLevel);  DBUG_VOID_RETURN;}voidNdb_mgmd_event_service::stop_sessions(){  m_clients.lock();  for(int i = m_clients.size() - 1; i >= 0; i--){    if(m_clients[i].m_socket != NDB_INVALID_SOCKET){      NDB_CLOSE_SOCKET(m_clients[i].m_socket);      m_clients.erase(i);    }  }  m_clients.unlock();}voidMgmApiSession::setParameter(Parser_t::Context &,			    Properties const &args) {  BaseString node, param, value;  args.get("node", node);  args.get("parameter", param);  args.get("value", value);    BaseString result;  int ret = m_mgmsrv.setDbParameter(atoi(node.c_str()), 				    atoi(param.c_str()),				    value.c_str(),				    result);    m_output->println("set parameter reply");  m_output->println("message: %s", result.c_str());  m_output->println("result: %d", ret);  m_output->println("");}voidMgmApiSession::setConnectionParameter(Parser_t::Context &ctx,				      Properties const &args) {  BaseString node1, node2, param, value;  args.get("node1", node1);  args.get("node2", node2);  args.get("param", param);  args.get("value", value);    BaseString result;  int ret = m_mgmsrv.setConnectionDbParameter(atoi(node1.c_str()),					      atoi(node2.c_str()),					      atoi(param.c_str()),					      atoi(value.c_str()),					      result);    m_output->println("set connection parameter reply");  m_output->println("message: %s", result.c_str());  m_output->println("result: %s", (ret>0)?"Ok":"Failed");  m_output->println("");}voidMgmApiSession::getConnectionParameter(Parser_t::Context &ctx,				      Properties const &args) {  BaseString node1, node2, param;  int value = 0;  args.get("node1", node1);  args.get("node2", node2);  args.get("param", param);    BaseString result;  int ret = m_mgmsrv.getConnectionDbParameter(atoi(node1.c_str()),					      atoi(node2.c_str()),					      atoi(param.c_str()),					      &value,					      result);    m_output->println("get connection parameter reply");  m_output->println("value: %d", value);  m_output->println("result: %s", (ret>0)?"Ok":result.c_str());  m_output->println("");}voidMgmApiSession::listen_event(Parser<MgmApiSession>::Context & ctx,			    Properties const & args) {  Uint32 parsable= 0;  BaseString node, param, value;  args.get("node", node);  args.get("filter", param);  args.get("parsable", &parsable);  int result = 0;  BaseString msg;  Ndb_mgmd_event_service::Event_listener le;  le.m_parsable = parsable;  le.m_socket = m_socket;  Vector<BaseString> list;  param.trim();  param.split(list, " ,");  for(size_t i = 0; i<list.size(); i++){    Vector<BaseString> spec;    list[i].trim();    list[i].split(spec, "=:");    if(spec.size() != 2){      msg.appfmt("Invalid filter specification: >%s< >%s< %d", 		 param.c_str(), list[i].c_str(), spec.size());      result = -1;      goto done;    }    spec[0].trim().ndb_toupper();    int category = ndb_mgm_match_event_category(spec[0].c_str());    if(category == NDB_MGM_ILLEGAL_EVENT_CATEGORY){      category = atoi(spec[0].c_str());      if(category < NDB_MGM_MIN_EVENT_CATEGORY ||	 category > NDB_MGM_MAX_EVENT_CATEGORY){	msg.appfmt("Unknown category: >%s<", spec[0].c_str());	result = -1;	goto done;      }    }        int level = atoi(spec[1].c_str());    if(level < 0 || level > 15){      msg.appfmt("Invalid level: >%s<", spec[1].c_str());      result = -1;      goto done;    }    category -= CFG_MIN_LOGLEVEL;    le.m_logLevel.setLogLevel((LogLevel::EventCategory)category, level);  }    if(list.size() == 0){    msg.appfmt("Empty filter specification");    result = -1;    goto done;  }    m_mgmsrv.m_event_listner.add_listener(le);    m_stop = true;  m_socket = NDB_INVALID_SOCKET;done:  m_output->println("listen event");  m_output->println("result: %d", result);  if(result != 0)    m_output->println("msg: %s", msg.c_str());  m_output->println("");}struct PurgeStruct{  NodeBitmask free_nodes;/* free nodes as reported			  * by ndbd in apiRegReqConf			  */  BaseString *str;};voidMgmApiSession::stop_session_if_not_connected(SocketServer::Session *_s, void *data){  MgmApiSession *s= (MgmApiSession *)_s;  struct PurgeStruct &ps= *(struct PurgeStruct *)data;  if (s->m_allocated_resources->is_reserved(ps.free_nodes))  {    ps.str->appfmt(" %d", s->m_allocated_resources->get_nodeid());    s->stopSession();  }}voidMgmApiSession::purge_stale_sessions(Parser_t::Context &ctx,				    const class Properties &args){  struct PurgeStruct ps;  BaseString str;  ps.str = &str;  m_mgmsrv.get_connected_nodes(ps.free_nodes);  ps.free_nodes.bitXORC(NodeBitmask()); // invert connected_nodes to get free nodes  m_mgmsrv.get_socket_server()->foreachSession(stop_session_if_not_connected,&ps);  m_output->println("purge stale sessions reply");  if (str.length() > 0)    m_output->println("purged:%s",str.c_str());  m_output->println("result: Ok");  m_output->println("");}voidMgmApiSession::check_connection(Parser_t::Context &ctx,				const class Properties &args){  m_output->println("check connection reply");  m_output->println("result: Ok");  m_output->println("");}voidMgmApiSession::transporter_connect(Parser_t::Context &ctx,				   Properties const &args){  m_mgmsrv.transporter_connect(m_socket);  m_stop= true;  m_stopped= true; // force a stop (no closing socket)  m_socket= NDB_INVALID_SOCKET;   // so nobody closes it}voidMgmApiSession::get_mgmd_nodeid(Parser_t::Context &ctx,			       Properties const &args){  m_output->println("get mgmd nodeid reply");  m_output->println("nodeid:%u",m_mgmsrv.getOwnNodeId());    m_output->println("");}voidMgmApiSession::report_event(Parser_t::Context &ctx,			    Properties const &args){  Uint32 length;  const char *data_string;  Uint32 data[25];  args.get("length", &length);  args.get("data", &data_string);  BaseString tmp(data_string);  Vector<BaseString> item;  tmp.split(item, " ");  for (int i = 0; i < length ; i++)  {    sscanf(item[i].c_str(), "%u", data+i);  }  m_mgmsrv.eventReport(data);  m_output->println("report event reply");  m_output->println("result: ok");  m_output->println("");}template class MutexVector<int>;template class Vector<ParserRow<MgmApiSession> const*>;

⌨️ 快捷键说明

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