[SCM] Samba Shared Repository - branch master updated

Andrew Bartlett abartlet at samba.org
Tue Aug 21 05:13:03 MDT 2012


The branch, master has been updated
       via  ebb776f selftest: Add tests for vfs_aio_fork
       via  e79ed4f s3-vfs: Make vfs_aio_fork erratic timing behaviour a run-time option
      from  a817959 build: Create bin/ when doing 'waf dist' from a fresh checkout

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ebb776f51f697ece62ed5c7ee6aa4865397347c2
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Aug 21 19:22:54 2012 +1000

    selftest: Add tests for vfs_aio_fork
    
    Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
    Autobuild-Date(master): Tue Aug 21 13:12:33 CEST 2012 on sn-devel-104

commit e79ed4fe72208e632cd980d4adec07f1c78f1511
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Aug 21 19:22:37 2012 +1000

    s3-vfs: Make vfs_aio_fork erratic timing behaviour a run-time option
    
    This will allow this to be tested as part of a normal selftest.
    
    Andrew Bartlett

-----------------------------------------------------------------------

Summary of changes:
 selftest/target/Samba3.pm      |    8 ++++++
 source3/modules/vfs_aio_fork.c |   49 +++++++++++++++++++++++++++++++++++----
 source3/selftest/tests.py      |    4 +++
 3 files changed, 56 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
index 31bd15b..cb11827 100755
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -344,10 +344,18 @@ sub setup_secshare($$)
 
 	print "PROVISIONING server with security=share...";
 
+	my $prefix_abs = abs_path($path);
+
 	my $secshare_options = "
 	security = share
 	lanman auth = yes
 	vfs objects = $vfs_modulesdir_abs/xattr_tdb.so $vfs_modulesdir_abs/streams_depot.so
+
+[vfs_aio_fork]
+	path = $prefix_abs/share
+        vfs objects = $vfs_modulesdir_abs/aio_fork.so
+        read only = no
+        vfs_aio_fork:erratic_testing_mode=yes
 ";
 
 	my $vars = $self->provision($path,
diff --git a/source3/modules/vfs_aio_fork.c b/source3/modules/vfs_aio_fork.c
index 811d44e..2ec3d3d 100644
--- a/source3/modules/vfs_aio_fork.c
+++ b/source3/modules/vfs_aio_fork.c
@@ -33,6 +33,10 @@
 #define MAP_FILE 0
 #endif
 
+struct aio_fork_config {
+	bool erratic_testing_mode;
+};
+
 struct mmap_area {
 	size_t size;
 	volatile void *ptr;
@@ -112,6 +116,7 @@ struct rw_cmd {
 	size_t n;
 	off_t offset;
 	enum cmd_type cmd;
+	bool erratic_testing_mode;
 };
 
 struct rw_ret {
@@ -355,8 +360,7 @@ static void aio_child_loop(int sockfd, struct mmap_area *map)
 			   cmd_type_str(cmd_struct.cmd),
 			   (int)cmd_struct.n, (int)cmd_struct.offset, fd));
 
-#ifdef DEVELOPER
-		{
+		if (cmd_struct.erratic_testing_mode) {
 			/*
 			 * For developer testing, we want erratic behaviour for
 			 * async I/O times
@@ -372,8 +376,6 @@ static void aio_child_loop(int sockfd, struct mmap_area *map)
 			DEBUG(10, ("delaying for %u msecs\n", msecs));
 			smb_msleep(msecs);
 		}
-#endif
-
 
 		ZERO_STRUCT(ret_struct);
 
@@ -587,6 +589,10 @@ static struct tevent_req *aio_fork_pread_send(struct vfs_handle_struct *handle,
 	struct rw_cmd cmd;
 	ssize_t written;
 	int err;
+	struct aio_fork_config *config;
+	SMB_VFS_HANDLE_GET_DATA(handle, config,
+				struct aio_fork_config,
+				return -1);
 
 	req = tevent_req_create(mem_ctx, &state, struct aio_fork_pread_state);
 	if (req == NULL) {
@@ -609,6 +615,7 @@ static struct tevent_req *aio_fork_pread_send(struct vfs_handle_struct *handle,
 	cmd.n = n;
 	cmd.offset = offset;
 	cmd.cmd = READ_CMD;
+	cmd.erratic_testing_mode = config->erratic_testing_mode;
 
 	DEBUG(10, ("sending fd %d to child %d\n", fsp->fh->fd,
 		   (int)state->child->pid));
@@ -698,6 +705,10 @@ static struct tevent_req *aio_fork_pwrite_send(
 	struct rw_cmd cmd;
 	ssize_t written;
 	int err;
+	struct aio_fork_config *config;
+	SMB_VFS_HANDLE_GET_DATA(handle, config,
+				struct aio_fork_config,
+				return NULL);
 
 	req = tevent_req_create(mem_ctx, &state, struct aio_fork_pwrite_state);
 	if (req == NULL) {
@@ -720,6 +731,7 @@ static struct tevent_req *aio_fork_pwrite_send(
 	cmd.n = n;
 	cmd.offset = offset;
 	cmd.cmd = WRITE_CMD;
+	cmd.erratic_testing_mode = config->erratic_testing_mode;
 
 	DEBUG(10, ("sending fd %d to child %d\n", fsp->fh->fd,
 		   (int)state->child->pid));
@@ -808,6 +820,10 @@ static struct tevent_req *aio_fork_fsync_send(
 	struct rw_cmd cmd;
 	ssize_t written;
 	int err;
+	struct aio_fork_config *config;
+	SMB_VFS_HANDLE_GET_DATA(handle, config,
+				struct aio_fork_config,
+				return -1);
 
 	req = tevent_req_create(mem_ctx, &state, struct aio_fork_fsync_state);
 	if (req == NULL) {
@@ -822,6 +838,7 @@ static struct tevent_req *aio_fork_fsync_send(
 
 	ZERO_STRUCT(cmd);
 	cmd.cmd = FSYNC_CMD;
+	cmd.erratic_testing_mode = config->erratic_testing_mode;
 
 	DEBUG(10, ("sending fd %d to child %d\n", fsp->fh->fd,
 		   (int)state->child->pid));
@@ -896,6 +913,28 @@ static int aio_fork_fsync_recv(struct tevent_req *req, int *err)
 static int aio_fork_connect(vfs_handle_struct *handle, const char *service,
 			    const char *user)
 {
+	int ret;
+	struct aio_fork_config *config;
+	ret = SMB_VFS_NEXT_CONNECT(handle, service, user);
+
+	if (ret < 0) {
+		return ret;
+	}
+
+	config = talloc_zero(handle->conn, struct aio_fork_config);
+	if (!config) {
+		SMB_VFS_NEXT_DISCONNECT(handle);
+		DEBUG(0, ("talloc_zero() failed\n"));
+		return -1;
+	}
+
+	config->erratic_testing_mode = lp_parm_bool(SNUM(handle->conn), "vfs_aio_fork",
+						    "erratic_testing_mode", false);
+	
+	SMB_VFS_HANDLE_SET_DATA(handle, config,
+				NULL, struct aio_fork_config,
+				return -1);
+
 	/*********************************************************************
 	 * How many threads to initialize ?
 	 * 100 per process seems insane as a default until you realize that
@@ -907,7 +946,7 @@ static int aio_fork_connect(vfs_handle_struct *handle, const char *service,
 	 * says different.
 	 *********************************************************************/
 	aio_pending_size = 100;
-	return SMB_VFS_NEXT_CONNECT(handle, service, user);
+	return 0;
 }
 
 static struct vfs_fn_pointers vfs_aio_fork_fns = {
diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py
index f9f2e22..2e13ca0 100755
--- a/source3/selftest/tests.py
+++ b/source3/selftest/tests.py
@@ -102,6 +102,10 @@ for t in tests:
         plantestsuite("samba3.smbtorture_s3.crypt_server(s3dc).%s" % t, "s3dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmpenc', '$USERNAME', '$PASSWORD', smbtorture3, "", "-l $LOCAL_PATH"])
     plantestsuite("samba3.smbtorture_s3.plain(dc).%s" % t, "dc", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/tmp', '$USERNAME', '$PASSWORD', smbtorture3, "", "-l $LOCAL_PATH"])
 
+tests = ["RW1", "RW2", "RW3"]
+for t in tests:
+    plantestsuite("samba3.smbtorture_s3.vfs_aio_fork(secshare).%s" % t, "secshare", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/vfs_aio_fork', '$USERNAME', '$PASSWORD', smbtorture3, "", "-l $LOCAL_PATH"])
+
 posix_tests=[ "POSIX", "POSIX-APPEND"]
 
 for t in posix_tests:


-- 
Samba Shared Repository


More information about the samba-cvs mailing list