[SCM] CTDB repository - branch master updated - ctdb-1.0.102-17-ga5d90d8
Ronnie Sahlberg
sahlberg at samba.org
Fri Oct 30 05:01:47 MDT 2009
The branch, master has been updated
via a5d90d8ed8b44355c4ffb9c32ded772025fcc174 (commit)
via 825c506da76d7afd0714b75b8c8727874183a618 (commit)
via b95524c08bf12914120cb6c818ecc1c99738fe37 (commit)
via 9e4902c7d3ad1329c296f4196fcb1396f2a7a6a0 (commit)
from c1d8496f9fd5e8046f3d990264258dfb054f3b32 (commit)
http://gitweb.samba.org/?p=sahlberg/ctdb.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit a5d90d8ed8b44355c4ffb9c32ded772025fcc174
Author: Michael Adam <obnox at samba.org>
Date: Thu Oct 29 22:53:44 2009 +0100
client: randomize the transaction_start retry loop:
instead of sleeping 1 second, sleep between 1 and 100 milliseconds
Michael
commit 825c506da76d7afd0714b75b8c8727874183a618
Author: Michael Adam <obnox at samba.org>
Date: Thu Oct 29 22:40:00 2009 +0100
Revert "dont exit on a commit failure"
This reverts commit 4e9a3a5dc232bac12ab387ea0cf4f1b279bed5c1.
Transaction commit should not be allowed to fail.
This is a real error.
Michael
commit b95524c08bf12914120cb6c818ecc1c99738fe37
Author: Michael Adam <obnox at samba.org>
Date: Thu Oct 29 22:20:38 2009 +0100
client: fix a race in the local race condition fix in transaction_start
The gap that remained is between checking whether a transaction commit
is in progress and taking the lock. Now we first take the lock and then
check whether a transaction commit is in progress. If so, we release the
lock, wait for one second and retry.
Michael
commit 9e4902c7d3ad1329c296f4196fcb1396f2a7a6a0
Author: Michael Adam <obnox at samba.org>
Date: Thu Oct 29 22:19:19 2009 +0100
client: add a debug message when a transaction_commit needs to be retried
Michael
-----------------------------------------------------------------------
Summary of changes:
client/ctdb_client.c | 29 ++++++++++++++++++-----------
tests/src/ctdb_transaction.c | 2 +-
2 files changed, 19 insertions(+), 12 deletions(-)
Changeset truncated at 500 lines:
diff --git a/client/ctdb_client.c b/client/ctdb_client.c
index 8faa5dd..3e6b833 100644
--- a/client/ctdb_client.c
+++ b/client/ctdb_client.c
@@ -3213,25 +3213,29 @@ static int ctdb_transaction_fetch_start(struct ctdb_transaction_handle *h)
}
again:
+ tmp_ctx = talloc_new(h);
+
+ rh = ctdb_fetch_lock(ctdb_db, tmp_ctx, key, NULL);
+ if (rh == NULL) {
+ DEBUG(DEBUG_ERR,(__location__ " Failed to fetch_lock database\n"));
+ talloc_free(tmp_ctx);
+ return -1;
+ }
+
status = ctdb_ctrl_transaction_active(ctdb_db->ctdb,
CTDB_CURRENT_NODE,
ctdb_db->db_id);
if (status == 1) {
+ unsigned long int usec = (1000 + random()) % 100000;
DEBUG(DEBUG_NOTICE, (__location__ " transaction is active "
- "on db_id[0x%08x]. waiting for 1 second\n",
- ctdb_db->db_id));
- sleep(1);
+ "on db_id[0x%08x]. waiting for %lu "
+ "microseconds\n",
+ ctdb_db->db_id, usec));
+ talloc_free(tmp_ctx);
+ usleep(usec);
goto again;
}
- tmp_ctx = talloc_new(h);
-
- rh = ctdb_fetch_lock(ctdb_db, tmp_ctx, key, NULL);
- if (rh == NULL) {
- DEBUG(DEBUG_ERR,(__location__ " Failed to fetch_lock database\n"));
- talloc_free(tmp_ctx);
- return -1;
- }
/*
* store the pid in the database:
* it is not enough that the node is dmaster...
@@ -3497,6 +3501,9 @@ again:
&timeout, NULL);
if (ret != 0 || status != 0) {
tdb_transaction_cancel(h->ctdb_db->ltdb->tdb);
+ DEBUG(DEBUG_WARNING, (__location__ " transaction commit%s failed"
+ ", retrying after 1 second...\n",
+ (retries==0)?"":"retry "));
sleep(1);
if (ret != 0) {
diff --git a/tests/src/ctdb_transaction.c b/tests/src/ctdb_transaction.c
index fdd2e89..c747e1a 100644
--- a/tests/src/ctdb_transaction.c
+++ b/tests/src/ctdb_transaction.c
@@ -197,7 +197,7 @@ static void test_store_records(struct ctdb_context *ctdb, struct event_context *
ret = ctdb_transaction_commit(h);
if (ret != 0) {
DEBUG(DEBUG_ERR,("Failed to commit transaction\n"));
- //exit(1);
+ exit(1);
}
if (verbose) printf("transaction committed\n");
} else {
--
CTDB repository
More information about the samba-cvs
mailing list