Author: vlendec
Date: 2005-08-29 13:45:13 +0000 (Mon, 29 Aug 2005)
New Revision: 9738

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9738

Log:
Adapt tdb_torture to the new CLEAR_IF_FIRST semantics. We need one parent
process holding the active if two cluster nodes access the same tdb.

Volker

Modified:
   branches/SAMBA_3_0/source/tdb/tdbtorture.c
   trunk/source/tdb/tdbtorture.c


Changeset:
Modified: branches/SAMBA_3_0/source/tdb/tdbtorture.c
===================================================================
--- branches/SAMBA_3_0/source/tdb/tdbtorture.c  2005-08-29 13:22:34 UTC (rev 
9737)
+++ branches/SAMBA_3_0/source/tdb/tdbtorture.c  2005-08-29 13:45:13 UTC (rev 
9738)
@@ -183,45 +183,45 @@
        int loops = NLOOPS;
        pid_t pids[NPROC];
 
-       pids[0] = getpid();
-
-       for (i=0;i<NPROC-1;i++) {
-               if ((pids[i+1]=fork()) == 0) break;
-       }
-
-       db = tdb_open("torture.tdb", 2, TDB_CLEAR_IF_FIRST, 
+       db = tdb_open("torture.tdb", 0, TDB_CLEAR_IF_FIRST, 
                      O_RDWR | O_CREAT, 0600);
        if (!db) {
                fatal("db open failed");
        }
-       tdb_logging_function(db, tdb_log);
 
-       srand(seed + getpid());
-       srandom(seed + getpid() + time(NULL));
-       for (i=0;i<loops;i++) addrec_db();
+       for (i=0;i<NPROC;i++) {
+               pids[i] = fork();
+               if (pids[i] == 0) {
+                       tdb_reopen_all();
 
-       tdb_traverse(db, NULL, NULL);
-       tdb_traverse(db, traverse_fn, NULL);
-       tdb_traverse(db, traverse_fn, NULL);
+                       tdb_logging_function(db, tdb_log);
 
-       tdb_close(db);
+                       srand(seed + getpid());
+                       srandom(seed + getpid() + time(NULL));
+                       for (i=0;i<loops;i++) addrec_db();
 
-       if (getpid() == pids[0]) {
-               for (i=0;i<NPROC-1;i++) {
-                       int status;
-                       if (waitpid(pids[i+1], &status, 0) != pids[i+1]) {
-                               printf("failed to wait for %d\n",
-                                      (int)pids[i+1]);
-                               exit(1);
-                       }
-                       if (WEXITSTATUS(status) != 0) {
-                               printf("child %d exited with status %d\n",
-                                      (int)pids[i+1], WEXITSTATUS(status));
-                               exit(1);
-                       }
+                       tdb_traverse(db, NULL, NULL);
+                       tdb_traverse(db, traverse_fn, NULL);
+                       tdb_traverse(db, traverse_fn, NULL);
+
+                       tdb_close(db);
+                       exit(0);
                }
-               printf("OK\n");
        }
 
+       for (i=0;i<NPROC;i++) {
+               int status;
+               if (waitpid(pids[i], &status, 0) != pids[i]) {
+                       printf("failed to wait for %d\n",
+                              (int)pids[i]);
+                       exit(1);
+               }
+               if (WEXITSTATUS(status) != 0) {
+                       printf("child %d exited with status %d\n",
+                              (int)pids[i], WEXITSTATUS(status));
+                       exit(1);
+               }
+       }
+       printf("OK\n");
        return 0;
 }

Modified: trunk/source/tdb/tdbtorture.c
===================================================================
--- trunk/source/tdb/tdbtorture.c       2005-08-29 13:22:34 UTC (rev 9737)
+++ trunk/source/tdb/tdbtorture.c       2005-08-29 13:45:13 UTC (rev 9738)
@@ -183,45 +183,45 @@
        int loops = NLOOPS;
        pid_t pids[NPROC];
 
-       pids[0] = getpid();
-
-       for (i=0;i<NPROC-1;i++) {
-               if ((pids[i+1]=fork()) == 0) break;
-       }
-
-       db = tdb_open("torture.tdb", 2, TDB_CLEAR_IF_FIRST, 
+       db = tdb_open("torture.tdb", 0, TDB_CLEAR_IF_FIRST, 
                      O_RDWR | O_CREAT, 0600);
        if (!db) {
                fatal("db open failed");
        }
-       tdb_logging_function(db, tdb_log);
 
-       srand(seed + getpid());
-       srandom(seed + getpid() + time(NULL));
-       for (i=0;i<loops;i++) addrec_db();
+       for (i=0;i<NPROC;i++) {
+               pids[i] = fork();
+               if (pids[i] == 0) {
+                       tdb_reopen_all();
 
-       tdb_traverse(db, NULL, NULL);
-       tdb_traverse(db, traverse_fn, NULL);
-       tdb_traverse(db, traverse_fn, NULL);
+                       tdb_logging_function(db, tdb_log);
 
-       tdb_close(db);
+                       srand(seed + getpid());
+                       srandom(seed + getpid() + time(NULL));
+                       for (i=0;i<loops;i++) addrec_db();
 
-       if (getpid() == pids[0]) {
-               for (i=0;i<NPROC-1;i++) {
-                       int status;
-                       if (waitpid(pids[i+1], &status, 0) != pids[i+1]) {
-                               printf("failed to wait for %d\n",
-                                      (int)pids[i+1]);
-                               exit(1);
-                       }
-                       if (WEXITSTATUS(status) != 0) {
-                               printf("child %d exited with status %d\n",
-                                      (int)pids[i+1], WEXITSTATUS(status));
-                               exit(1);
-                       }
+                       tdb_traverse(db, NULL, NULL);
+                       tdb_traverse(db, traverse_fn, NULL);
+                       tdb_traverse(db, traverse_fn, NULL);
+
+                       tdb_close(db);
+                       exit(0);
                }
-               printf("OK\n");
        }
 
+       for (i=0;i<NPROC;i++) {
+               int status;
+               if (waitpid(pids[i], &status, 0) != pids[i]) {
+                       printf("failed to wait for %d\n",
+                              (int)pids[i]);
+                       exit(1);
+               }
+               if (WEXITSTATUS(status) != 0) {
+                       printf("child %d exited with status %d\n",
+                              (int)pids[i], WEXITSTATUS(status));
+                       exit(1);
+               }
+       }
+       printf("OK\n");
        return 0;
 }

Reply via email to