summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2010-01-13 23:53:54 +0100
committerMichael Adam <obnox@samba.org>2010-02-12 23:12:12 +0100
commitc311697aded87ce624d40cbf14e05d6e6377c257 (patch)
treec664548738f0a7f1eb7a7e5e6b288ff3410000fa
parent1d594bd734a2f7146ed52872456a16c5e41816f1 (diff)
downloadsamba-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.c14
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,