Home | History | Annotate | Download | only in dbt2
      1 import os
      2 from autotest_lib.client.bin import test, utils
      3 
      4 
      5 # Dbt-2 is a fair-use implementation of the TPC-C benchmark.  The test is
      6 # currently hardcoded to use PostgreSQL but the kit also supports MySQL.
      7 
      8 class dbt2(test.test):
      9     version = 2
     10 
     11     def initialize(self):
     12         self.job.require_gcc()
     13 
     14 
     15     # http://osdn.dl.sourceforge.net/sourceforge/osdldbt/dbt2-0.39.tar.gz
     16     def setup(self, tarball = 'dbt2-0.39.tar.bz2'):
     17         tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
     18         utils.extract_tarball_to_dir(tarball, self.srcdir)
     19         self.job.setup_dep(['pgsql', 'pgpool', 'mysql'])
     20 
     21         #
     22         # Extract one copy of the kit for MySQL.
     23         #
     24         utils.system('cp -pR ' + self.srcdir + ' ' + self.srcdir + '.mysql')
     25         os.chdir(self.srcdir + '.mysql')
     26         utils.configure('--with-mysql=%s/deps/mysql/mysql' % self.autodir)
     27         utils.make()
     28 
     29         #
     30         # Extract one copy of the kit for PostgreSQL.
     31         #
     32         utils.system('cp -pR ' + self.srcdir + ' ' + self.srcdir + '.pgsql')
     33         os.chdir(self.srcdir + '.pgsql')
     34         utils.configure('--with-postgresql=%s/deps/pgsql/pgsql' % self.autodir)
     35         utils.make()
     36 
     37         # Create symlinks to autotest's results directory from dbt-2's
     38         # preferred results directory to self.resultsdir
     39         utils.system('ln -s %s %s' %
     40                      (self.resultsdir, self.srcdir + '.mysql/scripts/output'))
     41         utils.system('ln -s %s %s' %
     42                      (self.resultsdir, self.srcdir + '.pgsql/scripts/output'))
     43 
     44 
     45     def execute(self, db_type, args = ''):
     46         logfile = self.resultsdir + '/dbt2.log'
     47 
     48         if (db_type == "mysql"):
     49             self.execute_mysql(args)
     50         elif (db_type == "pgpool"):
     51             self.execute_pgpool(args)
     52         elif (db_type == "pgsql"):
     53             self.execute_pgsql(args)
     54 
     55 
     56     def execute_mysql(self, args = ''):
     57         args = args
     58         utils.system(self.srcdir + '.mysql/scripts/mysql/build_db.sh -g -w 1')
     59         utils.system(self.srcdir + '.mysql/scripts/run_workload.sh ' + args)
     60 
     61 
     62     def execute_pgpool(self, args = ''):
     63         utils.system('%s/deps/pgpool/pgpool/bin/pgpool -f %s/../pgpool.conf' \
     64                         % (self.autodir, self.srcdir))
     65         self.execute_pgsql(args)
     66         utils.system('%s/deps/pgpool/pgpool/bin/pgpool stop' % self.autodir)
     67 
     68 
     69     def execute_pgsql(self, args = ''):
     70         utils.system(self.srcdir + '.pgsql/scripts/pgsql/build_db.sh -g -w 1')
     71         utils.system(self.srcdir + '.pgsql/scripts/run_workload.sh ' + args)
     72         #
     73         # Clean up by dropping the database after the test.
     74         #
     75         utils.system(self.srcdir + '.pgsql/scripts/pgsql/start_db.sh')
     76         utils.system(self.srcdir + '.pgsql/scripts/pgsql/drop_db.sh')
     77         utils.system(self.srcdir + '.pgsql/scripts/pgsql/stop_db.sh')
     78