Commit 6bc8ea01 authored by Rusty Russell's avatar Rusty Russell

tdb2: unify tdb1_transaction_start etc. into tdb_transaction_start.

Switch on the TDB_VERSION1 flag.
parent 3352e4e9
...@@ -671,6 +671,11 @@ enum TDB_ERROR tdb1_parse_record(struct tdb_context *tdb, TDB_DATA key, ...@@ -671,6 +671,11 @@ enum TDB_ERROR tdb1_parse_record(struct tdb_context *tdb, TDB_DATA key,
void *private_data), void *private_data),
void *private_data); void *private_data);
/* tdb1_transaction.c: */
int tdb1_transaction_start(struct tdb_context *tdb);
int tdb1_transaction_prepare_commit(struct tdb_context *tdb);
int tdb1_transaction_commit(struct tdb_context *tdb);
/* tdb.c: */ /* tdb.c: */
enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb, enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb,
enum TDB_ERROR ecode, enum TDB_ERROR ecode,
......
...@@ -42,12 +42,6 @@ TDB_DATA tdb1_firstkey(struct tdb_context *tdb); ...@@ -42,12 +42,6 @@ TDB_DATA tdb1_firstkey(struct tdb_context *tdb);
TDB_DATA tdb1_nextkey(struct tdb_context *tdb, TDB_DATA key); TDB_DATA tdb1_nextkey(struct tdb_context *tdb, TDB_DATA key);
int tdb1_transaction_start(struct tdb_context *tdb);
int tdb1_transaction_prepare_commit(struct tdb_context *tdb);
int tdb1_transaction_commit(struct tdb_context *tdb);
int tdb1_get_seqnum(struct tdb_context *tdb); int tdb1_get_seqnum(struct tdb_context *tdb);
void tdb1_increment_seqnum_nonblock(struct tdb_context *tdb); void tdb1_increment_seqnum_nonblock(struct tdb_context *tdb);
......
...@@ -109,14 +109,14 @@ int main(int argc, char *argv[]) ...@@ -109,14 +109,14 @@ int main(int argc, char *argv[])
ok1(tdb_traverse(tdb, test_traverse, NULL) == 0); ok1(tdb_traverse(tdb, test_traverse, NULL) == 0);
/* Transactions should work. */ /* Transactions should work. */
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
ok1(tdb_store(tdb, key, orig_data, TDB_INSERT) == TDB_SUCCESS); ok1(tdb_store(tdb, key, orig_data, TDB_INSERT) == TDB_SUCCESS);
ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS); 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(tdb_transaction_commit(tdb) == TDB_SUCCESS);
ok1(tdb_traverse(tdb, test_traverse, &orig_data) == 1); ok1(tdb_traverse(tdb, test_traverse, &orig_data) == 1);
tdb_close(tdb); tdb_close(tdb);
......
...@@ -170,13 +170,13 @@ reset: ...@@ -170,13 +170,13 @@ reset:
errx(1, "Agent failed find key: %s", agent_return_name1(ret)); errx(1, "Agent failed find key: %s", agent_return_name1(ret));
in_transaction = true; in_transaction = true;
if (tdb1_transaction_start(tdb) != 0) if (tdb_transaction_start(tdb) != TDB_SUCCESS)
return false; return false;
if (tdb_store(tdb, key, key, TDB_INSERT) != TDB_SUCCESS) if (tdb_store(tdb, key, key, TDB_INSERT) != TDB_SUCCESS)
return false; return false;
if (tdb1_transaction_commit(tdb) != 0) if (tdb_transaction_commit(tdb) != TDB_SUCCESS)
return false; return false;
in_transaction = false; in_transaction = false;
......
...@@ -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(30); plan_tests(29);
key.dsize = strlen("hi"); key.dsize = strlen("hi");
key.dptr = (void *)"hi"; key.dptr = (void *)"hi";
...@@ -24,7 +24,7 @@ int main(int argc, char *argv[]) ...@@ -24,7 +24,7 @@ int main(int argc, char *argv[])
ok1(tdb); ok1(tdb);
/* No nesting by default. */ /* No nesting by default. */
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
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);
...@@ -32,14 +32,13 @@ int main(int argc, char *argv[]) ...@@ -32,14 +32,13 @@ int main(int argc, char *argv[])
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(tdb_transaction_start(tdb) == TDB_ERR_EINVAL);
ok1(tdb_error(tdb) == TDB_ERR_EINVAL);
ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS); 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(tdb_transaction_commit(tdb) == TDB_SUCCESS);
ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS); 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);
...@@ -50,21 +49,22 @@ int main(int argc, char *argv[]) ...@@ -50,21 +49,22 @@ int main(int argc, char *argv[])
TDB_ALLOW_NESTING, O_RDWR, 0, &tap_log_attr); TDB_ALLOW_NESTING, O_RDWR, 0, &tap_log_attr);
ok1(tdb); ok1(tdb);
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
ok1(tdb_delete(tdb, key) == TDB_SUCCESS); ok1(tdb_delete(tdb, key) == TDB_SUCCESS);
ok1(tdb1_transaction_commit(tdb) == 0); ok1(tdb_transaction_commit(tdb) == TDB_SUCCESS);
ok1(!tdb_exists(tdb, key)); ok1(!tdb_exists(tdb, key));
ok1(tdb1_transaction_cancel(tdb) == 0); tdb_transaction_cancel(tdb);
ok1(tap_log_messages == 0);
/* Surprise! Kills inner "committed" transaction. */ /* Surprise! Kills inner "committed" transaction. */
ok1(tdb_exists(tdb, key)); ok1(tdb_exists(tdb, key));
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
ok1(tdb_delete(tdb, key) == TDB_SUCCESS); ok1(tdb_delete(tdb, key) == TDB_SUCCESS);
ok1(tdb1_transaction_commit(tdb) == 0); ok1(tdb_transaction_commit(tdb) == TDB_SUCCESS);
ok1(!tdb_exists(tdb, key)); ok1(!tdb_exists(tdb, key));
ok1(tdb1_transaction_commit(tdb) == 0); ok1(tdb_transaction_commit(tdb) == TDB_SUCCESS);
ok1(!tdb_exists(tdb, key)); ok1(!tdb_exists(tdb, key));
tdb_close(tdb); tdb_close(tdb);
......
...@@ -156,14 +156,14 @@ int main(int argc, char *argv[]) ...@@ -156,14 +156,14 @@ int main(int argc, char *argv[])
ok1(tdb); ok1(tdb);
opened = true; opened = true;
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
key.dsize = strlen("hi"); key.dsize = strlen("hi");
key.dptr = (void *)"hi"; key.dptr = (void *)"hi";
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);
ok1(tdb1_transaction_commit(tdb) == 0); ok1(tdb_transaction_commit(tdb) == TDB_SUCCESS);
ok(!errors, "We had %u open errors", errors); ok(!errors, "We had %u open errors", errors);
opened = false; opened = false;
......
...@@ -31,7 +31,7 @@ int main(int argc, char *argv[]) ...@@ -31,7 +31,7 @@ int main(int argc, char *argv[])
ok1(tdb1_check(tdb, NULL, NULL) == 0); ok1(tdb1_check(tdb, NULL, NULL) == 0);
/* We are also allowed to do a check inside a transaction. */ /* We are also allowed to do a check inside a transaction. */
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
ok1(tdb1_check(tdb, NULL, NULL) == 0); ok1(tdb1_check(tdb, NULL, NULL) == 0);
ok1(tdb_close(tdb) == 0); ok1(tdb_close(tdb) == 0);
......
...@@ -61,7 +61,7 @@ int main(int argc, char *argv[]) ...@@ -61,7 +61,7 @@ int main(int argc, char *argv[])
ok1(external_agent_operation1(agent, OPEN, tdb->name) == SUCCESS); ok1(external_agent_operation1(agent, OPEN, tdb->name) == SUCCESS);
ok1(tdb1_transaction_start(tdb) == 0); ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
ok1(external_agent_operation1(agent, TRANSACTION_START, tdb->name) ok1(external_agent_operation1(agent, TRANSACTION_START, tdb->name)
== WOULD_HAVE_BLOCKED); == WOULD_HAVE_BLOCKED);
tdb_traverse(tdb, traverse, NULL); tdb_traverse(tdb, traverse, NULL);
...@@ -74,7 +74,7 @@ int main(int argc, char *argv[]) ...@@ -74,7 +74,7 @@ int main(int argc, char *argv[])
/* That should *not* release the transaction lock! */ /* That should *not* release the transaction lock! */
ok1(external_agent_operation1(agent, TRANSACTION_START, tdb->name) ok1(external_agent_operation1(agent, TRANSACTION_START, tdb->name)
== WOULD_HAVE_BLOCKED); == WOULD_HAVE_BLOCKED);
ok1(tdb1_transaction_commit(tdb) == 0); ok1(tdb_transaction_commit(tdb) == TDB_SUCCESS);
/* Now we should be fine. */ /* Now we should be fine. */
ok1(external_agent_operation1(agent, TRANSACTION_START, tdb->name) ok1(external_agent_operation1(agent, TRANSACTION_START, tdb->name)
== SUCCESS); == SUCCESS);
......
...@@ -48,7 +48,7 @@ static enum agent_return do_operation(enum operation op, const char *name) ...@@ -48,7 +48,7 @@ static enum agent_return do_operation(enum operation op, const char *name)
ret = SUCCESS; ret = SUCCESS;
break; break;
case TRANSACTION_START: case TRANSACTION_START:
ret = tdb1_transaction_start(tdb) == 0 ? SUCCESS : OTHER_FAILURE; ret = tdb_transaction_start(tdb) == TDB_SUCCESS ? SUCCESS : OTHER_FAILURE;
break; break;
case FETCH: case FETCH:
if (tdb_fetch(tdb, k, &data) != TDB_SUCCESS) { if (tdb_fetch(tdb, k, &data) != TDB_SUCCESS) {
...@@ -71,7 +71,7 @@ static enum agent_return do_operation(enum operation op, const char *name) ...@@ -71,7 +71,7 @@ static enum agent_return do_operation(enum operation op, const char *name)
ret = OTHER_FAILURE; ret = OTHER_FAILURE;
break; break;
case TRANSACTION_COMMIT: case TRANSACTION_COMMIT:
ret = tdb1_transaction_commit(tdb)==0 ? SUCCESS : OTHER_FAILURE; ret = tdb_transaction_commit(tdb) == TDB_SUCCESS ? SUCCESS : OTHER_FAILURE;
break; break;
case CHECK: case CHECK:
ret = tdb1_check(tdb, NULL, NULL) == 0 ? SUCCESS : OTHER_FAILURE; ret = tdb1_check(tdb, NULL, NULL) == 0 ? SUCCESS : OTHER_FAILURE;
......
...@@ -521,6 +521,12 @@ enum TDB_ERROR tdb_transaction_start(struct tdb_context *tdb) ...@@ -521,6 +521,12 @@ enum TDB_ERROR tdb_transaction_start(struct tdb_context *tdb)
{ {
enum TDB_ERROR ecode; enum TDB_ERROR ecode;
if (tdb->flags & TDB_VERSION1) {
if (tdb1_transaction_start(tdb) == -1)
return tdb->last_error;
return TDB_SUCCESS;
}
tdb->stats.transactions++; tdb->stats.transactions++;
/* some sanity checks */ /* some sanity checks */
if (tdb->flags & TDB_INTERNAL) { if (tdb->flags & TDB_INTERNAL) {
...@@ -617,6 +623,10 @@ fail_allrecord_lock: ...@@ -617,6 +623,10 @@ fail_allrecord_lock:
*/ */
void tdb_transaction_cancel(struct tdb_context *tdb) void tdb_transaction_cancel(struct tdb_context *tdb)
{ {
if (tdb->flags & TDB_VERSION1) {
tdb1_transaction_cancel(tdb);
return;
}
tdb->stats.transaction_cancel++; tdb->stats.transaction_cancel++;
_tdb_transaction_cancel(tdb); _tdb_transaction_cancel(tdb);
} }
...@@ -1052,6 +1062,11 @@ static enum TDB_ERROR _tdb_transaction_prepare_commit(struct tdb_context *tdb) ...@@ -1052,6 +1062,11 @@ static enum TDB_ERROR _tdb_transaction_prepare_commit(struct tdb_context *tdb)
*/ */
enum TDB_ERROR tdb_transaction_prepare_commit(struct tdb_context *tdb) enum TDB_ERROR tdb_transaction_prepare_commit(struct tdb_context *tdb)
{ {
if (tdb->flags & TDB_VERSION1) {
if (tdb1_transaction_prepare_commit(tdb) == -1)
return tdb->last_error;
return TDB_SUCCESS;
}
return _tdb_transaction_prepare_commit(tdb); return _tdb_transaction_prepare_commit(tdb);
} }
...@@ -1064,6 +1079,12 @@ enum TDB_ERROR tdb_transaction_commit(struct tdb_context *tdb) ...@@ -1064,6 +1079,12 @@ enum TDB_ERROR tdb_transaction_commit(struct tdb_context *tdb)
int i; int i;
enum TDB_ERROR ecode; enum TDB_ERROR ecode;
if (tdb->flags & TDB_VERSION1) {
if (tdb1_transaction_commit(tdb) == -1)
return tdb->last_error;
return TDB_SUCCESS;
}
if (tdb->tdb2.transaction == NULL) { if (tdb->tdb2.transaction == NULL) {
return tdb->last_error = tdb_logerr(tdb, TDB_ERR_EINVAL, return tdb->last_error = tdb_logerr(tdb, TDB_ERR_EINVAL,
TDB_LOG_USE_ERROR, TDB_LOG_USE_ERROR,
......
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