Browse Source

tdb2: unify tdb1_store into tdb_store

Switch on the TDB_VERSION1 flag.
Rusty Russell 14 years ago
parent
commit
98c754ffe6

+ 3 - 0
ccan/tdb2/private.h

@@ -646,6 +646,9 @@ int tdb1_allrecord_unlock(struct tdb_context *tdb, int ltype);
 int tdb1_transaction_recover(struct tdb_context *tdb);
 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);
+
 /* tdb.c: */
 enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb,
 			       enum TDB_ERROR ecode,

+ 6 - 0
ccan/tdb2/tdb.c

@@ -114,6 +114,12 @@ enum TDB_ERROR tdb_store(struct tdb_context *tdb,
 	struct tdb_used_record rec;
 	enum TDB_ERROR ecode;
 
+	if (tdb->flags & TDB_VERSION1) {
+		if (tdb1_store(tdb, key, dbuf, flag) == -1)
+			return tdb->last_error;
+		return TDB_SUCCESS;
+	}
+
 	off = find_and_lock(tdb, key, F_WRLCK, &h, &rec, NULL);
 	if (TDB_OFF_IS_ERR(off)) {
 		return tdb->last_error = off;

+ 0 - 2
ccan/tdb2/tdb1.h

@@ -49,8 +49,6 @@ int tdb1_parse_record(struct tdb_context *tdb, TDB_DATA key,
 
 int tdb1_delete(struct tdb_context *tdb, TDB_DATA key);
 
-int tdb1_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag);
-
 int tdb1_append(struct tdb_context *tdb, TDB_DATA key, TDB_DATA new_dbuf);
 
 TDB_DATA tdb1_firstkey(struct tdb_context *tdb);

+ 3 - 0
ccan/tdb2/tdb1_tdb.c

@@ -26,6 +26,7 @@
 */
 
 #include "tdb1_private.h"
+#include <assert.h>
 
 TDB_DATA tdb1_null;
 
@@ -601,6 +602,8 @@ int tdb1_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag)
 	uint32_t hash;
 	int ret;
 
+	assert(tdb->flags & TDB_VERSION1);
+
 	if ((tdb->flags & TDB_RDONLY) || tdb->tdb1.traverse_read) {
 		tdb->last_error = TDB_ERR_RDONLY;
 		return -1;

+ 2 - 2
ccan/tdb2/test/run-tdb1-3G-file.c

@@ -86,7 +86,7 @@ int main(int argc, char *argv[])
 	orig_data.dsize = strlen("world");
 	orig_data.dptr = (void *)"world";
 
-	ok1(tdb1_store(tdb, key, orig_data, TDB_INSERT) == 0);
+	ok1(tdb_store(tdb, key, orig_data, TDB_INSERT) == TDB_SUCCESS);
 
 	data = tdb1_fetch(tdb, key);
 	ok1(data.dsize == strlen("world"));
@@ -110,7 +110,7 @@ int main(int argc, char *argv[])
 
 	/* Transactions should work. */
 	ok1(tdb1_transaction_start(tdb) == 0);
-	ok1(tdb1_store(tdb, key, orig_data, TDB_INSERT) == 0);
+	ok1(tdb_store(tdb, key, orig_data, TDB_INSERT) == TDB_SUCCESS);
 
 	data = tdb1_fetch(tdb, key);
 	ok1(data.dsize == strlen("world"));

+ 1 - 1
ccan/tdb2/test/run-tdb1-check.c

@@ -26,7 +26,7 @@ int main(int argc, char *argv[])
 	data.dsize = strlen("world");
 	data.dptr = (void *)"world";
 
-	ok1(tdb1_store(tdb, key, data, TDB_INSERT) == 0);
+	ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS);
 	ok1(tdb1_check(tdb, NULL, NULL) == 0);
 	tdb_close(tdb);
 

+ 1 - 1
ccan/tdb2/test/run-tdb1-corrupt.c

@@ -58,7 +58,7 @@ static void check_test(struct tdb_context *tdb)
 	for (key.dsize = 1; key.dsize <= 5; key.dsize++) {
 		ksize += key.dsize;
 		dsize += data.dsize;
-		if (tdb1_store(tdb, key, data, TDB_INSERT) != 0)
+		if (tdb_store(tdb, key, data, TDB_INSERT) != TDB_SUCCESS)
 			abort();
 	}
 

+ 2 - 2
ccan/tdb2/test/run-tdb1-die-during-transaction.c

@@ -155,7 +155,7 @@ reset:
 	/* Put key for agent to fetch. */
 	key.dsize = strlen(KEY_STRING);
 	key.dptr = (void *)KEY_STRING;
-	if (tdb1_store(tdb, key, key, TDB_INSERT) != 0)
+	if (tdb_store(tdb, key, key, TDB_INSERT) != TDB_SUCCESS)
 		return false;
 
 	/* This is the key we insert in transaction. */
@@ -173,7 +173,7 @@ reset:
 	if (tdb1_transaction_start(tdb) != 0)
 		return false;
 
-	if (tdb1_store(tdb, key, key, TDB_INSERT) != 0)
+	if (tdb_store(tdb, key, key, TDB_INSERT) != TDB_SUCCESS)
 		return false;
 
 	if (tdb1_transaction_commit(tdb) != 0)

+ 5 - 7
ccan/tdb2/test/run-tdb1-endian.c

@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
 	hsize.base.next = &tap_log_attr;
 	hsize.tdb1_hashsize.hsize = 1024;
 
-	plan_tests(13);
+	plan_tests(11);
 	tdb = tdb_open("run-endian.tdb1",
 		       TDB_VERSION1|TDB_CONVERT,
 		       O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
@@ -25,12 +25,10 @@ int main(int argc, char *argv[])
 	data.dsize = strlen("world");
 	data.dptr = (void *)"world";
 
-	ok1(tdb1_store(tdb, key, data, TDB_MODIFY) < 0);
-	ok1(tdb_error(tdb) == TDB_ERR_NOEXIST);
-	ok1(tdb1_store(tdb, key, data, TDB_INSERT) == 0);
-	ok1(tdb1_store(tdb, key, data, TDB_INSERT) < 0);
-	ok1(tdb_error(tdb) == TDB_ERR_EXISTS);
-	ok1(tdb1_store(tdb, key, data, TDB_MODIFY) == 0);
+	ok1(tdb_store(tdb, key, data, TDB_MODIFY) == TDB_ERR_NOEXIST);
+	ok1(tdb_store(tdb, key, data, TDB_INSERT) == 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(data.dsize == strlen("world"));

+ 3 - 3
ccan/tdb2/test/run-tdb1-incompatible.c

@@ -89,7 +89,7 @@ int main(int argc, char *argv[])
 		ok1(log_count == 0);
 		d.dptr = (void *)"Hello";
 		d.dsize = 5;
-		ok1(tdb1_store(tdb, d, d, TDB_INSERT) == 0);
+		ok1(tdb_store(tdb, d, d, TDB_INSERT) == TDB_SUCCESS);
 		tdb_close(tdb);
 
 		/* Should not have marked rwlocks field. */
@@ -134,7 +134,7 @@ int main(int argc, char *argv[])
 		ok1(log_count == 0);
 		d.dptr = (void *)"Hello";
 		d.dsize = 5;
-		ok1(tdb1_store(tdb, d, d, TDB_INSERT) == 0);
+		ok1(tdb_store(tdb, d, d, TDB_INSERT) == TDB_SUCCESS);
 		tdb_close(tdb);
 
 		/* Should have marked rwlocks field. */
@@ -183,7 +183,7 @@ int main(int argc, char *argv[])
 		ok1(log_count == 0);
 		d.dptr = (void *)"Hello";
 		d.dsize = 5;
-		ok1(tdb1_store(tdb, d, d, TDB_INSERT) == 0);
+		ok1(tdb_store(tdb, d, d, TDB_INSERT) == TDB_SUCCESS);
 		tdb_close(tdb);
 
 		/* FIXME: Should have marked rwlocks field. */

+ 1 - 1
ccan/tdb2/test/run-tdb1-nested-transactions.c

@@ -27,7 +27,7 @@ int main(int argc, char *argv[])
 	ok1(tdb1_transaction_start(tdb) == 0);
 	data.dptr = (void *)"world";
 	data.dsize = strlen("world");
-	ok1(tdb1_store(tdb, key, data, TDB_INSERT) == 0);
+	ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS);
 	data = tdb1_fetch(tdb, key);
 	ok1(data.dsize == strlen("world"));
 	ok1(memcmp(data.dptr, "world", strlen("world")) == 0);

+ 1 - 1
ccan/tdb2/test/run-tdb1-nested-traverse.c

@@ -76,7 +76,7 @@ int main(int argc, char *argv[])
 	data.dptr = (void *)"world";
 	data.dsize = strlen("world");
 
-	ok1(tdb1_store(tdb, key, data, TDB_INSERT) == 0);
+	ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS);
 	tdb1_traverse(tdb, traverse1, NULL);
 	tdb1_traverse_read(tdb, traverse1, NULL);
 	tdb_close(tdb);

+ 1 - 1
ccan/tdb2/test/run-tdb1-no-lock-during-traverse.c

@@ -25,7 +25,7 @@ static bool prepare_entries(struct tdb_context *tdb)
 		data.dsize = strlen("world");
 		data.dptr = (void *)"world";
 
-		if (tdb1_store(tdb, key, data, 0) != 0)
+		if (tdb_store(tdb, key, data, 0) != TDB_SUCCESS)
 			return false;
 	}
 	return true;

+ 1 - 1
ccan/tdb2/test/run-tdb1-open-during-transaction.c

@@ -162,7 +162,7 @@ int main(int argc, char *argv[])
 		data.dptr = (void *)"world";
 		data.dsize = strlen("world");
 
-		ok1(tdb1_store(tdb, key, data, TDB_INSERT) == 0);
+		ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS);
 		ok1(tdb1_transaction_commit(tdb) == 0);
 		ok(!errors, "We had %u open errors", errors);
 

+ 3 - 4
ccan/tdb2/test/run-tdb1-readonly-check.c

@@ -16,7 +16,7 @@ int main(int argc, char *argv[])
 	hsize.base.next = &tap_log_attr;
 	hsize.tdb1_hashsize.hsize = 1024;
 
-	plan_tests(11);
+	plan_tests(10);
 	tdb = tdb_open("run-readonly-check.tdb1",
 		       TDB_VERSION1,
 		       O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
@@ -27,7 +27,7 @@ int main(int argc, char *argv[])
 	data.dsize = strlen("world");
 	data.dptr = (void *)"world";
 
-	ok1(tdb1_store(tdb, key, data, TDB_INSERT) == 0);
+	ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS);
 	ok1(tdb1_check(tdb, NULL, NULL) == 0);
 
 	/* We are also allowed to do a check inside a transaction. */
@@ -39,8 +39,7 @@ int main(int argc, char *argv[])
 		       TDB_DEFAULT, O_RDONLY, 0, &tap_log_attr);
 
 	ok1(tdb);
-	ok1(tdb1_store(tdb, key, data, TDB_MODIFY) == -1);
-	ok1(tdb_error(tdb) == TDB_ERR_RDONLY);
+	ok1(tdb_store(tdb, key, data, TDB_MODIFY) == TDB_ERR_RDONLY);
 	ok1(tdb1_check(tdb, NULL, NULL) == 0);
 	ok1(tdb_close(tdb) == 0);
 

+ 3 - 1
ccan/tdb2/test/run-tdb1-summary.c

@@ -26,8 +26,10 @@ int main(int argc, char *argv[])
 		for (j = 0; j < 500; j++) {
 			/* Make sure padding varies to we get some graphs! */
 			data.dsize = j % (sizeof(j) + 1);
-			if (tdb1_store(tdb, key, data, TDB_REPLACE) != 0)
+			if (tdb_store(tdb, key, data, TDB_REPLACE)
+			    != TDB_SUCCESS) {
 				fail("Storing in tdb");
+			}
 		}
 
 		summary = tdb1_summary(tdb);

+ 1 - 1
ccan/tdb2/test/run-tdb1-traverse-in-transaction.c

@@ -57,7 +57,7 @@ int main(int argc, char *argv[])
 	data.dptr = (void *)"world";
 	data.dsize = strlen("world");
 
-	ok1(tdb1_store(tdb, key, data, TDB_INSERT) == 0);
+	ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS);
 
 	ok1(external_agent_operation1(agent, OPEN, tdb->name) == SUCCESS);
 

+ 1 - 1
ccan/tdb2/test/run-tdb1-wronghash-fail.c

@@ -60,7 +60,7 @@ int main(int argc, char *argv[])
 	ok1(log_count == 0);
 	d.dptr = (void *)"Hello";
 	d.dsize = 5;
-	ok1(tdb1_store(tdb, d, d, TDB_INSERT) == 0);
+	ok1(tdb_store(tdb, d, d, TDB_INSERT) == TDB_SUCCESS);
 	tdb_close(tdb);
 
 	/* Fail to open with different hash. */

+ 5 - 7
ccan/tdb2/test/run-tdb1.c

@@ -14,7 +14,7 @@ int main(int argc, char *argv[])
 	hsize.base.next = &tap_log_attr;
 	hsize.tdb1_hashsize.hsize = 1024;
 
-	plan_tests(10);
+	plan_tests(8);
 	tdb = tdb_open("run.tdb1", TDB_VERSION1,
 		       O_CREAT|O_TRUNC|O_RDWR, 0600, &hsize);
 
@@ -24,12 +24,10 @@ int main(int argc, char *argv[])
 	data.dsize = strlen("world");
 	data.dptr = (void *)"world";
 
-	ok1(tdb1_store(tdb, key, data, TDB_MODIFY) < 0);
-	ok1(tdb_error(tdb) == TDB_ERR_NOEXIST);
-	ok1(tdb1_store(tdb, key, data, TDB_INSERT) == 0);
-	ok1(tdb1_store(tdb, key, data, TDB_INSERT) < 0);
-	ok1(tdb_error(tdb) == TDB_ERR_EXISTS);
-	ok1(tdb1_store(tdb, key, data, TDB_MODIFY) == 0);
+	ok1(tdb_store(tdb, key, data, TDB_MODIFY) == TDB_ERR_NOEXIST);
+	ok1(tdb_store(tdb, key, data, TDB_INSERT) == 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(data.dsize == strlen("world"));

+ 4 - 1
ccan/tdb2/test/tdb1-external-agent.c

@@ -66,7 +66,10 @@ static enum agent_return do_operation(enum operation op, const char *name)
 		free(data.dptr);
 		break;
 	case STORE:
-		ret = tdb1_store(tdb, k, k, 0) == 0 ? SUCCESS : OTHER_FAILURE;
+		if (tdb_store(tdb, k, k, 0) == TDB_SUCCESS)
+			ret = SUCCESS;
+		else
+			ret = OTHER_FAILURE;
 		break;
 	case TRANSACTION_COMMIT:
 		ret = tdb1_transaction_commit(tdb)==0 ? SUCCESS : OTHER_FAILURE;