s3:dbwrap_ctdb: split combined check in two and add descriptive debug
authorMichael Adam <obnox@samba.org>
Sat, 31 Oct 2009 12:13:04 +0000 (13:13 +0100)
committerMichael Adam <obnox@samba.org>
Tue, 3 Nov 2009 00:02:38 +0000 (01:02 +0100)
in db_ctdb_transaction_fetch_start() for error conditions when re-fetching
the transaction_lock record inside the transaction

Michael

source3/lib/dbwrap_ctdb.c

index fef984c8c31c49d08d2741f3b1b1bc4825f97f38..1f6af437cfa145353ceacc80bea7416436b20496 100644 (file)
@@ -399,7 +399,20 @@ again:
        }
 
        status = db_ctdb_ltdb_fetch(ctx, key, &header, tmp_ctx, &data);
-       if (!NT_STATUS_IS_OK(status) || header.dmaster != get_my_vnn()) {
+       if (!NT_STATUS_IS_OK(status)) {
+               DEBUG(0, (__location__ " failed to refetch transaction lock "
+                         "record inside transaction: %s - retrying\n",
+                         nt_errstr(status)));
+               tdb_transaction_cancel(ctx->wtdb->tdb);
+               talloc_free(tmp_ctx);
+               goto again;
+       }
+
+       if (header.dmaster != get_my_vnn()) {
+               DEBUG(3, (__location__ " refetch transaction lock record : "
+                         "we are not dmaster any more "
+                         "(dmaster[%u] != my_vnn[%u]) - retrying\n",
+                         header.dmaster, get_my_vnn()));
                tdb_transaction_cancel(ctx->wtdb->tdb);
                talloc_free(tmp_ctx);
                goto again;