From: Ronnie Sahlberg Date: Fri, 14 May 2010 03:43:00 +0000 (+1000) Subject: in ctdb_getrecmaster_recv return 0 (success) when the fucntion completed correctly... X-Git-Url: http://git.samba.org/?p=sahlberg%2Fctdb.git;a=commitdiff_plain;h=2a903bc8513842da1b569c27d212bb7a3b1c1725 in ctdb_getrecmaster_recv return 0 (success) when the fucntion completed correctly and not state->status which is the PNN number in this case. fix some additional bugs and improve error handling in the callbacks --- diff --git a/common/cmdline.c b/common/cmdline.c index fb725f48..5446a4a4 100644 --- a/common/cmdline.c +++ b/common/cmdline.c @@ -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); diff --git a/libctdb/libctdb.c b/libctdb/libctdb.c index 4bf4095f..02c59627 100644 --- a/libctdb/libctdb.c +++ b/libctdb/libctdb.c @@ -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; }