[Ocfs2-test-devel] [RFC][PATCH] ocfs2-test: add concurrent flock() test case

Marcos E. Matsunaga Marcos.Matsunaga at oracle.com
Fri Dec 12 06:32:37 PST 2008


Coly,

Can you do just one modification? Make the script accept at least the
directory as argument and make $file be created in the specified
directory. If no directory is passed, fail the script.

Everything else looks fine.

Regards,

Marcos Eduardo Matsunaga

Oracle USA
Linux Engineering

“The statements and opinions expressed here are my own and do not
necessarily represent those of Oracle Corporation.”



Coly Li wrote:
> This script is initialized by Sunil, to verify lockres mastery race in flock(). For further
> information of the lockres mastery race issue, read Novell bugzilla page:
> https://bugzilla.novell.com/show_bug.cgi?id=425491
>
> Sunil, Marcos and Tristan, could you kindly give me a SOB ?
>
> Signed-off-by: Coly Li <coly.li at suse.de>
> ---
>  programs/flock_tests/Makefile                 |    2 +-
>  programs/flock_tests/concurrent_flock_test.pl |   33 +++++++++++++++++++++++++
>  2 files changed, 34 insertions(+), 1 deletions(-)
>
> diff --git a/programs/flock_tests/Makefile b/programs/flock_tests/Makefile
> index 8b6bc5c..82659ec 100644
> --- a/programs/flock_tests/Makefile
> +++ b/programs/flock_tests/Makefile
> @@ -15,7 +15,7 @@ DIST_FILES = $(SOURCES)
>
>  BIN_PROGRAMS = flock_unit_test
>
> -BIN_EXTRA = run_flock_unit_test.py
> +BIN_EXTRA = run_flock_unit_test.py concurrent_flock_test.pl
>
>  flock_unit_test: $(OBJECTS)
>  	$(LINK)
> diff --git a/programs/flock_tests/concurrent_flock_test.pl
> b/programs/flock_tests/concurrent_flock_test.pl
> new file mode 100644
> index 0000000..ac45dfc
> --- /dev/null
> +++ b/programs/flock_tests/concurrent_flock_test.pl
> @@ -0,0 +1,33 @@
> +#!/usr/bin/perl
> +/* the perl script encloses the 20 fork loop into another loop that changes the
> + * filename. To startwith, touch 5000 files(test.flock%d). umount and mount
> + * again. This will drop the caches. Now before running any ls, run flock.pl.
> + * It will spawn 20 processes to flock() each file and wait till the 20 forks
> + * have exited before letting loose another 20 for the next file. (Makesure
> + * you have another node or two or more that have just mounted that volume.).
> + */
> +
> +use warnings;
> +use Fcntl ':flock';
> +
> +$| = 1;
> +
> +for (my $y = 0; $y < 5000; $y ++) {
> +	/* modify path here for your environment */
> +	$file = '/ocfs2/test.lock' . $y;
> +
> +	printf "[%s] %s\n", $$, $file;
> +
> +	for (my $x = 0; $x < 20; $x ++) {
> +		my $pid = fork();
> +		if ($pid == 0) {
> +			my $fh;
> +			open($fh, ">> $file") or die("Can't open '$file': $!");
> +			printf "[%s] lock %s: %s\n", $$, $file,
> +			flock($fh, LOCK_EX) ? 'done' : $!;
> +			close($fh);
> +			exit(0);
> +		}
> +	}
> +	while (wait > 0) { ; }
> +}
>
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://oss.oracle.com/pipermail/ocfs2-test-devel/attachments/20081212/aa9f0fa6/attachment.html 


More information about the Ocfs2-test-devel mailing list