MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
main.cpp
1 /*
2  Copyright (C) 2006, 2007 MySQL AB
3  All rights reserved. Use is subject to license terms.
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; version 2 of the License.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 
19 #include <mysql.h>
20 #include <ndbapi/NdbApi.hpp>
21 #include <mgmapi.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 
25 /*
26  * export LD_LIBRARY_PATH=../../../libmysql_r/.libs:../../../ndb/src/.libs
27  */
28 
29 #define MGMERROR(h) \
30 { \
31  fprintf(stderr, "code: %d msg: %s\n", \
32  ndb_mgm_get_latest_error(h), \
33  ndb_mgm_get_latest_error_msg(h)); \
34  exit(-1); \
35 }
36 
37 #define LOGEVENTERROR(h) \
38 { \
39  fprintf(stderr, "code: %d msg: %s\n", \
40  ndb_logevent_get_latest_error(h), \
41  ndb_logevent_get_latest_error_msg(h)); \
42  exit(-1); \
43 }
44 
45 int main(int argc, char** argv)
46 {
47  NdbMgmHandle h1,h2;
48  NdbLogEventHandle le1,le2;
49  int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_BACKUP,
54  0 };
55  struct ndb_logevent event1, event2;
56 
57  if (argc < 3)
58  {
59  printf("Arguments are <connect_string cluster 1> <connect_string cluster 2> [<iterations>].\n");
60  exit(-1);
61  }
62  const char *connectstring1 = argv[1];
63  const char *connectstring2 = argv[2];
64  int iterations = -1;
65  if (argc > 3)
66  iterations = atoi(argv[3]);
67  ndb_init();
68 
71  if ( h1 == 0 || h2 == 0 )
72  {
73  printf("Unable to create handle\n");
74  exit(-1);
75  }
76  if (ndb_mgm_set_connectstring(h1, connectstring1) == -1 ||
77  ndb_mgm_set_connectstring(h2, connectstring1))
78  {
79  printf("Unable to set connectstring\n");
80  exit(-1);
81  }
82  if (ndb_mgm_connect(h1,0,0,0)) MGMERROR(h1);
83  if (ndb_mgm_connect(h2,0,0,0)) MGMERROR(h2);
84 
85  if ((le1= ndb_mgm_create_logevent_handle(h1, filter)) == 0) MGMERROR(h1);
86  if ((le2= ndb_mgm_create_logevent_handle(h1, filter)) == 0) MGMERROR(h2);
87 
88  while (iterations-- != 0)
89  {
90  int timeout= 1000;
91  int r1= ndb_logevent_get_next(le1,&event1,timeout);
92  if (r1 == 0)
93  printf("No event within %d milliseconds\n", timeout);
94  else if (r1 < 0)
95  LOGEVENTERROR(le1)
96  else
97  {
98  switch (event1.type) {
100  printf("Node %d: BackupStarted\n", event1.source_nodeid);
101  printf(" Starting node ID: %d\n", event1.BackupStarted.starting_node);
102  printf(" Backup ID: %d\n", event1.BackupStarted.backup_id);
103  break;
105  printf("Node %d: BackupCompleted\n", event1.source_nodeid);
106  printf(" Backup ID: %d\n", event1.BackupStarted.backup_id);
107  break;
109  printf("Node %d: BackupAborted\n", event1.source_nodeid);
110  break;
112  printf("Node %d: BackupFailedToStart\n", event1.source_nodeid);
113  break;
114 
116  printf("Node %d: NodeFailCompleted\n", event1.source_nodeid);
117  break;
118  case NDB_LE_ArbitResult:
119  printf("Node %d: ArbitResult\n", event1.source_nodeid);
120  printf(" code %d, arbit_node %d\n",
121  event1.ArbitResult.code & 0xffff,
122  event1.ArbitResult.arbit_node);
123  break;
125  printf("Node %d: DeadDueToHeartbeat\n", event1.source_nodeid);
126  printf(" node %d\n", event1.DeadDueToHeartbeat.node);
127  break;
128 
129  case NDB_LE_Connected:
130  printf("Node %d: Connected\n", event1.source_nodeid);
131  printf(" node %d\n", event1.Connected.node);
132  break;
133  case NDB_LE_Disconnected:
134  printf("Node %d: Disconnected\n", event1.source_nodeid);
135  printf(" node %d\n", event1.Disconnected.node);
136  break;
138  printf("Node %d: StartCompleted\n", event1.source_nodeid);
139  printf(" version %d.%d.%d\n",
140  event1.NDBStartCompleted.version >> 16 & 0xff,
141  event1.NDBStartCompleted.version >> 8 & 0xff,
142  event1.NDBStartCompleted.version >> 0 & 0xff);
143  break;
144  case NDB_LE_ArbitState:
145  printf("Node %d: ArbitState\n", event1.source_nodeid);
146  printf(" code %d, arbit_node %d\n",
147  event1.ArbitState.code & 0xffff,
148  event1.ArbitResult.arbit_node);
149  break;
150 
151  default:
152  break;
153  }
154  }
155 
156  int r2= ndb_logevent_get_next(le1,&event2,timeout);
157  if (r2 == 0)
158  printf("No event within %d milliseconds\n", timeout);
159  else if (r2 < 0)
160  LOGEVENTERROR(le2)
161  else
162  {
163  switch (event2.type) {
165  printf("Node %d: BackupStarted\n", event2.source_nodeid);
166  printf(" Starting node ID: %d\n", event2.BackupStarted.starting_node);
167  printf(" Backup ID: %d\n", event2.BackupStarted.backup_id);
168  break;
170  printf("Node %d: BackupCompleted\n", event2.source_nodeid);
171  printf(" Backup ID: %d\n", event2.BackupStarted.backup_id);
172  break;
174  printf("Node %d: BackupAborted\n", event2.source_nodeid);
175  break;
177  printf("Node %d: BackupFailedToStart\n", event2.source_nodeid);
178  break;
179 
181  printf("Node %d: NodeFailCompleted\n", event2.source_nodeid);
182  break;
183  case NDB_LE_ArbitResult:
184  printf("Node %d: ArbitResult\n", event2.source_nodeid);
185  printf(" code %d, arbit_node %d\n",
186  event2.ArbitResult.code & 0xffff,
187  event2.ArbitResult.arbit_node);
188  break;
190  printf("Node %d: DeadDueToHeartbeat\n", event2.source_nodeid);
191  printf(" node %d\n", event2.DeadDueToHeartbeat.node);
192  break;
193 
194  case NDB_LE_Connected:
195  printf("Node %d: Connected\n", event2.source_nodeid);
196  printf(" node %d\n", event2.Connected.node);
197  break;
198  case NDB_LE_Disconnected:
199  printf("Node %d: Disconnected\n", event2.source_nodeid);
200  printf(" node %d\n", event2.Disconnected.node);
201  break;
203  printf("Node %d: StartCompleted\n", event2.source_nodeid);
204  printf(" version %d.%d.%d\n",
205  event2.NDBStartCompleted.version >> 16 & 0xff,
206  event2.NDBStartCompleted.version >> 8 & 0xff,
207  event2.NDBStartCompleted.version >> 0 & 0xff);
208  break;
209  case NDB_LE_ArbitState:
210  printf("Node %d: ArbitState\n", event2.source_nodeid);
211  printf(" code %d, arbit_node %d\n",
212  event2.ArbitState.code & 0xffff,
213  event2.ArbitResult.arbit_node);
214  break;
215 
216  default:
217  break;
218  }
219  }
220  }
221 
222  ndb_mgm_destroy_logevent_handle(&le1);
223  ndb_mgm_destroy_logevent_handle(&le2);
226  ndb_end(0);
227  return 0;
228 }