mgmSrvApi.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /****************************************************
  14.  *  Name: 
  15.  *       mgmSrvApi.cpp
  16.  *
  17.  *  Description:
  18.  *      Test the bahaviour of the Management Server 
  19.  *      API based on the tests specified in the 
  20.  *      "Test Specification for the Management 
  21.  *       Server API" document
  22.  *  
  23.  *****************************************************/
  24. #include <ndb_global.h>
  25. #include "mgmapi.h"
  26. #include "mgmapi_commands.h"
  27. #include <NdbMain.h>
  28. #include <NdbOut.hpp>
  29. /**
  30.  * The pupose of this test program is to 
  31.  * verify that the Management Server
  32.  * API is functioning properly, i.e. a handle 
  33.  * can be created/destroyed properly, the 
  34.  * connection to the NDB nodes is established 
  35.  * correctly, and all the errors are handled in 
  36.  * a proper way.
  37.  * USE: mgmSrvApi -n -i 
  38.  *
  39.  * @param       n     Number of nodes to crash
  40.  *
  41.  **/
  42. NDB_COMMAND(mgmSrvApi, "mgmSrvApi", "mgmSrvApi -n <Number of nodes to crash> -i <Node ID to be crashed> -p <IP address:port number>", "Management Server API testing", 65535){
  43.   const char *Addr = 0;
  44.   int i;
  45.   int nodesNo = 0; // Number of nodes to crash
  46.   int ndbID = 0;  // Node ID to be crashed 
  47.   i = 1;
  48.   while (argc > 1) {
  49.     if (strcmp(argv[i], "-n") == 0) 
  50.       nodesNo = atoi(argv[i+1]);
  51.  
  52.     if (strcmp(argv[i], "-i") == 0) 
  53.       ndbID = atoi(argv[i+1]);
  54.     if (strcmp(argv[i], "-p") == 0)
  55.        Addr = argv[i+1];
  56.     
  57.     argc -= 1;
  58.     i = i + 1; 
  59.   }
  60.   /*  
  61.    * Create a handle
  62.    */
  63.   ndbout << "Creating handle..." << endl;
  64.   NdbMgmHandle h = ndb_mgm_create_handle();   
  65.  
  66.   /*  
  67.    * Perfom the connection
  68.    */
  69.   ndbout << "Connecting..." << endl;
  70.   if (ndb_mgm_connect(h, Addr) == -1) {
  71.     ndbout << "Connection to " << Addr << " failed" << endl;
  72.     exit(-1);
  73.   }
  74.   /*  
  75.    * Get status of a node
  76.    */
  77.   ndbout << "Getting status..." << endl;
  78.   
  79.   struct ndb_mgm_cluster_state * status;
  80.   struct ndb_mgm_node_state * nodes;
  81.   status = ndb_mgm_get_status(h);
  82.   nodes = status->node_states;
  83.   if (nodes->node_status == 1) {
  84.     ndbout << "No contact established" << endl;
  85.     //  exit(-1);
  86.   }
  87.     
  88.   /*  
  89.    * Stop the NDB nodes
  90.    */
  91.   ndbout << "Stopping the node(s)" << endl;
  92.   const int * list;
  93.   if (nodesNo == 0) // all nodes stopped by definition
  94.     ndbID = 0;
  95.   list = &ndbID;
  96.   if (ndb_mgm_stop(h, nodesNo, list) != 1) {
  97.     ndbout << nodesNo << " NDB node(s) not stopped " << endl;
  98.   }
  99.  
  100.   /*  
  101.    * Disconnect from the management server
  102.    */
  103.   ndbout << "Disconnecting..." << endl;
  104.   ndb_mgm_disconnect(h);
  105.   /*  
  106.    * Destroy the handle
  107.    */
  108.   ndbout << "Destroying the handle..." << endl;
  109.   ndb_mgm_destroy_handle(&h);
  110.   return 0;
  111. }