diff options
Diffstat (limited to 'ctdb/lib/tdb/tools/tdbtool.c')
-rw-r--r-- | ctdb/lib/tdb/tools/tdbtool.c | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/ctdb/lib/tdb/tools/tdbtool.c b/ctdb/lib/tdb/tools/tdbtool.c index b380883e0a..dc5747f87a 100644 --- a/ctdb/lib/tdb/tools/tdbtool.c +++ b/ctdb/lib/tdb/tools/tdbtool.c @@ -61,6 +61,7 @@ enum commands { CMD_NEXT, CMD_SYSTEM, CMD_CHECK, + CMD_REPACK, CMD_QUIT, CMD_HELP }; @@ -98,6 +99,7 @@ COMMAND_TABLE cmd_table[] = { {"quit", CMD_QUIT}, {"q", CMD_QUIT}, {"!", CMD_SYSTEM}, + {"repack", CMD_REPACK}, {NULL, CMD_HELP} }; @@ -203,6 +205,7 @@ static void help(void) " list : print the database hash table and freelist\n" " free : print the database freelist\n" " check : check the integrity of an opened database\n" +" repack : repack the database\n" " speed : perform speed tests on the database\n" " ! command : execute system command\n" " 1 | first : print the first record\n" @@ -257,7 +260,7 @@ static void insert_tdb(char *keyname, size_t keylen, char* data, size_t datalen) dbuf.dptr = (unsigned char *)data; dbuf.dsize = datalen; - if (tdb_store(tdb, key, dbuf, TDB_INSERT) == -1) { + if (tdb_store(tdb, key, dbuf, TDB_INSERT) != 0) { terror("insert failed"); } } @@ -284,7 +287,7 @@ static void store_tdb(char *keyname, size_t keylen, char* data, size_t datalen) printf("Storing key:\n"); print_rec(tdb, key, dbuf, NULL); - if (tdb_store(tdb, key, dbuf, TDB_REPLACE) == -1) { + if (tdb_store(tdb, key, dbuf, TDB_REPLACE) != 0) { terror("store failed"); } } @@ -363,7 +366,7 @@ static void move_rec(char *keyname, size_t keylen, char* tdbname) return; } - if ( tdb_store( dst_tdb, key, dbuf, TDB_REPLACE ) == -1 ) { + if (tdb_store( dst_tdb, key, dbuf, TDB_REPLACE ) != 0) { terror("failed to move record"); } else @@ -409,12 +412,14 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA key, TDB_DATA dbuf, void * static void info_tdb(void) { - int count; - total_bytes = 0; - if ((count = tdb_traverse(tdb, traverse_fn, NULL)) == -1) + char *summary = tdb_summary(tdb); + + if (!summary) { printf("Error = %s\n", tdb_errorstr(tdb)); - else - printf("%d records totalling %d bytes\n", count, total_bytes); + } else { + printf("%s", summary); + free(summary); + } } static void speed_tdb(const char *tlimit) @@ -445,12 +450,9 @@ static void speed_tdb(const char *tlimit) printf("Testing fetch speed for %u seconds\n", timelimit); _start_timer(); do { - long int r = random(); - TDB_DATA key, dbuf; + TDB_DATA key; key.dptr = discard_const_p(uint8_t, str); key.dsize = strlen((char *)key.dptr); - dbuf.dptr = (uint8_t *) &r; - dbuf.dsize = sizeof(r); tdb_fetch(tdb, key); t = _end_timer(); ops++; @@ -538,9 +540,9 @@ static void next_record(TDB_CONTEXT *the_tdb, TDB_DATA *pkey) print_rec(the_tdb, *pkey, dbuf, NULL); } -static int count(TDB_DATA key, TDB_DATA data, void *private) +static int count(TDB_DATA key, TDB_DATA data, void *private_data) { - (*(unsigned int *)private)++; + (*(unsigned int *)private_data)++; return 0; } @@ -609,6 +611,10 @@ static int do_command(void) bIterate = 0; tdb_transaction_commit(tdb); return 0; + case CMD_REPACK: + bIterate = 0; + tdb_repack(tdb); + return 0; case CMD_TRANSACTION_CANCEL: bIterate = 0; tdb_transaction_cancel(tdb); @@ -691,7 +697,7 @@ static int do_command(void) return 0; } -static char *convert_string(char *instring, size_t *sizep) +static char *tdb_convert_string(char *instring, size_t *sizep) { size_t length = 0; char *outp, *inp; @@ -757,15 +763,15 @@ int main(int argc, char *argv[]) } } } - if (arg1) arg1 = convert_string(arg1,&arg1len); - if (arg2) arg2 = convert_string(arg2,&arg2len); + if (arg1) arg1 = tdb_convert_string(arg1,&arg1len); + if (arg2) arg2 = tdb_convert_string(arg2,&arg2len); if (do_command()) break; } break; case 5: - arg2 = convert_string(argv[4],&arg2len); + arg2 = tdb_convert_string(argv[4],&arg2len); case 4: - arg1 = convert_string(argv[3],&arg1len); + arg1 = tdb_convert_string(argv[3],&arg1len); case 3: cmdname = argv[2]; default: |