Each MGM API function needs a management server handle of type
NdbMgmHandle
. This handle is created by calling
the function ndb_mgm_create_handle()
and freed
by calling ndb_mgm_destroy_handle()
.
See Section 3.2.3.1, “ndb_mgm_create_handle()
”, and
Section 3.2.3.4, “ndb_mgm_destroy_handle()
”, for more information
about these two functions.
You should not share an NdbMgmHandle
between
threads. While it is possible to do so (if you implement your
own locks), this is not recommended; each thread should use its
own management server handle.
A function can return any of the following:
An integer value, with a value of -1
indicating an error.
A nonconstant pointer value. A NULL
value
indicates an error; otherwise, the return value must be freed
by the programmer.
A constant pointer value, with a NULL
value
indicating an error. The returned value should not be freed.
Error conditions can be identified by using the appropriate
error-reporting functions
ndb_mgm_get_latest_error()
and
ndb_mgm_error()
.
Here is an example using the MGM API (without error handling for brevity's sake):
NdbMgmHandle handle= ndb_mgm_create_handle(); ndb_mgm_connect(handle,0,0,0); struct ndb_mgm_cluster_state *state= ndb_mgm_get_status(handle); for(int i=0; i < state->no_of_nodes; i++) { struct ndb_mgm_node_state *node_state= &state->node_states[i]; printf("node with ID=%d ", node_state->node_id); if(node_state->version != 0) printf("connected\n"); else printf("not connected\n"); } free((void*)state); ndb_mgm_destroy_handle(&handle);