Switch on the TDB_VERSION1 flag.
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: */
enum TDB_ERROR COLD tdb_logerr(struct tdb_context *tdb,
enum TDB_ERROR ecode,
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);
void tdb1_increment_seqnum_nonblock(struct tdb_context *tdb);
ok1(tdb_traverse(tdb, test_traverse, NULL) == 0);
/* 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_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(tdb_transaction_commit(tdb) == TDB_SUCCESS);
ok1(tdb_traverse(tdb, test_traverse, &orig_data) == 1);
tdb_close(tdb);
errx(1, "Agent failed find key: %s", agent_return_name1(ret));
in_transaction = true;
- if (tdb1_transaction_start(tdb) != 0)
+ if (tdb_transaction_start(tdb) != TDB_SUCCESS)
return false;
if (tdb_store(tdb, key, key, TDB_INSERT) != TDB_SUCCESS)
return false;
- if (tdb1_transaction_commit(tdb) != 0)
+ if (tdb_transaction_commit(tdb) != TDB_SUCCESS)
return false;
in_transaction = false;
hsize.base.next = &tap_log_attr;
hsize.tdb1_hashsize.hsize = 1024;
- plan_tests(30);
+ plan_tests(29);
key.dsize = strlen("hi");
key.dptr = (void *)"hi";
ok1(tdb);
/* No nesting by default. */
- ok1(tdb1_transaction_start(tdb) == 0);
+ ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
data.dptr = (void *)"world";
data.dsize = strlen("world");
ok1(tdb_store(tdb, key, data, TDB_INSERT) == 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(tdb_transaction_start(tdb) == TDB_ERR_EINVAL);
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(tdb_transaction_commit(tdb) == TDB_SUCCESS);
ok1(tdb_fetch(tdb, key, &data) == TDB_SUCCESS);
ok1(data.dsize == strlen("world"));
ok1(memcmp(data.dptr, "world", strlen("world")) == 0);
TDB_ALLOW_NESTING, O_RDWR, 0, &tap_log_attr);
ok1(tdb);
- ok1(tdb1_transaction_start(tdb) == 0);
- ok1(tdb1_transaction_start(tdb) == 0);
+ ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
+ ok1(tdb_transaction_start(tdb) == 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(tdb1_transaction_cancel(tdb) == 0);
+ tdb_transaction_cancel(tdb);
+ ok1(tap_log_messages == 0);
/* Surprise! Kills inner "committed" transaction. */
ok1(tdb_exists(tdb, key));
- ok1(tdb1_transaction_start(tdb) == 0);
- ok1(tdb1_transaction_start(tdb) == 0);
+ ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
+ ok1(tdb_transaction_start(tdb) == 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(tdb1_transaction_commit(tdb) == 0);
+ ok1(tdb_transaction_commit(tdb) == TDB_SUCCESS);
ok1(!tdb_exists(tdb, key));
tdb_close(tdb);
ok1(tdb);
opened = true;
- ok1(tdb1_transaction_start(tdb) == 0);
+ ok1(tdb_transaction_start(tdb) == TDB_SUCCESS);
key.dsize = strlen("hi");
key.dptr = (void *)"hi";
data.dptr = (void *)"world";
data.dsize = strlen("world");
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);
opened = false;
ok1(tdb1_check(tdb, NULL, NULL) == 0);
/* 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(tdb_close(tdb) == 0);
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)
== WOULD_HAVE_BLOCKED);
tdb_traverse(tdb, traverse, NULL);
/* That should *not* release the transaction lock! */
ok1(external_agent_operation1(agent, TRANSACTION_START, tdb->name)
== WOULD_HAVE_BLOCKED);
- ok1(tdb1_transaction_commit(tdb) == 0);
+ ok1(tdb_transaction_commit(tdb) == TDB_SUCCESS);
/* Now we should be fine. */
ok1(external_agent_operation1(agent, TRANSACTION_START, tdb->name)
== SUCCESS);
ret = SUCCESS;
break;
case TRANSACTION_START:
- ret = tdb1_transaction_start(tdb) == 0 ? SUCCESS : OTHER_FAILURE;
+ ret = tdb_transaction_start(tdb) == TDB_SUCCESS ? SUCCESS : OTHER_FAILURE;
break;
case FETCH:
if (tdb_fetch(tdb, k, &data) != TDB_SUCCESS) {
ret = OTHER_FAILURE;
break;
case TRANSACTION_COMMIT:
- ret = tdb1_transaction_commit(tdb)==0 ? SUCCESS : OTHER_FAILURE;
+ ret = tdb_transaction_commit(tdb) == TDB_SUCCESS ? SUCCESS : OTHER_FAILURE;
break;
case CHECK:
ret = tdb1_check(tdb, NULL, NULL) == 0 ? SUCCESS : OTHER_FAILURE;
{
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++;
/* some sanity checks */
if (tdb->flags & TDB_INTERNAL) {
*/
void tdb_transaction_cancel(struct tdb_context *tdb)
{
+ if (tdb->flags & TDB_VERSION1) {
+ tdb1_transaction_cancel(tdb);
+ return;
+ }
tdb->stats.transaction_cancel++;
_tdb_transaction_cancel(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);
}
int i;
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) {
return tdb->last_error = tdb_logerr(tdb, TDB_ERR_EINVAL,
TDB_LOG_USE_ERROR,