svn commit: samba r9738 - branches/SAMBA_3_0/source/tdb trunk/source/tdb

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


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;
 }



More information about the samba-cvs mailing list