diff options
author | Michael Adam <obnox@samba.org> | 2010-01-13 23:53:54 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2010-02-12 23:12:12 +0100 |
commit | c311697aded87ce624d40cbf14e05d6e6377c257 (patch) | |
tree | c664548738f0a7f1eb7a7e5e6b288ff3410000fa | |
parent | 1d594bd734a2f7146ed52872456a16c5e41816f1 (diff) | |
download | samba-c311697aded87ce624d40cbf14e05d6e6377c257.tar.gz samba-c311697aded87ce624d40cbf14e05d6e6377c257.tar.bz2 samba-c311697aded87ce624d40cbf14e05d6e6377c257.zip |
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
-rw-r--r-- | source3/lib/dbwrap_ctdb.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/source3/lib/dbwrap_ctdb.c b/source3/lib/dbwrap_ctdb.c index c0b5fd51ed..79c4c0ce42 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, |