The branch, master has been updated via 7ed5fbe7fa3bc3cb729d9b516d2a73d52e28d22d (commit) via 6915661a460cd589b441ac7cd8695f35c4e83113 (commit) from 58e6dc722ad1e2415b71baf1d471885169dde14d (commit)
http://gitweb.samba.org/?p=tridge/ctdb.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 7ed5fbe7fa3bc3cb729d9b516d2a73d52e28d22d Author: Andrew Tridgell <[EMAIL PROTECTED]> Date: Fri Aug 8 10:00:33 2008 +1000 up release number commit 6915661a460cd589b441ac7cd8695f35c4e83113 Author: Andrew Tridgell <[EMAIL PROTECTED]> Date: Fri Aug 8 09:58:49 2008 +1000 return a more detailed error code from a trans2 commit error ----------------------------------------------------------------------- Summary of changes: include/ctdb_private.h | 10 ++++++++++ packaging/RPM/ctdb.spec | 2 +- server/ctdb_persistent.c | 23 +++++++++++++++++++++-- 3 files changed, 32 insertions(+), 3 deletions(-) Changeset truncated at 500 lines: diff --git a/include/ctdb_private.h b/include/ctdb_private.h index ff4d271..6cc1dc9 100644 --- a/include/ctdb_private.h +++ b/include/ctdb_private.h @@ -789,6 +789,16 @@ struct ctdb_req_keepalive { struct ctdb_req_header hdr; }; + +/* types of failures possible from TRANS2_COMMIT */ +enum ctdb_trans2_commit_error { + CTDB_TRANS2_COMMIT_SUCCESS=0, /* all nodes committed successfully */ + CTDB_TRANS2_COMMIT_TIMEOUT=1, /* at least one node timed out */ + CTDB_TRANS2_COMMIT_ALLFAIL=2, /* all nodes failed the commit */ + CTDB_TRANS2_COMMIT_SOMEFAIL=3 /* some nodes failed the commit, some allowed it */ +}; + + /* internal prototypes */ void ctdb_set_error(struct ctdb_context *ctdb, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3); void ctdb_fatal(struct ctdb_context *ctdb, const char *msg); diff --git a/packaging/RPM/ctdb.spec b/packaging/RPM/ctdb.spec index fcaf2ee..24e78fe 100644 --- a/packaging/RPM/ctdb.spec +++ b/packaging/RPM/ctdb.spec @@ -5,7 +5,7 @@ Vendor: Samba Team Packager: Samba Team <[EMAIL PROTECTED]> Name: ctdb Version: 1.0 -Release: 53 +Release: 53.transactions2 Epoch: 0 License: GNU GPL version 3 Group: System Environment/Daemons diff --git a/server/ctdb_persistent.c b/server/ctdb_persistent.c index 5b88b4b..faa6e83 100644 --- a/server/ctdb_persistent.c +++ b/server/ctdb_persistent.c @@ -32,9 +32,17 @@ struct ctdb_persistent_state { const char *errormsg; uint32_t num_pending; int32_t status; + uint32_t num_failed, num_sent; }; /* + 1) all nodes fail, and all nodes reply + 2) some nodes fail, all nodes reply + 3) some nodes timeout + 4) all nodes succeed + */ + +/* called when a node has acknowledged a ctdb_control_update_record call */ static void ctdb_persistent_callback(struct ctdb_context *ctdb, @@ -50,10 +58,19 @@ static void ctdb_persistent_callback(struct ctdb_context *ctdb, status, errormsg)); state->status = status; state->errormsg = errormsg; + state->num_failed++; } state->num_pending--; if (state->num_pending == 0) { - ctdb_request_control_reply(state->ctdb, state->c, NULL, state->status, state->errormsg); + enum ctdb_trans2_commit_error etype; + if (state->num_failed == state->num_sent) { + etype = CTDB_TRANS2_COMMIT_ALLFAIL; + } else if (state->num_failed != 0) { + etype = CTDB_TRANS2_COMMIT_SOMEFAIL; + } else { + etype = CTDB_TRANS2_COMMIT_SUCCESS; + } + ctdb_request_control_reply(state->ctdb, state->c, NULL, etype, state->errormsg); talloc_free(state); } } @@ -66,7 +83,8 @@ static void ctdb_persistent_store_timeout(struct event_context *ev, struct timed { struct ctdb_persistent_state *state = talloc_get_type(private_data, struct ctdb_persistent_state); - ctdb_request_control_reply(state->ctdb, state->c, NULL, -1, "timeout in ctdb_persistent_state"); + ctdb_request_control_reply(state->ctdb, state->c, NULL, CTDB_TRANS2_COMMIT_TIMEOUT, + "timeout in ctdb_persistent_state"); talloc_free(state); } @@ -141,6 +159,7 @@ int32_t ctdb_control_trans2_commit(struct ctdb_context *ctdb, } state->num_pending++; + state->num_sent++; } if (state->num_pending == 0) { -- CTDB repository