diff options
author | Andrew Tridgell <tridge@samba.org> | 2008-08-08 11:42:06 +1000 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2008-08-13 11:54:10 +0200 |
commit | fe3dd9b3e6daf626ea094d1ce5fc96f89c61b7ad (patch) | |
tree | 4faa4a4856cef00f85e2b210e4a5f28b7befd8ad | |
parent | 312a04528c2f3439f0451414fee224dfa4fcb6f4 (diff) | |
download | samba-fe3dd9b3e6daf626ea094d1ce5fc96f89c61b7ad.tar.gz samba-fe3dd9b3e6daf626ea094d1ce5fc96f89c61b7ad.tar.bz2 samba-fe3dd9b3e6daf626ea094d1ce5fc96f89c61b7ad.zip |
fixed lots of places that paniced on a failed transaction_commit,
thinking it was a failure of a transaction cancel
(This used to be commit 22dbe158ed62ae47bbcb41bba3db345294f75437)
-rw-r--r-- | source3/groupdb/mapping_tdb.c | 4 | ||||
-rw-r--r-- | source3/lib/account_pol.c | 3 | ||||
-rw-r--r-- | source3/lib/dbwrap_ctdb.c | 19 | ||||
-rw-r--r-- | source3/lib/sharesec.c | 2 | ||||
-rw-r--r-- | source3/passdb/pdb_tdb.c | 9 |
5 files changed, 21 insertions, 16 deletions
diff --git a/source3/groupdb/mapping_tdb.c b/source3/groupdb/mapping_tdb.c index 59c692297b..7cee53a968 100644 --- a/source3/groupdb/mapping_tdb.c +++ b/source3/groupdb/mapping_tdb.c @@ -521,7 +521,7 @@ static NTSTATUS add_aliasmem(const DOM_SID *alias, const DOM_SID *member) if (db->transaction_commit(db) != 0) { DEBUG(0, ("transaction_commit failed\n")); status = NT_STATUS_INTERNAL_DB_CORRUPTION; - goto cancel; + return status; } return NT_STATUS_OK; @@ -705,7 +705,7 @@ static NTSTATUS del_aliasmem(const DOM_SID *alias, const DOM_SID *member) if (db->transaction_commit(db) != 0) { DEBUG(0, ("transaction_commit failed\n")); status = NT_STATUS_INTERNAL_DB_CORRUPTION; - goto cancel; + return status; } return NT_STATUS_OK; diff --git a/source3/lib/account_pol.c b/source3/lib/account_pol.c index 7fc565121c..1e435ca53e 100644 --- a/source3/lib/account_pol.c +++ b/source3/lib/account_pol.c @@ -283,7 +283,8 @@ bool init_account_policy(void) if (db->transaction_commit(db) != 0) { DEBUG(0, ("transaction_commit failed\n")); - goto cancel; + TALLOC_FREE(db); + return false; } return True; diff --git a/source3/lib/dbwrap_ctdb.c b/source3/lib/dbwrap_ctdb.c index 8efc1ea290..8261e2f733 100644 --- a/source3/lib/dbwrap_ctdb.c +++ b/source3/lib/dbwrap_ctdb.c @@ -669,26 +669,28 @@ again: } } - if (ctdb_replay_transaction(h) != 0) { - DEBUG(0,(__location__ " Failed to replay transaction\n")); + if (++retries == 10) { + DEBUG(0,(__location__ " Giving up transaction on db 0x%08x after %d retries failure_control=%u\n", + h->ctx->db_id, retries, (unsigned)failure_control)); ctdbd_control_local(messaging_ctdbd_connection(), failure_control, h->ctx->db_id, CTDB_CTRL_FLAG_NOREPLY, tdb_null, NULL, NULL, NULL); h->ctx->transaction = NULL; talloc_free(h); ctx->transaction = NULL; - return -1; + return -1; } - if (++retries == 10) { - DEBUG(0,(__location__ " Giving up transaction on db 0x%08x after %d retries\n", - h->ctx->db_id, retries)); + + if (ctdb_replay_transaction(h) != 0) { + DEBUG(0,(__location__ " Failed to replay transaction failure_control=%u\n", + (unsigned)failure_control)); ctdbd_control_local(messaging_ctdbd_connection(), failure_control, h->ctx->db_id, CTDB_CTRL_FLAG_NOREPLY, tdb_null, NULL, NULL, NULL); h->ctx->transaction = NULL; talloc_free(h); ctx->transaction = NULL; - return -1; + return -1; } goto again; } else { @@ -698,7 +700,8 @@ again: /* do the real commit locally */ ret = tdb_transaction_commit(h->ctx->wtdb->tdb); if (ret != 0) { - DEBUG(0,(__location__ " Failed to commit transaction\n")); + DEBUG(0,(__location__ " Failed to commit transaction failure_control=%u\n", + (unsigned)failure_control)); ctdbd_control_local(messaging_ctdbd_connection(), failure_control, h->ctx->db_id, CTDB_CTRL_FLAG_NOREPLY, tdb_null, NULL, NULL, NULL); h->ctx->transaction = NULL; diff --git a/source3/lib/sharesec.c b/source3/lib/sharesec.c index e64611f154..4380000080 100644 --- a/source3/lib/sharesec.c +++ b/source3/lib/sharesec.c @@ -109,7 +109,7 @@ static bool share_info_db_init(void) if (share_db->transaction_commit(share_db) != 0) { DEBUG(0, ("transaction_commit failed\n")); - goto cancel; + return false; } return true; diff --git a/source3/passdb/pdb_tdb.c b/source3/passdb/pdb_tdb.c index 824e61b063..e40f4bbab8 100644 --- a/source3/passdb/pdb_tdb.c +++ b/source3/passdb/pdb_tdb.c @@ -804,7 +804,7 @@ static bool tdbsam_convert(struct db_context *db, int32 from) if (db->transaction_commit(db) != 0) { DEBUG(0, ("Could not commit transaction\n")); - goto cancel; + return false; } return true; @@ -1064,7 +1064,7 @@ static NTSTATUS tdbsam_delete_sam_account(struct pdb_methods *my_methods, if (db_sam->transaction_commit(db_sam) != 0) { DEBUG(0, ("Could not commit transaction\n")); - goto cancel; + return NT_STATUS_INTERNAL_DB_CORRUPTION; } return NT_STATUS_OK; @@ -1191,7 +1191,7 @@ static bool tdb_update_sam(struct pdb_methods *my_methods, struct samu* newpwd, if (db_sam->transaction_commit(db_sam) != 0) { DEBUG(0, ("Could not commit transaction\n")); - goto cancel; + return false; } return true; @@ -1344,7 +1344,8 @@ static NTSTATUS tdbsam_rename_sam_account(struct pdb_methods *my_methods, * account back? */ DEBUG(0, ("transaction_commit failed\n")); - goto cancel; + TALLOC_FREE(new_acct); + return NT_STATUS_INTERNAL_DB_CORRUPTION; } TALLOC_FREE(new_acct ); |