From: Michael Adam Date: Wed, 13 Jan 2010 22:53:54 +0000 (+0100) Subject: s3:dbwrap_ctdb: exit early when nothing has been written in transaction_commit. X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=c311697aded87ce624d40cbf14e05d6e6377c257;p=abartlet%2Fsamba.git%2F.git s3:dbwrap_ctdb: exit early when nothing has been written in transaction_commit. This skips update of the __db_sequence_number__ record when nothing else has been written. There are transactions that are just openend and then nothing is written until transaction_commit is called. This is for instance the case with registry initialization routines: They start a transaction and only write somthing when the registry has not been initialized yet. So this change will skip many db_seqnum bumps and TRANS3_COMMIT roundtrips. Michael --- diff --git a/source3/lib/dbwrap_ctdb.c b/source3/lib/dbwrap_ctdb.c index c0b5fd51ed5..79c4c0ce420 100644 --- a/source3/lib/dbwrap_ctdb.c +++ b/source3/lib/dbwrap_ctdb.c @@ -763,6 +763,15 @@ static int db_ctdb_transaction_commit(struct db_context *db) return 0; } + if (h->m_write == NULL) { + /* + * No changes were made, so don't change the seqnum, + * don't push to other node, just exit with success. + */ + ret = 0; + goto done; + } + DEBUG(5,(__location__ " Commit transaction on db 0x%08x\n", ctx->db_id)); /* @@ -790,11 +799,6 @@ static int db_ctdb_transaction_commit(struct db_context *db) } again: - if (h->m_write == NULL) { - /* no changes were made, potentially after a retry */ - goto done; - } - /* tell ctdbd to commit to the other nodes */ rets = ctdbd_control_local(messaging_ctdbd_connection(), CTDB_CONTROL_TRANS3_COMMIT,