tdb: allow reads after prepare commit
authorRusty Russell <rusty@rustcorp.com.au>
Fri, 25 Sep 2009 03:16:08 +0000 (12:46 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 25 Sep 2009 03:16:08 +0000 (12:46 +0930)
(Imported from SAMBA commit 46c99ec2a3781d53138245182345c6c2ddd9a258:
From: Andrew Tridgell <tridge@samba.org>
Date: Tue, 15 Sep 2009 14:04:22 -0700

We previously only allowed a commit to happen after a prepare
commit. It is in fact safe to allow reads between a prepare and a
commit, and the s4 replication code can make use of that, so allow it.

ccan/tdb/transaction.c

index 988296372c578bde1f04311e7f25aa66caa1ea4b..4a49cc7b6421848a0eac1efbff2cb9e4913bb367 100644 (file)
@@ -144,14 +144,6 @@ static int transaction_read(struct tdb_context *tdb, tdb_off_t off, void *buf,
 {
        uint32_t blk;
 
-       /* Only a commit is allowed on a prepared transaction */
-       if (tdb->transaction->prepared) {
-               tdb->ecode = TDB_ERR_EINVAL;
-               TDB_LOG((tdb, TDB_DEBUG_FATAL, "transaction_read: transaction already prepared, read not allowed\n"));
-               tdb->transaction->transaction_error = 1;
-               return -1;
-       }
-
        /* break it down into block sized ops */
        while (len + (off % tdb->transaction->block_size) > tdb->transaction->block_size) {
                tdb_len_t len2 = tdb->transaction->block_size - (off % tdb->transaction->block_size);