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

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. #include <ndb_global.h>
  14. #include <mgmapi.h>
  15. #ifdef VM_TRACE
  16. #include <mgmapi_debug.h>
  17. #endif
  18. #include <NdbOut.hpp>
  19. static int testConnect(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  20. static int testDisconnect(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  21. static int testStatus(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  22. static int testGetConfig(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  23. #ifdef VM_TRACE
  24. static int testLogSignals(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  25. static int testStartSignalLog(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  26. static int testStopSignalLog(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  27. static int testSetTrace(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  28. static int testInsertError(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  29. static int testDumpState(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  30. #endif
  31. static int testFilterClusterLog(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  32. static int testSetLogLevelClusterLog(NdbMgmHandle h, 
  33.      struct ndb_mgm_reply* reply);
  34. static int testSetLogLevelNode(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  35. static int testRestartNode(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  36. static int testGetStatPort(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  37. typedef int (*FUNC)(NdbMgmHandle h, struct ndb_mgm_reply* reply);
  38. struct test_case {
  39.   char name[255];
  40.   FUNC func;
  41. };
  42. struct test_case test_connect_disconnect[] = {
  43.   {"testConnect", &testConnect},
  44.   {"testDisconnect", &testDisconnect}
  45. };
  46. struct test_case tests[] = {
  47.   { "testStatus",           &testStatus           },
  48.   { "testFilterClusterLog", &testFilterClusterLog },
  49.   /*{ "testSetLogLevelClusterLog", &testSetLogLevelClusterLog },*/
  50.   /*{ "testSetLogLevelNode",  &testSetLogLevelNode  },*/
  51.   { "testRestartNode",      &testRestartNode      },
  52.   { "testGetStatPort",      &testGetStatPort      },
  53. #ifdef VM_TRACE
  54.   { "testLogSignals",       &testLogSignals       },
  55.   { "testStartSignalLog",   &testStartSignalLog   },
  56.   { "testStopSignalLog",    &testStopSignalLog    },
  57.   { "testSetTrace",         &testSetTrace         },
  58.   { "testDumpState",        &testDumpState        },
  59.   { "testInsertError",      &testInsertError      }
  60. #endif
  61. };
  62. static int no_of_tests = sizeof(tests) / sizeof(struct test_case);
  63. static int testFailed = 0;
  64. static const char * g_connect_string = "localhost:2200";
  65. int
  66. main(int argc, const char** argv){
  67.   struct ndb_mgm_reply reply;
  68.   int i = 0;
  69.   NdbMgmHandle h = NULL;
  70.   if(argc > 1)
  71.     g_connect_string = argv[1];
  72.   ndbout_c("Using connectstring: %s", g_connect_string);
  73.   for (i = 0; i < 2; i++) {
  74.     ndbout_c("-- %s --", test_connect_disconnect[i].name);
  75.     if (test_connect_disconnect[i].func(h, &reply) == 0) {
  76.       ndbout_c("-- Passed --");
  77.     } else {
  78.       testFailed++;
  79.       ndbout_c("-- Failed --");
  80.     }
  81.   }
  82.   ndbout_c("-- %d passed, %d failed --", (2 - testFailed),  testFailed);
  83.   h = ndb_mgm_create_handle();
  84.   ndb_mgm_connect(h, g_connect_string);
  85.   
  86.   for (i = 0; i < no_of_tests; i ++) {
  87.     ndbout_c("-- %s --", tests[i].name);
  88.     if (tests[i].func(h, &reply) == 0) {
  89.       ndbout_c("-- Passed --");
  90.     } else {
  91.       testFailed++;
  92.       ndbout_c("-- Failed --");
  93.       ndb_mgm_disconnect(h);
  94.       ndb_mgm_connect(h, g_connect_string);      
  95.     }
  96.   }
  97.   ndbout_c("-- %d passed, %d failed --", (no_of_tests - testFailed),  
  98.    testFailed);
  99.   
  100.   ndb_mgm_disconnect(h);
  101.   return 0;
  102. }
  103. static 
  104. int testConnect(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  105.   h = ndb_mgm_create_handle();
  106.   if (h != NULL) {
  107.     if (ndb_mgm_connect(h, g_connect_string) == -1) {
  108.       ndbout_c(g_connect_string);
  109.       /*ndbout_c("last_error: %d", h->last_error); */
  110.       return -1;
  111.     } else {
  112.       ndbout_c("Connected to localhost:37123");
  113.     }
  114.     
  115.   } else {
  116.     ndbout_c("Unable to create a NdbMgmHandle...");
  117.     return -1;
  118.   }
  119.   return 0;
  120. }
  121. static
  122. int testDisconnect(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  123.   ndb_mgm_disconnect(h); 
  124.   
  125.   return 0;
  126. }
  127. static 
  128. int testGetConfig(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  129.   int i = 0;
  130.   struct ndb_mgm_configuration * config =  ndb_mgm_get_configuration(h, 0);
  131.   if (config != NULL) {
  132.     free(config);
  133.   } else {
  134.     ndbout_c("Unable to get config");
  135.     return -1;
  136.   }
  137.   return 0;
  138. }
  139. static 
  140. int testStatus(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  141.   int i = 0;
  142.   struct ndb_mgm_cluster_state* cluster =  ndb_mgm_get_status(h);
  143.   if (cluster != NULL) {
  144.     ndbout_c("Number of nodes: %d", cluster->no_of_nodes);
  145.     for (i = 0; i < cluster->no_of_nodes; i++) {
  146.       struct ndb_mgm_node_state state = cluster->node_states[i];
  147.       ndbout_c("NodeId: %d (%s)-- %s", state.node_id,
  148.        ndb_mgm_get_node_type_string(state.node_type),
  149.        ndb_mgm_get_node_status_string(state.node_status));
  150.       
  151.     }     
  152.     free(cluster);
  153.   } else {
  154.     ndbout_c("Unable to get node status.");
  155.     return -1;
  156.   }
  157.   return 0;
  158. }
  159. #ifdef VM_TRACE
  160. static 
  161. int testLogSignals(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  162.   int rc = 0;
  163.   int nodeId = 0;
  164.   struct ndb_mgm_cluster_state* cluster =  ndb_mgm_get_status(h);
  165.   if (cluster != NULL) {
  166.     if (cluster->no_of_nodes != 0) {
  167.       nodeId = cluster->node_states[0].node_id;
  168.     }
  169.     free(cluster);
  170.   } else {
  171.     ndbout_c("Unable to get node status.");
  172.     return -1;
  173.   }
  174.       
  175.   rc = ndb_mgm_log_signals(h, nodeId, NDB_MGM_SIGNAL_LOG_MODE_INOUT, 
  176.    "CMVMI QMGR", 
  177.    reply);
  178.   if (rc != 0) {
  179.     ndbout_c("rc = %d", reply->return_code);
  180.   } 
  181.   ndbout_c("%s", reply->message); 
  182.   return rc;
  183. }
  184. static 
  185. int testStartSignalLog(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  186.   int rc = 0;
  187.   int nodeId = 0;
  188.   struct ndb_mgm_cluster_state* cluster =  ndb_mgm_get_status(h);
  189.   if (cluster != NULL) {
  190.     if (cluster->no_of_nodes != 0) {
  191.       nodeId = cluster->node_states[0].node_id;
  192.     }
  193.     free(cluster);
  194.   } else {
  195.     ndbout_c("Unable to get node status.");
  196.     return -1;
  197.   }
  198.   rc = ndb_mgm_start_signallog(h, nodeId, reply);
  199.   if (rc != 0) {
  200.     ndbout_c("rc = %d", reply->return_code);
  201.   } 
  202.   ndbout_c("%s", reply->message); 
  203.   return rc;
  204. }
  205. static 
  206. int testStopSignalLog(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  207.   int rc = 0;
  208.   int nodeId = 0;
  209.   struct ndb_mgm_cluster_state* cluster =  ndb_mgm_get_status(h);
  210.   if (cluster != NULL) {
  211.     if (cluster->no_of_nodes != 0) {
  212.       nodeId = cluster->node_states[0].node_id;
  213.     }
  214.     free(cluster);
  215.   } else {
  216.     ndbout_c("Unable to get node status.");
  217.     return -1;
  218.   }
  219.   rc = ndb_mgm_stop_signallog(h, nodeId, reply);
  220.   if (rc != 0) {
  221.     ndbout_c("rc = %d", reply->return_code);
  222.   } 
  223.   ndbout_c("%s", reply->message); 
  224.   return rc;
  225. }
  226. static 
  227. int testSetTrace(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  228.   int rc = 0;
  229.   int nodeId = 0;
  230.   struct ndb_mgm_cluster_state* cluster =  ndb_mgm_get_status(h);
  231.   if (cluster != NULL) {
  232.     if (cluster->no_of_nodes != 0) {
  233.       nodeId = cluster->node_states[0].node_id;
  234.     }
  235.     free(cluster);
  236.   } else {
  237.     ndbout_c("Unable to get node status.");
  238.     return -1;
  239.   }
  240.   
  241.   rc = ndb_mgm_set_trace(h, nodeId, 2, reply);
  242.   if (rc != 0) {
  243.     ndbout_c("rc = %d", reply->return_code);
  244.   } 
  245.   ndbout_c("%s", reply->message); 
  246.   return rc;
  247. }
  248. static 
  249. int testInsertError(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  250.   int rc = 0;
  251.   int nodeId = 0;
  252.   struct ndb_mgm_cluster_state* cluster =  ndb_mgm_get_status(h);
  253.   if (cluster != NULL) {
  254.     if (cluster->no_of_nodes != 0) {
  255.       nodeId = cluster->node_states[0].node_id;
  256.     }
  257.     free(cluster);
  258.   } else {
  259.     ndbout_c("Unable to get node status.");
  260.     return -1;
  261.   }
  262.   
  263.   rc = ndb_mgm_insert_error(h, nodeId, 9999, reply);
  264.   if (rc != 0) {
  265.     ndbout_c("rc = %d", reply->return_code);
  266.   } 
  267.   ndbout_c("%s", reply->message); 
  268.   return rc;
  269. }
  270. static 
  271. int testDumpState(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  272.   
  273.   int rc = 0;
  274.   int nodeId = 0;
  275.   int dump[3];
  276.   struct ndb_mgm_cluster_state* cluster =  ndb_mgm_get_status(h);
  277.   if (cluster != NULL) {
  278.     if (cluster->no_of_nodes != 0) {
  279.       nodeId = cluster->node_states[0].node_id;
  280.     }
  281.     free(cluster);
  282.   } else {
  283.     ndbout_c("Unable to get node status.");
  284.     return -1;
  285.   }
  286.   
  287.   dump[0] = 1;
  288.   dump[1] = 2;
  289.   dump[2] = 3;
  290.   rc = ndb_mgm_dump_state(h, nodeId, dump, 3, reply);
  291.   if (rc != 0) {
  292.     ndbout_c("rc = %d", reply->return_code);
  293.   } 
  294.   ndbout_c("%s", reply->message); 
  295.   return rc;
  296. }
  297. #endif
  298. static 
  299. int testFilterClusterLog(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  300.   int rc = 0;
  301.   
  302.   rc = ndb_mgm_filter_clusterlog(h, NDB_MGM_CLUSTERLOG_INFO, reply);
  303.   if (rc == -1) {
  304.     ndbout_c("rc = %d", reply->return_code);
  305.     ndbout_c("%s", reply->message);   
  306.     return -1;
  307.   } 
  308.   ndbout_c("%s", reply->message); 
  309.   rc = ndb_mgm_filter_clusterlog(h, NDB_MGM_CLUSTERLOG_DEBUG, reply);
  310.   if (rc == -1) {
  311.     ndbout_c("rc = %d", reply->return_code);
  312.     ndbout_c("%s", reply->message);   
  313.     return -1;
  314.   } 
  315.   ndbout_c("%s", reply->message); 
  316.   return rc;
  317. }
  318. static 
  319. int testSetLogLevelClusterLog(NdbMgmHandle h, 
  320.       struct ndb_mgm_reply* reply) {
  321.   int rc = 0;
  322.   int nodeId = 0;
  323.   struct ndb_mgm_cluster_state* cluster =  ndb_mgm_get_status(h);
  324.   if (cluster != NULL) {
  325.     if (cluster->no_of_nodes != 0) {
  326.       nodeId = cluster->node_states[0].node_id;
  327.     }
  328.     free(cluster);
  329.   } else {
  330.     ndbout_c("Unable to get node status.");
  331.     return -1;
  332.   }
  333.   rc = ndb_mgm_set_loglevel_clusterlog(h, nodeId,
  334.        NDB_MGM_EVENT_CATEGORY_CHECKPOINT,
  335.        5,
  336.        reply);
  337.   if (rc != 0) {
  338.     ndbout_c("rc = %d", reply->return_code);
  339.   } 
  340.   ndbout_c("%s", reply->message); 
  341.   return rc;
  342. }
  343. static 
  344. int testSetLogLevelNode(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  345.   int rc = 0;
  346.   int nodeId = 0;
  347.   struct ndb_mgm_cluster_state* cluster =  ndb_mgm_get_status(h);
  348.   if (cluster != NULL) {
  349.     if (cluster->no_of_nodes != 0) {
  350.       nodeId = cluster->node_states[0].node_id;
  351.     }
  352.     free(cluster);
  353.   } else {
  354.     ndbout_c("Unable to get node status.");
  355.     return -1;
  356.   }
  357.   rc = ndb_mgm_set_loglevel_node(h, nodeId,
  358.  NDB_MGM_EVENT_CATEGORY_STATISTIC,
  359.  15,
  360.  reply);
  361.   if (rc != 0) {
  362.     ndbout_c("rc = %d", reply->return_code);
  363.   } 
  364.   ndbout_c("%s", reply->message); 
  365.   return rc;
  366. }
  367. static int 
  368. testRestartNode(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  369.   int restarts = 0;
  370.   restarts = ndb_mgm_restart(h, 0, 0); /* Restart all */
  371.   if (restarts == 0) {
  372.     ndbout_c("No nodes restarted...");
  373.     return -1;
  374.   } else {
  375.     ndbout_c("%d nodes restarted...", restarts);
  376.   }
  377.   
  378.   return 0;
  379. }
  380. static 
  381. int testGetStatPort(NdbMgmHandle h, struct ndb_mgm_reply* reply) {
  382.   int rc = 0;
  383.   rc = ndb_mgm_get_stat_port(h, reply);
  384.   if (rc == 0) {
  385.     ndbout_c("stat port %s", reply->message);
  386.   } else {
  387.     ndbout_c("failed");
  388.   }
  389.   return rc;
  390. }