33import io
44import os
55import shutil
6+ import six
67import subprocess
78import tempfile
89import time
@@ -856,12 +857,18 @@ def catchup(self, dbname='postgres', username=None):
856857 except Exception as e :
857858 raise_from (CatchUpException ('Failed to catch up' ), e )
858859
859- def pgbench (self , dbname = 'postgres' , stdout = None , stderr = None , options = []):
860+ def pgbench (self ,
861+ dbname = 'postgres' ,
862+ username = None ,
863+ stdout = None ,
864+ stderr = None ,
865+ options = []):
860866 """
861867 Spawn a pgbench process.
862868
863869 Args:
864870 dbname: database name to connect to.
871+ username: database user name.
865872 stdout: stdout file to be used by Popen.
866873 stderr: stderr file to be used by Popen.
867874 options: additional options for pgbench (list).
@@ -870,36 +877,85 @@ def pgbench(self, dbname='postgres', stdout=None, stderr=None, options=[]):
870877 Process created by subprocess.Popen.
871878 """
872879
880+ # Set default arguments
881+ username = username or _default_username ()
882+
873883 # yapf: disable
874884 _params = [
875885 get_bin_path ("pgbench" ),
876886 "-p" , str (self .port ),
877887 "-h" , self .host ,
878- ] + options + [dbname ]
888+ "-U" , username ,
889+ ] + options
890+
891+ # should be the last one
892+ _params .append (dbname )
879893
880894 proc = subprocess .Popen (_params , stdout = stdout , stderr = stderr )
881895
882896 return proc
883897
884- def pgbench_run (self , dbname = 'postgres' , options = []):
898+ def pgbench_init (self , ** kwargs ):
899+ """
900+ Small wrapper for pgbench_run().
901+ Sets initialize=True.
902+
903+ Returns:
904+ This instance of PostgresNode.
905+ """
906+
907+ self .pgbench_run (initialize = True , ** kwargs )
908+
909+ return self
910+
911+ def pgbench_run (self ,
912+ dbname = 'postgres' ,
913+ username = None ,
914+ options = [],
915+ ** kwargs ):
885916 """
886917 Run pgbench with some options.
887918 This event is logged (see self.utils_log_name).
888919
889920 Args:
890921 dbname: database name to connect to.
922+ username: database user name.
891923 options: additional options for pgbench (list).
892924
925+ **kwargs: named options for pgbench.
926+ Examples:
927+ pgbench_run(initialize=True, scale=2)
928+ pgbench_run(time=10)
929+ Run pgbench --help to learn more.
930+
893931 Returns:
894932 Stdout produced by pgbench.
895933 """
896934
935+ # Set default arguments
936+ username = username or _default_username ()
937+
897938 # yapf: disable
898939 _params = [
899940 get_bin_path ("pgbench" ),
900941 "-p" , str (self .port ),
901942 "-h" , self .host ,
902- ] + options + [dbname ]
943+ "-U" , username ,
944+ ] + options
945+
946+ for key , value in six .iteritems (kwargs ):
947+ # rename keys for pgbench
948+ key = key .replace ('_' , '-' )
949+
950+ # append option
951+ if not isinstance (value , bool ):
952+ _params .append ('--{}={}' .format (key , value ))
953+ else :
954+ assert (value is True ) # just in case
955+ _params .append ('--{}' .format (key ))
956+
957+ # should be the last one
958+ _params .append (dbname )
903959
904960 return _execute_utility (_params , self .utils_log_name )
905961
0 commit comments