Commit 46d8f620 authored by Rusty Russell's avatar Rusty Russell

tdb2: tdb_summary() implementation for tdb2.

parent 8a462e5a
......@@ -78,6 +78,7 @@ int main(int argc, char *argv[])
printf("ccan/likely\n");
printf("ccan/asearch\n");
printf("ccan/build_assert\n");
printf("ccan/tally\n");
return 0;
}
......
This diff is collapsed.
......@@ -63,6 +63,9 @@ enum TDB_ERROR {TDB_SUCCESS=0, TDB_ERR_CORRUPT, TDB_ERR_IO, TDB_ERR_LOCK,
TDB_ERR_OOM, TDB_ERR_EXISTS, TDB_ERR_NOEXIST,
TDB_ERR_EINVAL, TDB_ERR_RDONLY, TDB_ERR_NESTING };
/* flags for tdb_summary. Logical or to combine. */
enum tdb_summary_flags { TDB_SUMMARY_HISTOGRAMS = 1 };
/* debugging uses one of the following levels */
enum tdb_debug_level {TDB_DEBUG_FATAL = 0, TDB_DEBUG_ERROR,
TDB_DEBUG_WARNING, TDB_DEBUG_TRACE};
......@@ -143,6 +146,8 @@ int tdb_check(struct tdb_context *tdb,
enum TDB_ERROR tdb_error(struct tdb_context *tdb);
const char *tdb_errorstr(struct tdb_context *tdb);
char *tdb_summary(struct tdb_context *tdb, enum tdb_summary_flags flags);
extern struct tdb_data tdb_null;
#ifdef __cplusplus
......
#include <ccan/tdb2/tdb.c>
#include <ccan/tdb2/free.c>
#include <ccan/tdb2/lock.c>
#include <ccan/tdb2/io.c>
#include <ccan/tdb2/hash.c>
#include <ccan/tdb2/check.c>
#include <ccan/tdb2/summary.c>
#include <ccan/tap/tap.h>
#include "logging.h"
int main(int argc, char *argv[])
{
unsigned int i, j;
struct tdb_context *tdb;
int flags[] = { TDB_INTERNAL, TDB_DEFAULT, TDB_NOMMAP,
TDB_INTERNAL|TDB_CONVERT, TDB_CONVERT,
TDB_NOMMAP|TDB_CONVERT };
struct tdb_data key = { (unsigned char *)&j, sizeof(j) };
struct tdb_data data = { (unsigned char *)&j, sizeof(j) };
char *summary;
plan_tests(sizeof(flags) / sizeof(flags[0]) * (1 + 2 * 7) + 1);
for (i = 0; i < sizeof(flags) / sizeof(flags[0]); i++) {
tdb = tdb_open("run-summary.tdb", flags[i],
O_RDWR|O_CREAT|O_TRUNC, 0600, &tap_log_attr);
ok1(tdb);
if (!tdb)
continue;
/* Put some stuff in there. */
for (j = 0; j < 500; j++)
if (tdb_store(tdb, key, data, TDB_REPLACE) != 0)
fail("Storing in tdb");
for (j = 0;
j <= TDB_SUMMARY_HISTOGRAMS;
j += TDB_SUMMARY_HISTOGRAMS) {
summary = tdb_summary(tdb, j);
ok1(strstr(summary, "Number of records: 500\n"));
ok1(strstr(summary, "Smallest/average/largest keys: 4/4/4\n"));
ok1(strstr(summary, "Smallest/average/largest data: 4/4/4\n"));
ok1(strstr(summary, "Free bucket 8"));
ok1(strstr(summary, "Free bucket 16"));
ok1(strstr(summary, "Free bucket 24"));
if (j == TDB_SUMMARY_HISTOGRAMS)
ok1(strstr(summary, "|")
&& strstr(summary, "*"));
else
ok1(!strstr(summary, "|")
&& !strstr(summary, "*"));
free(summary);
}
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