svn commit: samba r9737 - in branches/tmp/vl-cluster/source/tdb: .

vlendec at samba.org vlendec at samba.org
Mon Aug 29 13:22:34 GMT 2005


Author: vlendec
Date: 2005-08-29 13:22:34 +0000 (Mon, 29 Aug 2005)
New Revision: 9737

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

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.

For consistency, this might be stuff to merge to 3_0 and trunk.

Comments?

Volker

Modified:
   branches/tmp/vl-cluster/source/tdb/tdbtorture.c


Changeset:
Modified: branches/tmp/vl-cluster/source/tdb/tdbtorture.c
===================================================================
--- branches/tmp/vl-cluster/source/tdb/tdbtorture.c	2005-08-29 13:10:20 UTC (rev 9736)
+++ branches/tmp/vl-cluster/source/tdb/tdbtorture.c	2005-08-29 13:22:34 UTC (rev 9737)
@@ -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;
 }



More information about the samba-cvs mailing list