tdb/tools: add -m option to tdbtorture
authorVolker Lendecke <vl@samba.org>
Thu, 21 Feb 2013 15:34:32 +0000 (16:34 +0100)
committerJeremy Allison <jra@samba.org>
Thu, 22 May 2014 19:05:15 +0000 (21:05 +0200)
This allows tdbtorture to run with mutexes.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/tdb/tools/tdbtorture.c

index 5ae08f662a9ac350e91ba24e69b00c031cf48acf..3e26f65242b5da5970ba23f5aca63f6407ebd860 100644 (file)
@@ -33,6 +33,7 @@ static int always_transaction = 0;
 static int hash_size = 2;
 static int loopnum;
 static int count_pipe;
+static bool mutex = false;
 static struct tdb_logging_context log_ctx;
 
 #ifdef PRINTF_ATTRIBUTE
@@ -119,6 +120,7 @@ static void addrec_db(void)
 
 #if TRANSACTION_PROB
        if (in_transaction == 0 &&
+           ((tdb_get_flags(db) & TDB_MUTEX_LOCKING) == 0) &&
            (always_transaction || random() % TRANSACTION_PROB == 0)) {
                if (tdb_transaction_start(db) != 0) {
                        fatal("tdb_transaction_start failed");
@@ -216,7 +218,7 @@ static int traverse_fn(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf,
 
 static void usage(void)
 {
-       printf("Usage: tdbtorture [-t] [-k] [-n NUM_PROCS] [-l NUM_LOOPS] [-s SEED] [-H HASH_SIZE]\n");
+       printf("Usage: tdbtorture [-t] [-k] [-m] [-n NUM_PROCS] [-l NUM_LOOPS] [-s SEED] [-H HASH_SIZE]\n");
        exit(0);
 }
 
@@ -230,7 +232,13 @@ static void send_count_and_suicide(int sig)
 
 static int run_child(const char *filename, int i, int seed, unsigned num_loops, unsigned start)
 {
-       db = tdb_open_ex(filename, hash_size, TDB_DEFAULT,
+       int tdb_flags = TDB_DEFAULT|TDB_CLEAR_IF_FIRST|TDB_INCOMPATIBLE_HASH;
+
+       if (mutex) {
+               tdb_flags |= TDB_MUTEX_LOCKING;
+       }
+
+       db = tdb_open_ex(filename, hash_size, tdb_flags,
                         O_RDWR | O_CREAT, 0600, &log_ctx, NULL);
        if (!db) {
                fatal("db open failed");
@@ -302,7 +310,7 @@ int main(int argc, char * const *argv)
 
        log_ctx.log_fn = tdb_log;
 
-       while ((c = getopt(argc, argv, "n:l:s:H:thk")) != -1) {
+       while ((c = getopt(argc, argv, "n:l:s:H:thkm")) != -1) {
                switch (c) {
                case 'n':
                        num_procs = strtol(optarg, NULL, 0);
@@ -322,6 +330,13 @@ int main(int argc, char * const *argv)
                case 'k':
                        kill_random = 1;
                        break;
+               case 'm':
+                       mutex = tdb_runtime_check_for_robust_mutexes();
+                       if (!mutex) {
+                               printf("tdb_runtime_check_for_robust_mutexes() returned false\n");
+                               exit(1);
+                       }
+                       break;
                default:
                        usage();
                }
@@ -443,7 +458,13 @@ int main(int argc, char * const *argv)
 
 done:
        if (error_count == 0) {
-               db = tdb_open_ex(test_tdb, hash_size, TDB_DEFAULT,
+               int tdb_flags = TDB_DEFAULT;
+
+               if (mutex) {
+                       tdb_flags |= TDB_NOLOCK;
+               }
+
+               db = tdb_open_ex(test_tdb, hash_size, tdb_flags,
                                 O_RDWR, 0, &log_ctx, NULL);
                if (!db) {
                        fatal("db open failed\n");