Commit 57359c26 authored by Rusty Russell's avatar Rusty Russell

tdb2: unify tdb1_get_seqnum/tdb1_increment_seqnum into tdb_get_seqnum/tdb_inc_seqnum

Switch on the TDB_VERSION1 flag.
parent 7366486e
......@@ -584,6 +584,11 @@ void tdb_inc_seqnum(struct tdb_context *tdb)
{
tdb_off_t seq;
if (tdb->flags & TDB_VERSION1) {
tdb1_increment_seqnum_nonblock(tdb);
return;
}
if (likely(!(tdb->flags & TDB_CONVERT))) {
int64_t *direct;
......
......@@ -679,6 +679,8 @@ enum TDB_ERROR tdb1_parse_record(struct tdb_context *tdb, TDB_DATA key,
TDB_DATA data,
void *private_data),
void *private_data);
void tdb1_increment_seqnum_nonblock(struct tdb_context *tdb);
int tdb1_get_seqnum(struct tdb_context *tdb);
/* tdb1_transaction.c: */
int tdb1_transaction_start(struct tdb_context *tdb);
......
......@@ -563,7 +563,20 @@ const char *tdb_name(const struct tdb_context *tdb)
int64_t tdb_get_seqnum(struct tdb_context *tdb)
{
tdb_off_t off = tdb_read_off(tdb, offsetof(struct tdb_header, seqnum));
tdb_off_t off;
if (tdb->flags & TDB_VERSION1) {
tdb1_off_t val;
tdb->last_error = TDB_SUCCESS;
val = tdb1_get_seqnum(tdb);
if (tdb->last_error != TDB_SUCCESS)
return tdb->last_error;
else
return val;
}
off = tdb_read_off(tdb, offsetof(struct tdb_header, seqnum));
if (TDB_OFF_IS_ERR(off))
tdb->last_error = off;
else
......
......@@ -38,10 +38,6 @@
void tdb1_set_max_dead(struct tdb_context *tdb, int max_dead);
int tdb1_get_seqnum(struct tdb_context *tdb);
void tdb1_increment_seqnum_nonblock(struct tdb_context *tdb);
uint64_t tdb1_incompatible_hash(const void *key, size_t len, uint64_t seed, void *);
/* @} ******************************************************************/
......
#include "tdb2-source.h"
#include <ccan/tap/tap.h>
#include <stdlib.h>
#include <err.h>
#include "logging.h"
int main(int argc, char *argv[])
{
struct tdb_context *tdb;
unsigned int i;
struct tdb1_header hdr;
struct tdb_data key = { (unsigned char *)&hdr, sizeof(hdr) };
struct tdb_data data = { (unsigned char *)&hdr, sizeof(hdr) };
int flags[] = { TDB_DEFAULT, TDB_NOMMAP,
TDB_CONVERT, TDB_NOMMAP|TDB_CONVERT };
plan_tests(sizeof(flags) / sizeof(flags[0]) * 7);
for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
tdb = tdb_open("run-tdb1-seqnum-wrap.tdb1",
flags[i]|TDB_VERSION1|TDB_SEQNUM,
O_RDWR|O_CREAT|O_TRUNC, 0600, &tap_log_attr);
ok1(tdb);
if (!tdb)
break;
ok1(pread(tdb->file->fd, &hdr, sizeof(hdr), 0) == sizeof(hdr));
hdr.sequence_number = 0xFFFFFFFF;
ok1(pwrite(tdb->file->fd, &hdr, sizeof(hdr), 0) == sizeof(hdr));
/* Must not be negative: that would mean an error! */
ok1(tdb_get_seqnum(tdb) == 0xFFFFFFFF);
ok1(tdb_store(tdb, key, data, TDB_INSERT) == TDB_SUCCESS);
ok1(tdb_get_seqnum(tdb) == 0);
tdb_close(tdb);
ok1(tap_log_messages == 0);
}
return exit_status();
}
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