[Ocfs2-test-devel] [PATCH 1/2] Ocfs2-test: Adjust verify_file() properly in directio_test for multi-node test.

Tristan Ye tristan.ye at oracle.com
Mon Oct 11 02:23:50 PDT 2010


Verification for file among nodes will be using a in-memory list to store
the writing records.

Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
---
 programs/directio_test/directio.h       |    4 +++-
 programs/directio_test/directio_test.c  |    2 +-
 programs/directio_test/directio_utils.c |   22 ++++++++++++++++------
 3 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/programs/directio_test/directio.h b/programs/directio_test/directio.h
index 68e50f5..0c15857 100755
--- a/programs/directio_test/directio.h
+++ b/programs/directio_test/directio.h
@@ -34,6 +34,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <getopt.h>
+#include <stdarg.h>
 
 #include <sys/socket.h>
 #include <netdb.h>
@@ -89,7 +90,8 @@ void prep_rand_dest_write_unit(struct write_unit *wu, unsigned long chunk_no);
 int do_write_chunk(int fd, struct write_unit wu);
 int do_read_chunk(int fd, unsigned long chunk_no, struct write_unit *wu);
 int prep_orig_file_in_chunks(char *file_name, unsigned long filesize);
-int verify_file(FILE *logfile, char *filename, unsigned long filesize);
+int verify_file(int is_remote, FILE *logfile, struct write_unit *wus,
+		char *filename, unsigned long filesize);
 
 int init_sock(char *serv, int port);
 int set_semvalue(int sem_id, int val);
diff --git a/programs/directio_test/directio_test.c b/programs/directio_test/directio_test.c
index a471c0d..7154812 100755
--- a/programs/directio_test/directio_test.c
+++ b/programs/directio_test/directio_test.c
@@ -416,7 +416,7 @@ static int verify_test(void)
 	ret = 
 
 	fprintf(stdout, "# Verify file %s in chunks\n", workfile);
-	ret = verify_file(log.stream_log, workfile, file_size);
+	ret = verify_file(0, log.stream_log, NULL, workfile, file_size);
 
 	return ret;
 }
diff --git a/programs/directio_test/directio_utils.c b/programs/directio_test/directio_utils.c
index da4a1a8..26f5524 100755
--- a/programs/directio_test/directio_utils.c
+++ b/programs/directio_test/directio_utils.c
@@ -354,7 +354,8 @@ int prep_orig_file_in_chunks(char *file_name, unsigned long filesize)
 	return 0;
 }
 
-int verify_file(FILE *logfile, char *filename, unsigned long filesize)
+int verify_file(int is_remote, FILE *logfile, struct write_unit *remote_wus,
+		char *filename, unsigned long filesize)
 {
 	int fd = 0, ret = 0;
 	struct write_unit *wus, wu, ewu;
@@ -368,6 +369,11 @@ int verify_file(FILE *logfile, char *filename, unsigned long filesize)
 	wus = (struct write_unit *)malloc(t_bytes);
 	memset(wus, 0, t_bytes);
 
+	if (is_remote) {
+		memcpy(wus, remote_wus, t_bytes);
+		goto verify_body;
+	}
+
 	for (i = 0; i < num_chunks; i++)
 		wus[i].wu_chunk_no = i;
 
@@ -401,6 +407,7 @@ int verify_file(FILE *logfile, char *filename, unsigned long filesize)
 		}
 	}
 
+verify_body:
 	fd = open_file(filename, open_ro_flags);
 	if (fd < 0)
 		return fd;
@@ -409,21 +416,21 @@ int verify_file(FILE *logfile, char *filename, unsigned long filesize)
 		/*
 		 * Verification consists of two following parts:
 		 *
-		 *    - verify write records in logfile.
-		 *    - verify pattern of chunks absent from logfile.
+		 *    - verify write records.
+		 *    - verify pattern of chunks absent from write records.
 		 */
 		
 		ret = do_read_chunk(fd, i, &wu);
 		if (ret < 0)
 			return ret;
 		/*
-		 * verify pattern of chunks absent from logfile.
+		 * verify pattern of chunks absent from write records.
 		 */
 		if (!wus[i].wu_timestamp) {
 
 			if (verbose)
 				fprintf(stdout, "  verifying #%lu chunk "
-					"out of log\n", i);
+					"out of write records\n", i);
 			/*
 			 * skip holes
 			 */
@@ -454,7 +461,8 @@ int verify_file(FILE *logfile, char *filename, unsigned long filesize)
 		 * verify write records in logfile.
 		 */
 		if (verbose)
-			fprintf(stdout, "  verifying #%lu chunk in log\n", i);
+			fprintf(stdout, "  verifying #%lu chunk in write "
+				"records\n", i);
 
 		if (ret < CHUNK_SIZE) {
 			fprintf(stderr, "Short read(readed:%d, expected:%d)"
@@ -483,6 +491,8 @@ int verify_file(FILE *logfile, char *filename, unsigned long filesize)
 		}
 	}
 
+	ret = 0;
+
 bail:
 	if (wus)
 		free(wus);
-- 
1.5.5




More information about the Ocfs2-test-devel mailing list