|
@@ -21,6 +21,7 @@
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
#include <ccan/tdb/tdb.h>
|
|
#include <ccan/tdb/tdb.h>
|
|
|
|
|
+#include <ccan/hash/hash.h>
|
|
|
#include <stdlib.h>
|
|
#include <stdlib.h>
|
|
|
#include <stdio.h>
|
|
#include <stdio.h>
|
|
|
#include <ctype.h>
|
|
#include <ctype.h>
|
|
@@ -45,6 +46,7 @@ static int disable_mmap;
|
|
|
enum commands {
|
|
enum commands {
|
|
|
CMD_CREATE_TDB,
|
|
CMD_CREATE_TDB,
|
|
|
CMD_OPEN_TDB,
|
|
CMD_OPEN_TDB,
|
|
|
|
|
+ CMD_OPENJH_TDB,
|
|
|
CMD_TRANSACTION_START,
|
|
CMD_TRANSACTION_START,
|
|
|
CMD_TRANSACTION_COMMIT,
|
|
CMD_TRANSACTION_COMMIT,
|
|
|
CMD_TRANSACTION_CANCEL,
|
|
CMD_TRANSACTION_CANCEL,
|
|
@@ -78,6 +80,7 @@ typedef struct {
|
|
|
COMMAND_TABLE cmd_table[] = {
|
|
COMMAND_TABLE cmd_table[] = {
|
|
|
{"create", CMD_CREATE_TDB},
|
|
{"create", CMD_CREATE_TDB},
|
|
|
{"open", CMD_OPEN_TDB},
|
|
{"open", CMD_OPEN_TDB},
|
|
|
|
|
+ {"openjh", CMD_OPENJH_TDB},
|
|
|
{"transaction_start", CMD_TRANSACTION_START},
|
|
{"transaction_start", CMD_TRANSACTION_START},
|
|
|
{"transaction_commit", CMD_TRANSACTION_COMMIT},
|
|
{"transaction_commit", CMD_TRANSACTION_COMMIT},
|
|
|
{"transaction_cancel", CMD_TRANSACTION_CANCEL},
|
|
{"transaction_cancel", CMD_TRANSACTION_CANCEL},
|
|
@@ -189,6 +192,7 @@ static void help(void)
|
|
|
"tdbtool: \n"
|
|
"tdbtool: \n"
|
|
|
" create dbname : create a database\n"
|
|
" create dbname : create a database\n"
|
|
|
" open dbname : open an existing database\n"
|
|
" open dbname : open an existing database\n"
|
|
|
|
|
+" openjh dbname : open an existing database (jenkins hash)\n"
|
|
|
" transaction_start : start a transaction\n"
|
|
" transaction_start : start a transaction\n"
|
|
|
" transaction_commit : commit a transaction\n"
|
|
" transaction_commit : commit a transaction\n"
|
|
|
" transaction_cancel : cancel a transaction\n"
|
|
" transaction_cancel : cancel a transaction\n"
|
|
@@ -232,14 +236,19 @@ static void create_tdb(const char *tdbname)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static void open_tdb(const char *tdbname)
|
|
|
|
|
|
|
+static unsigned int jenkins_hash(TDB_DATA *key)
|
|
|
|
|
+{
|
|
|
|
|
+ return hash_any(key->dptr, key->dsize, 0);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+static void open_tdb(const char *tdbname, tdb_hash_func hashfn)
|
|
|
{
|
|
{
|
|
|
struct tdb_logging_context log_ctx;
|
|
struct tdb_logging_context log_ctx;
|
|
|
log_ctx.log_fn = tdb_log;
|
|
log_ctx.log_fn = tdb_log;
|
|
|
|
|
|
|
|
if (tdb) tdb_close(tdb);
|
|
if (tdb) tdb_close(tdb);
|
|
|
tdb = tdb_open_ex(tdbname, 0, disable_mmap?TDB_NOMMAP:0, O_RDWR, 0600,
|
|
tdb = tdb_open_ex(tdbname, 0, disable_mmap?TDB_NOMMAP:0, O_RDWR, 0600,
|
|
|
- &log_ctx, NULL);
|
|
|
|
|
|
|
+ &log_ctx, hashfn);
|
|
|
if (!tdb) {
|
|
if (!tdb) {
|
|
|
printf("Could not open %s: %s\n", tdbname, strerror(errno));
|
|
printf("Could not open %s: %s\n", tdbname, strerror(errno));
|
|
|
}
|
|
}
|
|
@@ -577,7 +586,11 @@ static int do_command(void)
|
|
|
return 0;
|
|
return 0;
|
|
|
case CMD_OPEN_TDB:
|
|
case CMD_OPEN_TDB:
|
|
|
bIterate = 0;
|
|
bIterate = 0;
|
|
|
- open_tdb(arg1);
|
|
|
|
|
|
|
+ open_tdb(arg1, NULL);
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ case CMD_OPENJH_TDB:
|
|
|
|
|
+ bIterate = 0;
|
|
|
|
|
+ open_tdb(arg1, jenkins_hash);
|
|
|
return 0;
|
|
return 0;
|
|
|
case CMD_SYSTEM:
|
|
case CMD_SYSTEM:
|
|
|
/* Shell command */
|
|
/* Shell command */
|
|
@@ -673,6 +686,7 @@ static int do_command(void)
|
|
|
return 0;
|
|
return 0;
|
|
|
case CMD_CREATE_TDB:
|
|
case CMD_CREATE_TDB:
|
|
|
case CMD_OPEN_TDB:
|
|
case CMD_OPEN_TDB:
|
|
|
|
|
+ case CMD_OPENJH_TDB:
|
|
|
case CMD_SYSTEM:
|
|
case CMD_SYSTEM:
|
|
|
case CMD_QUIT:
|
|
case CMD_QUIT:
|
|
|
/*
|
|
/*
|