1 /* Copyright (c) 2003, 2006, 2007 MySQL AB
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; version 2 of the License.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 GNU General Public License for more details.
12 You should have received a copy of the GNU General Public License
13 along with this program; if not, write to the Free Software
14 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
17 #include <ndbapi/NdbApi.hpp>
22 * export LD_LIBRARY_PATH=../../../libmysql_r/.libs:../../../ndb/src/.libs
27 fprintf(stderr, "code: %d msg: %s\n", \
28 ndb_mgm_get_latest_error(h), \
29 ndb_mgm_get_latest_error_msg(h)); \
33 #define LOGEVENTERROR(h) \
35 fprintf(stderr, "code: %d msg: %s\n", \
36 ndb_logevent_get_latest_error(h), \
37 ndb_logevent_get_latest_error_msg(h)); \
41 int main(int argc
, char** argv
)
44 NdbLogEventHandle le1
,le2
;
45 int filter
[] = { 15, NDB_MGM_EVENT_CATEGORY_BACKUP
,
46 15, NDB_MGM_EVENT_CATEGORY_CONNECTION
,
47 15, NDB_MGM_EVENT_CATEGORY_NODE_RESTART
,
48 15, NDB_MGM_EVENT_CATEGORY_STARTUP
,
49 15, NDB_MGM_EVENT_CATEGORY_ERROR
,
51 struct ndb_logevent event1
, event2
;
55 printf("Arguments are <connect_string cluster 1> <connect_string cluster 2> [<iterations>].\n");
58 const char *connectstring1
= argv
[1];
59 const char *connectstring2
= argv
[2];
62 iterations
= atoi(argv
[3]);
65 h1
= ndb_mgm_create_handle();
66 h2
= ndb_mgm_create_handle();
67 if ( h1
== 0 || h2
== 0 )
69 printf("Unable to create handle\n");
72 if (ndb_mgm_set_connectstring(h1
, connectstring1
) == -1 ||
73 ndb_mgm_set_connectstring(h2
, connectstring1
))
75 printf("Unable to set connectstring\n");
78 if (ndb_mgm_connect(h1
,0,0,0)) MGMERROR(h1
);
79 if (ndb_mgm_connect(h2
,0,0,0)) MGMERROR(h2
);
81 if ((le1
= ndb_mgm_create_logevent_handle(h1
, filter
)) == 0) MGMERROR(h1
);
82 if ((le2
= ndb_mgm_create_logevent_handle(h1
, filter
)) == 0) MGMERROR(h2
);
84 while (iterations
-- != 0)
87 int r1
= ndb_logevent_get_next(le1
,&event1
,timeout
);
89 printf("No event within %d milliseconds\n", timeout
);
94 switch (event1
.type
) {
95 case NDB_LE_BackupStarted
:
96 printf("Node %d: BackupStarted\n", event1
.source_nodeid
);
97 printf(" Starting node ID: %d\n", event1
.BackupStarted
.starting_node
);
98 printf(" Backup ID: %d\n", event1
.BackupStarted
.backup_id
);
100 case NDB_LE_BackupCompleted
:
101 printf("Node %d: BackupCompleted\n", event1
.source_nodeid
);
102 printf(" Backup ID: %d\n", event1
.BackupStarted
.backup_id
);
104 case NDB_LE_BackupAborted
:
105 printf("Node %d: BackupAborted\n", event1
.source_nodeid
);
107 case NDB_LE_BackupFailedToStart
:
108 printf("Node %d: BackupFailedToStart\n", event1
.source_nodeid
);
111 case NDB_LE_NodeFailCompleted
:
112 printf("Node %d: NodeFailCompleted\n", event1
.source_nodeid
);
114 case NDB_LE_ArbitResult
:
115 printf("Node %d: ArbitResult\n", event1
.source_nodeid
);
116 printf(" code %d, arbit_node %d\n",
117 event1
.ArbitResult
.code
& 0xffff,
118 event1
.ArbitResult
.arbit_node
);
120 case NDB_LE_DeadDueToHeartbeat
:
121 printf("Node %d: DeadDueToHeartbeat\n", event1
.source_nodeid
);
122 printf(" node %d\n", event1
.DeadDueToHeartbeat
.node
);
125 case NDB_LE_Connected
:
126 printf("Node %d: Connected\n", event1
.source_nodeid
);
127 printf(" node %d\n", event1
.Connected
.node
);
129 case NDB_LE_Disconnected
:
130 printf("Node %d: Disconnected\n", event1
.source_nodeid
);
131 printf(" node %d\n", event1
.Disconnected
.node
);
133 case NDB_LE_NDBStartCompleted
:
134 printf("Node %d: StartCompleted\n", event1
.source_nodeid
);
135 printf(" version %d.%d.%d\n",
136 event1
.NDBStartCompleted
.version
>> 16 & 0xff,
137 event1
.NDBStartCompleted
.version
>> 8 & 0xff,
138 event1
.NDBStartCompleted
.version
>> 0 & 0xff);
140 case NDB_LE_ArbitState
:
141 printf("Node %d: ArbitState\n", event1
.source_nodeid
);
142 printf(" code %d, arbit_node %d\n",
143 event1
.ArbitState
.code
& 0xffff,
144 event1
.ArbitResult
.arbit_node
);
152 int r2
= ndb_logevent_get_next(le1
,&event2
,timeout
);
154 printf("No event within %d milliseconds\n", timeout
);
159 switch (event2
.type
) {
160 case NDB_LE_BackupStarted
:
161 printf("Node %d: BackupStarted\n", event2
.source_nodeid
);
162 printf(" Starting node ID: %d\n", event2
.BackupStarted
.starting_node
);
163 printf(" Backup ID: %d\n", event2
.BackupStarted
.backup_id
);
165 case NDB_LE_BackupCompleted
:
166 printf("Node %d: BackupCompleted\n", event2
.source_nodeid
);
167 printf(" Backup ID: %d\n", event2
.BackupStarted
.backup_id
);
169 case NDB_LE_BackupAborted
:
170 printf("Node %d: BackupAborted\n", event2
.source_nodeid
);
172 case NDB_LE_BackupFailedToStart
:
173 printf("Node %d: BackupFailedToStart\n", event2
.source_nodeid
);
176 case NDB_LE_NodeFailCompleted
:
177 printf("Node %d: NodeFailCompleted\n", event2
.source_nodeid
);
179 case NDB_LE_ArbitResult
:
180 printf("Node %d: ArbitResult\n", event2
.source_nodeid
);
181 printf(" code %d, arbit_node %d\n",
182 event2
.ArbitResult
.code
& 0xffff,
183 event2
.ArbitResult
.arbit_node
);
185 case NDB_LE_DeadDueToHeartbeat
:
186 printf("Node %d: DeadDueToHeartbeat\n", event2
.source_nodeid
);
187 printf(" node %d\n", event2
.DeadDueToHeartbeat
.node
);
190 case NDB_LE_Connected
:
191 printf("Node %d: Connected\n", event2
.source_nodeid
);
192 printf(" node %d\n", event2
.Connected
.node
);
194 case NDB_LE_Disconnected
:
195 printf("Node %d: Disconnected\n", event2
.source_nodeid
);
196 printf(" node %d\n", event2
.Disconnected
.node
);
198 case NDB_LE_NDBStartCompleted
:
199 printf("Node %d: StartCompleted\n", event2
.source_nodeid
);
200 printf(" version %d.%d.%d\n",
201 event2
.NDBStartCompleted
.version
>> 16 & 0xff,
202 event2
.NDBStartCompleted
.version
>> 8 & 0xff,
203 event2
.NDBStartCompleted
.version
>> 0 & 0xff);
205 case NDB_LE_ArbitState
:
206 printf("Node %d: ArbitState\n", event2
.source_nodeid
);
207 printf(" code %d, arbit_node %d\n",
208 event2
.ArbitState
.code
& 0xffff,
209 event2
.ArbitResult
.arbit_node
);
218 ndb_mgm_destroy_logevent_handle(&le1
);
219 ndb_mgm_destroy_logevent_handle(&le2
);
220 ndb_mgm_destroy_handle(&h1
);
221 ndb_mgm_destroy_handle(&h2
);