in ctdb_getrecmaster_recv return 0 (success) when the fucntion completed correctly...
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Fri, 14 May 2010 03:43:00 +0000 (13:43 +1000)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Fri, 14 May 2010 03:43:00 +0000 (13:43 +1000)
fix some additional bugs and improve error handling in the callbacks

common/cmdline.c
libctdb/libctdb.c

index fb725f48719bbbb56f2fcf65cfbad3994eb4d157..5446a4a498ce7b0338dcabf9be7ddbdcf50b54f7 100644 (file)
@@ -152,7 +152,7 @@ struct ctdb_context *ctdb_cmdline_client(struct event_context *ev)
        }
 
        /* get our pnn */
-       ctdb->pnn = ctdb_ctrl_getpnn(ctdb, timeval_current_ofs(3, 0), CTDB_CURRENT_NODE);
+       ctdb->pnn = ctdb_ctrl_getpnn(ctdb, timeval_current_ofs(30, 0), CTDB_CURRENT_NODE);
        if (ctdb->pnn == (uint32_t)-1) {
                DEBUG(DEBUG_CRIT,(__location__ " Failed to get ctdb pnn\n"));
                talloc_free(ctdb);
index 4bf4095f44d30f5dd4eababc2d2363aaf6b73aaf..02c596277cdb12a1f947f32c2438f0b7ece1069c 100644 (file)
@@ -158,6 +158,12 @@ ctdb_getpnn_recv_cb(struct ctdb_client_control_state *state)
        struct ctdb_control_cb_data *cb_data = state->async.private_data;
        ctdb_getpnn_cb callback = (ctdb_getpnn_cb)cb_data->callback;
 
+       if (state->state != CTDB_CONTROL_DONE) {
+               DEBUG(DEBUG_ERR, (__location__ " ctdb_getpnn_recv_cb failed with state:%d\n", state->state));
+               callback(-1, 0, cb_data->private_data);
+               return;
+       }
+
        callback(0, state->status, cb_data->private_data);
 }
 
@@ -207,7 +213,7 @@ int ctdb_getpnn_recv(struct ctdb_context *ctdb, ctdb_handle *handle, uint32_t *p
                *pnn = (uint32_t)res;
        }
 
-       return state->status;
+       return 0;
 }
 
 int ctdb_getpnn(struct ctdb_context *ctdb, uint32_t destnode, uint32_t *pnn)
@@ -234,6 +240,12 @@ ctdb_getrecmaster_recv_cb(struct ctdb_client_control_state *state)
        struct ctdb_control_cb_data *cb_data = state->async.private_data;
        ctdb_getrecmaster_cb callback = (ctdb_getrecmaster_cb)cb_data->callback;
 
+       if (state->state != CTDB_CONTROL_DONE) {
+               DEBUG(DEBUG_ERR, (__location__ " ctdb_getrecmaster_recv_cb failed with state:%d\n", state->state));
+               callback(-1, 0, cb_data->private_data);
+               return;
+       }
+
        callback(0, state->status, cb_data->private_data);
 }
 
@@ -283,7 +295,7 @@ int ctdb_getrecmaster_recv(struct ctdb_context *ctdb, ctdb_handle *handle, uint3
                *recmaster = (uint32_t)res;
        }
 
-       return state->status;
+       return 0;
 }
 
 int ctdb_getrecmaster(struct ctdb_context *ctdb, uint32_t destnode, uint32_t *recmaster)
@@ -315,6 +327,12 @@ ctdb_set_message_handler_recv_cb(struct ctdb_client_control_state *state)
        struct ctdb_control_cb_data *cb_data = state->async.private_data;
        ctdb_set_message_handler_cb callback = (ctdb_set_message_handler_cb)cb_data->callback;
 
+       if (state->state != CTDB_CONTROL_DONE) {
+               DEBUG(DEBUG_ERR, (__location__ " ctdb_getrecmaster_recv_cb failed with state:%d\n", state->state));
+               callback(-1, cb_data->private_data);
+               return;
+       }
+
        callback(state->status, cb_data->private_data);
 }
 
@@ -394,6 +412,12 @@ ctdb_remove_message_handler_recv_cb(struct ctdb_client_control_state *state)
        struct ctdb_control_cb_data *cb_data = state->async.private_data;
        ctdb_remove_message_handler_cb callback = (ctdb_remove_message_handler_cb)cb_data->callback;
 
+       if (state->state != CTDB_CONTROL_DONE) {
+               DEBUG(DEBUG_ERR, (__location__ " ctdb_getrecmaster_recv_cb failed with state:%d\n", state->state));
+               callback(-1, cb_data->private_data);
+               return;
+       }
+
        callback(state->status, cb_data->private_data);
 }
 
@@ -484,7 +508,7 @@ ctdb_createdb_recv_cb(struct ctdb_client_control_state *state)
                if (state->outdata.dsize != sizeof(uint32_t)) {
                        DEBUG(DEBUG_ERR, (" Wrond size of data returned for CREATEDB control. Got %zd bytes but expected %zd\n", state->outdata.dsize, sizeof(uint32_t)));
                        
-                       callback(CTDB_CONTROL_ERROR, 0, cb_data->private_data);
+                       callback(-1, 0, cb_data->private_data);
                        return;
                }