]> git.ozlabs.org Git - ccan/commitdiff
tdb2: unify tdb1_fetch into tdb_fetch
authorRusty Russell <rusty@rustcorp.com.au>
Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 31 Aug 2011 06:01:06 +0000 (15:31 +0930)
Switch on the TDB_VERSION1 flag.

ccan/tdb2/private.h
ccan/tdb2/tdb.c
ccan/tdb2/tdb1.h
ccan/tdb2/tdb1_tdb.c
ccan/tdb2/test/run-tdb1-3G-file.c
ccan/tdb2/test/run-tdb1-endian.c
ccan/tdb2/test/run-tdb1-incompatible.c
ccan/tdb2/test/run-tdb1-nested-transactions.c
ccan/tdb2/test/run-tdb1-zero-append.c
ccan/tdb2/test/run-tdb1.c
ccan/tdb2/test/tdb1-external-agent.c

index 5b960d5a3efc8dfa1d80726501a47f2db2b343c0..b41c89a731cda4c5bd835ebca6ae5e7e6625d346 100644 (file)
@@ -648,6 +648,8 @@ int tdb1_transaction_cancel(struct tdb_context *tdb);
 
 /* tdb1_tdb.c: */
 int tdb1_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag);
 
 /* tdb1_tdb.c: */
 int tdb1_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag);
+enum TDB_ERROR tdb1_fetch(struct tdb_context *tdb, TDB_DATA key,
+                         TDB_DATA *data);
 
 /* tdb.c: */
 enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb,
 
 /* tdb.c: */
 enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb,
index a7aa4572382b0f8b10ef03c4adc08599fd7e7293..f02844e7c6fff6cdf00a760a1ce62f1cd803a1a4 100644 (file)
@@ -248,6 +248,9 @@ enum TDB_ERROR tdb_fetch(struct tdb_context *tdb, struct tdb_data key,
        struct hash_info h;
        enum TDB_ERROR ecode;
 
        struct hash_info h;
        enum TDB_ERROR ecode;
 
+       if (tdb->flags & TDB_VERSION1)
+               return tdb1_fetch(tdb, key, data);
+
        off = find_and_lock(tdb, key, F_RDLCK, &h, &rec, NULL);
        if (TDB_OFF_IS_ERR(off)) {
                return tdb->last_error = off;
        off = find_and_lock(tdb, key, F_RDLCK, &h, &rec, NULL);
        if (TDB_OFF_IS_ERR(off)) {
                return tdb->last_error = off;
index e448d75d640e4669557114d1ed85b96b7c6cb888..e3204283853c516dfab63a8d9202faee2e90a3f1 100644 (file)
@@ -40,8 +40,6 @@ typedef int (*tdb1_traverse_func)(struct tdb_context *, TDB_DATA, TDB_DATA, void
 
 void tdb1_set_max_dead(struct tdb_context *tdb, int max_dead);
 
 
 void tdb1_set_max_dead(struct tdb_context *tdb, int max_dead);
 
-TDB_DATA tdb1_fetch(struct tdb_context *tdb, TDB_DATA key);
-
 int tdb1_parse_record(struct tdb_context *tdb, TDB_DATA key,
                              int (*parser)(TDB_DATA key, TDB_DATA data,
                                            void *private_data),
 int tdb1_parse_record(struct tdb_context *tdb, TDB_DATA key,
                              int (*parser)(TDB_DATA key, TDB_DATA data,
                                            void *private_data),
index 384654ed941a87910a3b1c00be07a570f4cae018..bba16338e97ec937dd66d1b41e1ac0e02eb96003 100644 (file)
@@ -201,11 +201,12 @@ static TDB_DATA _tdb1_fetch(struct tdb_context *tdb, TDB_DATA key)
        return ret;
 }
 
        return ret;
 }
 
-TDB_DATA tdb1_fetch(struct tdb_context *tdb, TDB_DATA key)
+enum TDB_ERROR tdb1_fetch(struct tdb_context *tdb, TDB_DATA key, TDB_DATA *data)
 {
 {
-       TDB_DATA ret = _tdb1_fetch(tdb, key);
-
-       return ret;
+       *data = _tdb1_fetch(tdb, key);
+       if (data->dptr == NULL)
+               return tdb->last_error;
+       return TDB_SUCCESS;
 }
 
 /*
 }
 
 /*
index 0f299a32fe1427d2ed7b598f1dff4b068d594865..5e0e64e8155331d7c42a67291d74c1cf1909b294 100644 (file)
@@ -70,7 +70,7 @@ int main(int argc, char *argv[])
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
-       plan_tests(24);
+       plan_tests(26);
        tdb = tdb_open("run-36-file.tdb1", TDB_VERSION1,
                       O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
 
        tdb = tdb_open("run-36-file.tdb1", TDB_VERSION1,
                       O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
 
@@ -88,7 +88,7 @@ int main(int argc, char *argv[])
 
        ok1(tdb_store(tdb, key, orig_data, TDB_INSERT) == TDB_SUCCESS);
 
 
        ok1(tdb_store(tdb, key, orig_data, TDB_INSERT) == TDB_SUCCESS);
 
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
@@ -112,7 +112,7 @@ int main(int argc, char *argv[])
        ok1(tdb1_transaction_start(tdb) == 0);
        ok1(tdb_store(tdb, key, orig_data, TDB_INSERT) == TDB_SUCCESS);
 
        ok1(tdb1_transaction_start(tdb) == 0);
        ok1(tdb_store(tdb, key, orig_data, TDB_INSERT) == TDB_SUCCESS);
 
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
index bb5acf627b2c12f4fb2ab317a548a17c34e9cee3..3b91d45bdf5c807575d12f36cdd8b9a04158c24b 100644 (file)
@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
-       plan_tests(11);
+       plan_tests(14);
        tdb = tdb_open("run-endian.tdb1",
                       TDB_VERSION1|TDB_CONVERT,
                       O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
        tdb = tdb_open("run-endian.tdb1",
                       TDB_VERSION1|TDB_CONVERT,
                       O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
@@ -30,13 +30,13 @@ int main(int argc, char *argv[])
        ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_ERR_EXISTS);
        ok1(tdb_store(tdb, key, data, TDB_MODIFY) == TDB_SUCCESS);
 
        ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_ERR_EXISTS);
        ok1(tdb_store(tdb, key, data, TDB_MODIFY) == TDB_SUCCESS);
 
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
 
        key.dsize++;
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
 
        key.dsize++;
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_ERR_NOEXIST);
        ok1(data.dptr == NULL);
        tdb_close(tdb);
 
        ok1(data.dptr == NULL);
        tdb_close(tdb);
 
@@ -46,7 +46,7 @@ int main(int argc, char *argv[])
 
        key.dsize = strlen("hi");
        key.dptr = (void *)"hi";
 
        key.dsize = strlen("hi");
        key.dptr = (void *)"hi";
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
index 13ec5d826f050f274c49ef316e3a2cde04aa4022..d2e07107aaacea36f2097f591fad768c1eae34b4 100644 (file)
@@ -73,7 +73,7 @@ int main(int argc, char *argv[])
        dumbhash_attr.base.next = &log_attr;
        dumbhash_attr.hash.fn = tdb1_dumb_hash;
 
        dumbhash_attr.base.next = &log_attr;
        dumbhash_attr.hash.fn = tdb1_dumb_hash;
 
-       plan_tests(38 * 2);
+       plan_tests(42 * 2);
 
        for (flags = 0; flags <= TDB_CONVERT; flags += TDB_CONVERT) {
                unsigned int rwmagic = TDB1_HASH_RWLOCK_MAGIC;
 
        for (flags = 0; flags <= TDB_CONVERT; flags += TDB_CONVERT) {
                unsigned int rwmagic = TDB1_HASH_RWLOCK_MAGIC;
@@ -102,7 +102,7 @@ int main(int argc, char *argv[])
                               O_RDWR, 0600, &incompat_hash_attr);
                ok1(tdb);
                ok1(log_count == 0);
                               O_RDWR, 0600, &incompat_hash_attr);
                ok1(tdb);
                ok1(log_count == 0);
-               d = tdb1_fetch(tdb, d);
+               ok1(tdb_fetch(tdb, d, &d) == TDB_SUCCESS);
                ok1(d.dsize == 5);
                free(d.dptr);
                ok1(tdb1_check(tdb, NULL, NULL) == 0);
                ok1(d.dsize == 5);
                free(d.dptr);
                ok1(tdb1_check(tdb, NULL, NULL) == 0);
@@ -153,7 +153,7 @@ int main(int argc, char *argv[])
                               O_RDWR, 0600, &jhash_attr);
                ok1(tdb);
                ok1(log_count == 0);
                               O_RDWR, 0600, &jhash_attr);
                ok1(tdb);
                ok1(log_count == 0);
-               d = tdb1_fetch(tdb, d);
+               ok1(tdb1_fetch(tdb, d, &d) == TDB_SUCCESS);
                ok1(d.dsize == 5);
                free(d.dptr);
                ok1(tdb1_check(tdb, NULL, NULL) == 0);
                ok1(d.dsize == 5);
                free(d.dptr);
                ok1(tdb1_check(tdb, NULL, NULL) == 0);
@@ -167,7 +167,7 @@ int main(int argc, char *argv[])
                ok1(log_count == 0);
                d.dptr = (void *)"Hello";
                d.dsize = 5;
                ok1(log_count == 0);
                d.dptr = (void *)"Hello";
                d.dsize = 5;
-               d = tdb1_fetch(tdb, d);
+               ok1(tdb_fetch(tdb, d, &d) == TDB_SUCCESS);
                ok1(d.dsize == 5);
                free(d.dptr);
                ok1(tdb1_check(tdb, NULL, NULL) == 0);
                ok1(d.dsize == 5);
                free(d.dptr);
                ok1(tdb1_check(tdb, NULL, NULL) == 0);
@@ -202,7 +202,7 @@ int main(int argc, char *argv[])
                               &dumbhash_attr);
                ok1(tdb);
                ok1(log_count == 0);
                               &dumbhash_attr);
                ok1(tdb);
                ok1(log_count == 0);
-               d = tdb1_fetch(tdb, d);
+               ok1(tdb1_fetch(tdb, d, &d) == TDB_SUCCESS);
                ok1(d.dsize == 5);
                free(d.dptr);
                ok1(tdb1_check(tdb, NULL, NULL) == 0);
                ok1(d.dsize == 5);
                free(d.dptr);
                ok1(tdb1_check(tdb, NULL, NULL) == 0);
index 6a10b46b1b64886d5a1b4ff2f122d9112d022a16..89e47d3fbf5ef4bb7a289dcfd358759398df4aae 100644 (file)
@@ -15,7 +15,7 @@ int main(int argc, char *argv[])
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
-       plan_tests(27);
+       plan_tests(30);
        key.dsize = strlen("hi");
        key.dptr = (void *)"hi";
 
        key.dsize = strlen("hi");
        key.dptr = (void *)"hi";
 
@@ -28,19 +28,19 @@ int main(int argc, char *argv[])
        data.dptr = (void *)"world";
        data.dsize = strlen("world");
        ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS);
        data.dptr = (void *)"world";
        data.dsize = strlen("world");
        ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS);
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
        ok1(tdb1_transaction_start(tdb) != 0);
        ok1(tdb_error(tdb) == TDB_ERR_EINVAL);
 
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
        ok1(tdb1_transaction_start(tdb) != 0);
        ok1(tdb_error(tdb) == TDB_ERR_EINVAL);
 
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
        ok1(tdb1_transaction_commit(tdb) == 0);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
        ok1(tdb1_transaction_commit(tdb) == 0);
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
index 64169087e338b33f90636452bed32cc3357f1e2c..560b5bc8dd7ce336ce7e60eb3f6c7ea6adbd2832 100644 (file)
@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
-       plan_tests(4);
+       plan_tests(5);
        tdb = tdb_open(NULL, TDB_INTERNAL|TDB_VERSION1, O_CREAT|O_TRUNC|O_RDWR,
                       0600, &hsize);
        ok1(tdb);
        tdb = tdb_open(NULL, TDB_INTERNAL|TDB_VERSION1, O_CREAT|O_TRUNC|O_RDWR,
                       0600, &hsize);
        ok1(tdb);
@@ -27,7 +27,7 @@ int main(int argc, char *argv[])
 
        ok1(tdb1_append(tdb, key, data) == 0);
        ok1(tdb1_append(tdb, key, data) == 0);
 
        ok1(tdb1_append(tdb, key, data) == 0);
        ok1(tdb1_append(tdb, key, data) == 0);
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
        ok1(data.dsize == 0);
        free(data.dptr);
        tdb_close(tdb);
        ok1(data.dsize == 0);
        free(data.dptr);
        tdb_close(tdb);
index 584d7d6504f45cbba413f0e894e8c2fa53a5cbd5..dca6473b1cab61fe17625729c79bebe75f18f35d 100644 (file)
@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
        hsize.base.next = &tap_log_attr;
        hsize.tdb1_hashsize.hsize = 1024;
 
-       plan_tests(8);
+       plan_tests(9);
        tdb = tdb_open("run.tdb1", TDB_VERSION1,
                       O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
 
        tdb = tdb_open("run.tdb1", TDB_VERSION1,
                       O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
 
@@ -29,14 +29,13 @@ int main(int argc, char *argv[])
        ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_ERR_EXISTS);
        ok1(tdb_store(tdb, key, data, TDB_MODIFY) == TDB_SUCCESS);
 
        ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_ERR_EXISTS);
        ok1(tdb_store(tdb, key, data, TDB_MODIFY) == TDB_SUCCESS);
 
-       data = tdb1_fetch(tdb, key);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
 
        key.dsize++;
        ok1(data.dsize == strlen("world"));
        ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
        free(data.dptr);
 
        key.dsize++;
-       data = tdb1_fetch(tdb, key);
-       ok1(data.dptr == NULL);
+       ok1(tdb_fetch(tdb, key, &data) == TDB_ERR_NOEXIST);
        tdb_close(tdb);
 
        return exit_status();
        tdb_close(tdb);
 
        return exit_status();
index 4a0d3835483dc4e6c8e504355e475d9d46cc716a..6f80b1933c15de9e399db94274c07d403df8f248 100644 (file)
@@ -51,8 +51,7 @@ static enum agent_return do_operation(enum operation op, const char *name)
                ret = tdb1_transaction_start(tdb) == 0 ? SUCCESS : OTHER_FAILURE;
                break;
        case FETCH:
                ret = tdb1_transaction_start(tdb) == 0 ? SUCCESS : OTHER_FAILURE;
                break;
        case FETCH:
-               data = tdb1_fetch(tdb, k);
-               if (data.dptr == NULL) {
+               if (tdb_fetch(tdb, k, &data) != TDB_SUCCESS) {
                        if (tdb->last_error == TDB_ERR_NOEXIST)
                                ret = FAILED;
                        else
                        if (tdb->last_error == TDB_ERR_NOEXIST)
                                ret = FAILED;
                        else