Commit 08c05da5 authored by Rusty Russell's avatar Rusty Russell

tdb2: unify tdb1_fetch into tdb_fetch

Switch on the TDB_VERSION1 flag.
parent 98c754ff
...@@ -648,6 +648,8 @@ int tdb1_transaction_cancel(struct tdb_context *tdb); ...@@ -648,6 +648,8 @@ int tdb1_transaction_cancel(struct tdb_context *tdb);
/* tdb1_tdb.c: */ /* tdb1_tdb.c: */
int tdb1_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag); 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: */ /* tdb.c: */
enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb, enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb,
......
...@@ -248,6 +248,9 @@ enum TDB_ERROR tdb_fetch(struct tdb_context *tdb, struct tdb_data key, ...@@ -248,6 +248,9 @@ enum TDB_ERROR tdb_fetch(struct tdb_context *tdb, struct tdb_data key,
struct hash_info h; struct hash_info h;
enum TDB_ERROR ecode; 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); off = find_and_lock(tdb, key, F_RDLCK, &h, &rec, NULL);
if (TDB_OFF_IS_ERR(off)) { if (TDB_OFF_IS_ERR(off)) {
return tdb->last_error = off; return tdb->last_error = off;
......
...@@ -40,8 +40,6 @@ typedef int (*tdb1_traverse_func)(struct tdb_context *, TDB_DATA, TDB_DATA, void ...@@ -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 tdb1_parse_record(struct tdb_context *tdb, TDB_DATA key,
int (*parser)(TDB_DATA key, TDB_DATA data, int (*parser)(TDB_DATA key, TDB_DATA data,
void *private_data), void *private_data),
......
...@@ -201,11 +201,12 @@ static TDB_DATA _tdb1_fetch(struct tdb_context *tdb, TDB_DATA key) ...@@ -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); *data = _tdb1_fetch(tdb, key);
if (data->dptr == NULL)
return ret; return tdb->last_error;
return TDB_SUCCESS;
} }
/* /*
......
...@@ -70,7 +70,7 @@ int main(int argc, char *argv[]) ...@@ -70,7 +70,7 @@ int main(int argc, char *argv[])
hsize.base.next = &tap_log_attr; hsize.base.next = &tap_log_attr;
hsize.tdb1_hashsize.hsize = 1024; hsize.tdb1_hashsize.hsize = 1024;
plan_tests(24); plan_tests(26);
tdb = tdb_open("run-36-file.tdb1", TDB_VERSION1, tdb = tdb_open("run-36-file.tdb1", TDB_VERSION1,
O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize); O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
...@@ -88,7 +88,7 @@ int main(int argc, char *argv[]) ...@@ -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(data.dsize == strlen("world"));
ok1(memcmp(data.dptr, "world", strlen("world")) == 0); ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
free(data.dptr); free(data.dptr);
...@@ -112,7 +112,7 @@ int main(int argc, char *argv[]) ...@@ -112,7 +112,7 @@ int main(int argc, char *argv[])
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb1_transaction_start(tdb) == 0);
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(data.dsize == strlen("world"));
ok1(memcmp(data.dptr, "world", strlen("world")) == 0); ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
free(data.dptr); free(data.dptr);
......
...@@ -14,7 +14,7 @@ int main(int argc, char *argv[]) ...@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
hsize.base.next = &tap_log_attr; hsize.base.next = &tap_log_attr;
hsize.tdb1_hashsize.hsize = 1024; hsize.tdb1_hashsize.hsize = 1024;
plan_tests(11); plan_tests(14);
tdb = tdb_open("run-endian.tdb1", tdb = tdb_open("run-endian.tdb1",
TDB_VERSION1|TDB_CONVERT, TDB_VERSION1|TDB_CONVERT,
O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize); O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
...@@ -30,13 +30,13 @@ int main(int argc, char *argv[]) ...@@ -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_INSERT) == TDB_ERR_EXISTS);
ok1(tdb_store(tdb, key, data, TDB_MODIFY) == TDB_SUCCESS); 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(data.dsize == strlen("world"));
ok1(memcmp(data.dptr, "world", strlen("world")) == 0); ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
free(data.dptr); free(data.dptr);
key.dsize++; key.dsize++;
data = tdb1_fetch(tdb, key); ok1(tdb_fetch(tdb, key, &data) == TDB_ERR_NOEXIST);
ok1(data.dptr == NULL); ok1(data.dptr == NULL);
tdb_close(tdb); tdb_close(tdb);
...@@ -46,7 +46,7 @@ int main(int argc, char *argv[]) ...@@ -46,7 +46,7 @@ int main(int argc, char *argv[])
key.dsize = strlen("hi"); key.dsize = strlen("hi");
key.dptr = (void *)"hi"; key.dptr = (void *)"hi";
data = tdb1_fetch(tdb, key); ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
ok1(data.dsize == strlen("world")); ok1(data.dsize == strlen("world"));
ok1(memcmp(data.dptr, "world", strlen("world")) == 0); ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
free(data.dptr); free(data.dptr);
......
...@@ -73,7 +73,7 @@ int main(int argc, char *argv[]) ...@@ -73,7 +73,7 @@ int main(int argc, char *argv[])
dumbhash_attr.base.next = &log_attr; dumbhash_attr.base.next = &log_attr;
dumbhash_attr.hash.fn = tdb1_dumb_hash; dumbhash_attr.hash.fn = tdb1_dumb_hash;
plan_tests(38 * 2); plan_tests(42 * 2);
for (flags = 0; flags <= TDB_CONVERT; flags += TDB_CONVERT) { for (flags = 0; flags <= TDB_CONVERT; flags += TDB_CONVERT) {
unsigned int rwmagic = TDB1_HASH_RWLOCK_MAGIC; unsigned int rwmagic = TDB1_HASH_RWLOCK_MAGIC;
...@@ -102,7 +102,7 @@ int main(int argc, char *argv[]) ...@@ -102,7 +102,7 @@ int main(int argc, char *argv[])
O_RDWR, 0600, &incompat_hash_attr); O_RDWR, 0600, &incompat_hash_attr);
ok1(tdb); ok1(tdb);
ok1(log_count == 0); ok1(log_count == 0);
d = tdb1_fetch(tdb, d); ok1(tdb_fetch(tdb, d, &d) == TDB_SUCCESS);
ok1(d.dsize == 5); ok1(d.dsize == 5);
free(d.dptr); free(d.dptr);
ok1(tdb1_check(tdb, NULL, NULL) == 0); ok1(tdb1_check(tdb, NULL, NULL) == 0);
...@@ -153,7 +153,7 @@ int main(int argc, char *argv[]) ...@@ -153,7 +153,7 @@ int main(int argc, char *argv[])
O_RDWR, 0600, &jhash_attr); O_RDWR, 0600, &jhash_attr);
ok1(tdb); ok1(tdb);
ok1(log_count == 0); ok1(log_count == 0);
d = tdb1_fetch(tdb, d); ok1(tdb1_fetch(tdb, d, &d) == TDB_SUCCESS);
ok1(d.dsize == 5); ok1(d.dsize == 5);
free(d.dptr); free(d.dptr);
ok1(tdb1_check(tdb, NULL, NULL) == 0); ok1(tdb1_check(tdb, NULL, NULL) == 0);
...@@ -167,7 +167,7 @@ int main(int argc, char *argv[]) ...@@ -167,7 +167,7 @@ int main(int argc, char *argv[])
ok1(log_count == 0); ok1(log_count == 0);
d.dptr = (void *)"Hello"; d.dptr = (void *)"Hello";
d.dsize = 5; d.dsize = 5;
d = tdb1_fetch(tdb, d); ok1(tdb_fetch(tdb, d, &d) == TDB_SUCCESS);
ok1(d.dsize == 5); ok1(d.dsize == 5);
free(d.dptr); free(d.dptr);
ok1(tdb1_check(tdb, NULL, NULL) == 0); ok1(tdb1_check(tdb, NULL, NULL) == 0);
...@@ -202,7 +202,7 @@ int main(int argc, char *argv[]) ...@@ -202,7 +202,7 @@ int main(int argc, char *argv[])
&dumbhash_attr); &dumbhash_attr);
ok1(tdb); ok1(tdb);
ok1(log_count == 0); ok1(log_count == 0);
d = tdb1_fetch(tdb, d); ok1(tdb1_fetch(tdb, d, &d) == TDB_SUCCESS);
ok1(d.dsize == 5); ok1(d.dsize == 5);
free(d.dptr); free(d.dptr);
ok1(tdb1_check(tdb, NULL, NULL) == 0); ok1(tdb1_check(tdb, NULL, NULL) == 0);
......
...@@ -15,7 +15,7 @@ int main(int argc, char *argv[]) ...@@ -15,7 +15,7 @@ int main(int argc, char *argv[])
hsize.base.next = &tap_log_attr; hsize.base.next = &tap_log_attr;
hsize.tdb1_hashsize.hsize = 1024; hsize.tdb1_hashsize.hsize = 1024;
plan_tests(27); plan_tests(30);
key.dsize = strlen("hi"); key.dsize = strlen("hi");
key.dptr = (void *)"hi"; key.dptr = (void *)"hi";
...@@ -28,19 +28,19 @@ int main(int argc, char *argv[]) ...@@ -28,19 +28,19 @@ int main(int argc, char *argv[])
data.dptr = (void *)"world"; data.dptr = (void *)"world";
data.dsize = strlen("world"); data.dsize = strlen("world");
ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS); 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(data.dsize == strlen("world"));
ok1(memcmp(data.dptr, "world", strlen("world")) == 0); ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
free(data.dptr); free(data.dptr);
ok1(tdb1_transaction_start(tdb) != 0); ok1(tdb1_transaction_start(tdb) != 0);
ok1(tdb_error(tdb) == TDB_ERR_EINVAL); 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(data.dsize == strlen("world"));
ok1(memcmp(data.dptr, "world", strlen("world")) == 0); ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
free(data.dptr); free(data.dptr);
ok1(tdb1_transaction_commit(tdb) == 0); 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(data.dsize == strlen("world"));
ok1(memcmp(data.dptr, "world", strlen("world")) == 0); ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
free(data.dptr); free(data.dptr);
......
...@@ -14,7 +14,7 @@ int main(int argc, char *argv[]) ...@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
hsize.base.next = &tap_log_attr; hsize.base.next = &tap_log_attr;
hsize.tdb1_hashsize.hsize = 1024; 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, tdb = tdb_open(NULL, TDB_INTERNAL|TDB_VERSION1, O_CREAT|O_TRUNC|O_RDWR,
0600, &hsize); 0600, &hsize);
ok1(tdb); ok1(tdb);
...@@ -27,7 +27,7 @@ int main(int argc, char *argv[]) ...@@ -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); ok1(data.dsize == 0);
free(data.dptr); free(data.dptr);
tdb_close(tdb); tdb_close(tdb);
......
...@@ -14,7 +14,7 @@ int main(int argc, char *argv[]) ...@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
hsize.base.next = &tap_log_attr; hsize.base.next = &tap_log_attr;
hsize.tdb1_hashsize.hsize = 1024; hsize.tdb1_hashsize.hsize = 1024;
plan_tests(8); plan_tests(9);
tdb = tdb_open("run.tdb1", TDB_VERSION1, tdb = tdb_open("run.tdb1", TDB_VERSION1,
O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize); O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
...@@ -29,14 +29,13 @@ int main(int argc, char *argv[]) ...@@ -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_INSERT) == TDB_ERR_EXISTS);
ok1(tdb_store(tdb, key, data, TDB_MODIFY) == TDB_SUCCESS); 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(data.dsize == strlen("world"));
ok1(memcmp(data.dptr, "world", strlen("world")) == 0); ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
free(data.dptr); free(data.dptr);
key.dsize++; key.dsize++;
data = tdb1_fetch(tdb, key); ok1(tdb_fetch(tdb, key, &data) == TDB_ERR_NOEXIST);
ok1(data.dptr == NULL);
tdb_close(tdb); tdb_close(tdb);
return exit_status(); return exit_status();
......
...@@ -51,8 +51,7 @@ static enum agent_return do_operation(enum operation op, const char *name) ...@@ -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; ret = tdb1_transaction_start(tdb) == 0 ? SUCCESS : OTHER_FAILURE;
break; break;
case FETCH: case FETCH:
data = tdb1_fetch(tdb, k); if (tdb_fetch(tdb, k, &data) != TDB_SUCCESS) {
if (data.dptr == NULL) {
if (tdb->last_error == TDB_ERR_NOEXIST) if (tdb->last_error == TDB_ERR_NOEXIST)
ret = FAILED; ret = FAILED;
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment