[Ocfs2-test-devel] [PATCH 3/3] Splice had a limit of 1000 bytes to write through the pipe.

tristan.ye tristan.ye at oracle.com
Wed Oct 29 19:38:20 PDT 2008


Works perfectly...

Signed-off-by: Tristan Ye <tristan.ye at oracle.com>


On Wed, 2008-10-29 at 19:15 -0700, Marcos Matsunaga wrote:
> I've increased the size to 10,000,000 bytes to make it more flexible.
> 
> Also, made the splice lenght to be printed to stderr instead of
> stdout. This is to make the splice_read work as it was piping everything
> and causing error in the splice_test.py script that is being added here.
> 
> Added the script splice_test.py
> 
> Makefile was changed to install splice_test.py
> 
> Signed-off-by: Marcos Matsunaga <Marcos.Matsunaga at oracle.com>
> ---
>  programs/splice/Makefile       |    4 +-
>  programs/splice/splice_read.c  |    6 +-
>  programs/splice/splice_test.py |  198 ++++++++++++++++++++++++++++++++++++++++
>  programs/splice/splice_write.c |    6 +-
>  4 files changed, 207 insertions(+), 7 deletions(-)
>  create mode 100644 programs/splice/splice_test.py
> 
> diff --git a/programs/splice/Makefile b/programs/splice/Makefile
> index 6a0bd41..dadbdf6 100644
> --- a/programs/splice/Makefile
> +++ b/programs/splice/Makefile
> @@ -13,10 +13,12 @@ SPLICE_WRITE_OBJECTS = $(patsubst %.c,%.o,$(SPLICE_WRITE_SOURCES))
>  
>  SOURCES = $(SPLICE_WRITE_SOURCES) $(SPLICE_READ_SOURCES)
>  
> -DIST_FILES = $(SOURCES)
> +DIST_FILES = $(SOURCES) splice_test.py
>  
>  BIN_PROGRAMS = splice_read splice_write
>  
> +BIN_EXTRA = splice_test.py
> +
>  splice_read: $(SPLICE_READ_OBJECTS)
>  	$(LINK) 
>  splice_write: $(SPLICE_WRITE_OBJECTS)
> diff --git a/programs/splice/splice_read.c b/programs/splice/splice_read.c
> index ad4af0f..c25522e 100644
> --- a/programs/splice/splice_read.c
> +++ b/programs/splice/splice_read.c
> @@ -16,11 +16,11 @@ int main(int argc, char *argv[])
>  		printf("open file failed.\n");
>  		exit(-1);
>  	}
> -	slen = splice(fd, NULL, STDOUT_FILENO, NULL, 1000, 0);
> +	slen = splice(fd, NULL, STDOUT_FILENO, NULL, 10000000, 0);
>  	if (slen < 0)
> -		printf("splice failed.\n");
> +		fprintf(stderr, "splice failed.\n");
>  	else
> -		printf("spliced length = %d\n",slen);
> +		fprintf(stderr, "spliced length = %d\n",slen);
>  	close(fd);
>  	if (slen <0)
>  		exit(-1);
> diff --git a/programs/splice/splice_test.py b/programs/splice/splice_test.py
> new file mode 100644
> index 0000000..a5dca4c
> --- /dev/null
> +++ b/programs/splice/splice_test.py
> @@ -0,0 +1,198 @@
> +#!/usr/bin/env python
> +#
> +# * vim: noexpandtab sw=8 ts=8 sts=0:
> +# *
> +# * splice_test.py
> +# *
> +# * Test splice on ocfs2.
> +# *
> +# * Copyright (C) 2004, 2008 Oracle.  All rights reserved.
> +# *
> +# * This program is free software; you can redistribute it and/or
> +# * modify it under the terms of the GNU General Public
> +# * License version 2 as published by the Free Software Foundation.
> +# *
> +# * This program is distributed in the hope that it will be useful,
> +# * but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +# * General Public License for more details.
> +#
> +#
> +#	 
> +# Program	: splice_test.py
> +# Description 	: This program will just test the splice feature on ocfs2.
> +# Author	: Marcos E. Matsunaga 
> +
> +#
> +import os, sys, time, optparse, socket, string, o2tf, config, pdb, timing
> +import time, config, os.path
> +#
> +MD5SUM = '/usr/bin/md5sum'
> +#
> +DEBUGON = os.getenv('DEBUG',0)
> +PID = os.getpid()
> +node_dirs = {}
> +#
> +logfile = config.LOGFILE
> +filename = 'splice_test.dat'
> +SPLICEWRITE_BIN = config.BINDIR + '/splice_write'
> +SPLICEREAD_BIN = config.BINDIR + '/splice_read'
> +count = 5
> +uname = os.uname()
> +lhostname = str(socket.gethostname())
> +BASEMD5SUM=''
> +TEMPMD5SUM=''
> +SCRIPT_STATUS=0
> +#
> +# FUNCTIONS
> +#
> +def Cleanup():
> +	from os import access, F_OK
> +	if access(os.path.join(directory, filename), F_OK) ==1:
> +		os.system('rm -fr ' + os.path.join(directory, filename))
> +	if access(os.path.join('/tmp', filename), F_OK) ==1:
> +		os.system('rm -fr ' + os.path.join('/tmp', filename))
> +def CreateBaseFile():
> +	from commands import getoutput
> +	global BASEMD5SUM 
> +	os.system('ps -efl > %s' % os.path.join('/tmp', filename))
> +	BASEMD5SUM=getoutput('%s %s|cut -f1 -d" "' % \
> +		(MD5SUM, os.path.join('/tmp', filename)))
> +	if DEBUGON:
> +		o2tf.printlog('splice_test: Running CreateBaseFile',
> +			logfile, 0, '')
> +		o2tf.printlog('splice_test: BASEMD5SUM %s' % BASEMD5SUM,
> +			logfile, 0, '')
> +def SpliceWrite():
> +	global SCRIPT_STATUS
> +	from commands import getoutput
> +	print('Testing splice_write ........')
> +	from os import access, F_OK
> +	if access(os.path.join(directory, filename), F_OK) ==1:
> +		os.system('rm -fr ' + os.path.join(directory, filename))
> +	os.system('cat %s | %s %s' % (os.path.join('/tmp', filename), \
> +		SPLICEWRITE_BIN, os.path.join(directory, filename)))
> +	TEMPMD5SUM=getoutput('%s %s|cut -f1 -d" "' % \
> +		(MD5SUM, os.path.join(directory, filename)))
> +	if BASEMD5SUM == TEMPMD5SUM:
> +		print('PASSED')
> +	else:
> +		SCRIPT_STATUS=-1
> +		print('FAILED')
> +		o2tf.printlog('splice_test: BASEMD5SUM %s' % BASEMD5SUM,
> +			logfile, 0, '')
> +		o2tf.printlog('splice_test: TEMPMD5SUM %s' % TEMPMD5SUM,
> +			logfile, 0, '')
> +def SpliceRead():
> +	global SCRIPT_STATUS
> +	from commands import getoutput
> +	from os import access, F_OK
> +	print('Testing splice_read ........')
> +	if access(os.path.join(directory, filename), F_OK) ==1:
> +		os.system('rm -fr ' + os.path.join(directory, filename))
> +	os.system('%s %s | cat > %s' % (SPLICEREAD_BIN, \
> +		os.path.join('/tmp', filename), \
> +		os.path.join(directory, filename)))
> +	TEMPMD5SUM=getoutput('%s %s|cut -f1 -d" "' % \
> +		(MD5SUM, os.path.join(directory, filename)))
> +	if BASEMD5SUM == TEMPMD5SUM:
> +		print('PASSED')
> +	else:
> +		SCRIPT_STATUS=-1
> +		print('FAILED')
> +		o2tf.printlog('splice_test: BASEMD5SUM %s' % BASEMD5SUM,
> +			logfile, 0, '')
> +		o2tf.printlog('splice_test: TEMPMD5SUM %s' % TEMPMD5SUM,
> +			logfile, 0, '')
> +#
> +# MAIN
> +#
> +Usage = 'usage: %prog [-d|--directory directory] \
> +[-c| --count] \
> +[-D| --debug] \
> +[-f|--filename filename] \
> +[-l|-logfile logfilename] \
> +[-h|--help]'
> +if __name__=='__main__':
> +	parser = optparse.OptionParser(Usage)
> +#
> +	parser.add_option('-d',
> +		'--directory',
> +		dest='directory',
> +		type='string',
> +		help='Directory where the file will be created.')
> +#
> +	parser.add_option('-c',
> +		'--count',
> +		dest='count',
> +		type='int',
> +		help='Number of times the test will be repeated.')
> +#
> +        parser.add_option('-D',
> +                '--debug',
> +                action="store_true",
> +                dest='debug',
> +                default=False,
> +                help='Turn the debug option on. Default=False.')
> +#
> +	parser.add_option('-l',
> +		'--logfile',
> +		dest='logfile',
> +		type='string',
> +		help='Logfile used by the process.')
> +#
> +	parser.add_option('-f',
> +		'--filename',
> +		dest='filename',
> +		type='string',
> +		help='Test filename.')
> +#
> +	(options, args) = parser.parse_args()
> +	if len(args) != 0:
> +		parser.error('incorrect number of arguments')
> +#
> +        if options.debug:
> +                DEBUGON=1
> +#
> +	if options.filename:
> +		filename = options.filename
> +#
> +	if not options.directory:
> +		parser.error('Please specify working directory.')
> +	else:
> +		if not os.path.isdir(options.directory):
> +			os.makedirs(options.directory, 0755)
> +	directory = options.directory
> +	if options.logfile:
> +		logfile = options.logfile+'_'+lhostname
> +	if options.count:
> +		count = options.count
> +#
> +# Make nproc at least the number of nodes
> +#
> +# End or arguments parsing
> +#
> +if DEBUGON:
> +	o2tf.printlog('splice_test: directory = (%s)' % directory,
> +		logfile, 0, '')
> +	o2tf.printlog('splice_test: filename = (%s)' % filename,
> +		logfile, 0, '')
> +	o2tf.printlog('splice_test: logfile = (%s)' % logfile,
> +		logfile, 0, '')
> +#
> +for i in range(count):
> +	CreateBaseFile()
> +	SpliceWrite()
> +	SpliceRead()
> +	if SCRIPT_STATUS:
> +		break
> +#
> +if SCRIPT_STATUS:
> +	o2tf.printlog('splice_test: Job Failed',
> +		logfile, 3, '=')
> +	sys.exit(1)
> +else:
> +	o2tf.printlog('splice_test: Job completed successfully',
> +		logfile, 3, '=')
> +	Cleanup();
> +	sys.exit(0)
> diff --git a/programs/splice/splice_write.c b/programs/splice/splice_write.c
> index 5c92bbb..a4d8c1a 100644
> --- a/programs/splice/splice_write.c
> +++ b/programs/splice/splice_write.c
> @@ -15,11 +15,11 @@ int main(int argc, char *argv[])
>  		printf("open file failed.\n");
>  		exit(-1);
>  	}
> -	slen = splice(STDIN_FILENO, NULL, fd, NULL, 1000, 0);
> +	slen = splice(STDIN_FILENO, NULL, fd, NULL, 10000000, 0);
>  	if (slen < 0)
> -		printf("splice failed.\n");
> +		fprintf(stderr, "splice failed.\n");
>  	else
> -		printf("spliced length = %d\n",slen);
> +		fprintf(stderr, "spliced length = %d\n",slen);
>  	close(fd);
>  	if (slen < 0)
>  		exit(-1);




More information about the Ocfs2-test-devel mailing list