Merge lp://qastaging/~kalebral-deactivatedaccount/drizzle-automation/bench-config-name into lp://qastaging/drizzle-automation

Proposed by Lee Bieber
Status: Merged
Merged at revision: not available
Proposed branch: lp://qastaging/~kalebral-deactivatedaccount/drizzle-automation/bench-config-name
Merge into: lp://qastaging/drizzle-automation
Diff against target: 1008 lines (+226/-213)
17 files modified
drizzle/automation/config/automation.cnf (+2/-44)
drizzle/automation/config/dbt2/dbt2.cnf (+16/-0)
drizzle/automation/config/drizzleslap/drizzleslap.cnf (+29/-0)
drizzle/automation/config/sqlbench/sqlbench.cnf (+4/-0)
drizzle/automation/dbt2/run.py (+12/-9)
drizzle/automation/drizzleslap/run.py (+10/-7)
drizzle/automation/lib/options.py (+21/-24)
drizzle/automation/lib/util.py (+46/-6)
drizzle/automation/reports/__init__.py (+1/-1)
drizzle/automation/reports/dbt2.py (+11/-11)
drizzle/automation/reports/drizzleslap.py (+3/-3)
drizzle/automation/reports/run.py (+18/-19)
drizzle/automation/reports/sqlbench.py (+3/-3)
drizzle/automation/reports/sysbench.py (+12/-12)
drizzle/automation/runner.py (+1/-1)
drizzle/automation/sqlbench/run.py (+10/-7)
drizzle/automation/sysbench/run.py (+27/-66)
To merge this branch: bzr merge lp://qastaging/~kalebral-deactivatedaccount/drizzle-automation/bench-config-name
Reviewer Review Type Date Requested Status
Drizzle Automatons Pending
Review via email: mp+16988@code.qastaging.launchpad.net
To post a comment you must log in.
Revision history for this message
Lee Bieber (kalebral-deactivatedaccount) wrote :

change -sysbench-config option to -bench-config-name to be generic for all benchmarks. Drizzleslap, dbt2 and sqlbench now require this option and a configuration file.

Note still need to change sysbench to use the util.loadConfigFile and rename the table sysbench_config to be bench_config. That will be phase 2 after this initial change is approved and merged

129. By lbieber <lbieber@orisndriz01>

clean up drizzleslap.cnf

130. By Lee Bieber <email address hidden>

change sysbench to use util.loadConfigFile instead of having its own version

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'drizzle/automation/config/automation.cnf'
--- drizzle/automation/config/automation.cnf 2010-01-04 18:23:17 +0000
+++ drizzle/automation/config/automation.cnf 2010-01-11 06:21:15 +0000
@@ -40,52 +40,14 @@
40rsync_dir= drizzle.org:web/doxygen/40rsync_dir= drizzle.org:web/doxygen/
4141
42[dbt2]42[dbt2]
43dbt2_config_name= dbt243
44# location of the dbt2 code
45dbt2_home= /home/drizzle/repos/dbt2-0.40
46# location of generated data
47dbt2_data_dir= /home/drizzle/repos/dbt2-0.40/data
48# number of data warehouses
49dbt2_warehouses= 10
50# number of connections
51dbt2_connections= 2,4,8,16,32,64,128,256,512,1024
52# time to run the tests
53dbt2_time= 300
54# Email recipients to receive a text regression report on completion of a run. Comma separated.44# Email recipients to receive a text regression report on completion of a run. Comma separated.
55report_email= drizzle-benchmark@lists.launchpad.net45report_email= drizzle-benchmark@lists.launchpad.net
5646
57[drizzleslap]47[drizzleslap]
58drizzleslap_config_name= drizzleslap48# Email recipients to receive a text regression report on completion of a run. Comma separated.
59common_options= --number-int-cols=2 --number-char-cols=3 --auto-generate-sql
60concurrency= 1,100,200,300,400,500,600,700,800,900,1000,1100,1200
61engine= innodb
62iterations= 10
63report_email= drizzle-benchmark@lists.launchpad.net49report_email= drizzle-benchmark@lists.launchpad.net
6450
65[drizzleslap_tests]
66guid= --auto-generate-sql-guid-primary --auto-generate-sql-load-type=write --number-of-queries=100000 --engine=innodb
67guid-scale= --auto-generate-sql-guid-primary --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --engine=innodb
68key= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=key --number-of-queries=100000 --engine=innodb
69key-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=key --auto-generate-sql-execute-number=1000 --engine=innodb
70mixed= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --number-of-queries=100000 --engine=innodb
71mixed-commit= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --number-of-queries=100000 --commit=8 --engine=innodb
72mixed-commit-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --auto-generate-sql-execute-number=1000 --commit=8 --engine=innodb
73mixed-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --auto-generate-sql-execute-number=1000 --engine=innodb
74scan= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=read --number-of-queries=100000 --engine=innodb
75scan-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=read --auto-generate-sql-execute-number=1000 --engine=innodb
76update= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=update --number-of-queries=100000 --auto-generate-sql-write-number=50000 --engine=innodb
77update-commit= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=update --number-of-queries=100000 --auto-generate-sql-write-number=50000 --commit=8 --engine=innodb
78update-commit-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=update --auto-generate-sql-execute-number=1000 --auto-generate-sql-write-number=50000 --commit=8 --engine=innodb
79update-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=update --auto-generate-sql-execute-number=1000 --auto-generate-sql-write-number=50000 --engine=innodb
80write= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --number-of-queries=100000 --engine=innodb
81write-commit= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --number-of-queries=100000 --commit=8 --engine=innodb
82write-commit-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --commit=8 --engine=innodb
83write-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --engine=innodb
84write_bh= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --number-of-queries=100000 --engine=blackhole
85write-scale_bh= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --engine=blackhole
86guid_bh= --auto-generate-sql-guid-primary --auto-generate-sql-load-type=write --number-of-queries=100000 --engine=blackhole
87guid-scale_bh= --auto-generate-sql-guid-primary --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --engine=blackhole
88
89[lcov]51[lcov]
9052
91# Directories queried during GCOV/LCOV code coverage53# Directories queried during GCOV/LCOV code coverage
@@ -115,10 +77,6 @@
11577
116[sqlbench]78[sqlbench]
11779
118# configuration name for use in sysbench_config table
119sqlbench_config_name= sqlbench
120# location of the sql bench repository
121sqlbench_home= /home/drizzle/repos/sql-bench
122# Email recipients to receive a text regression report on completion of80# Email recipients to receive a text regression report on completion of
123# a sqlbench run. Comma separated.81# a sqlbench run. Comma separated.
124report_email= drizzle-benchmark@lists.launchpad.net82report_email= drizzle-benchmark@lists.launchpad.net
12583
=== added directory 'drizzle/automation/config/dbt2'
=== added file 'drizzle/automation/config/dbt2/dbt2.cnf'
--- drizzle/automation/config/dbt2/dbt2.cnf 1970-01-01 00:00:00 +0000
+++ drizzle/automation/config/dbt2/dbt2.cnf 2010-01-11 06:21:15 +0000
@@ -0,0 +1,16 @@
1[run]
2
3# location of the dbt2 code
4dbt2_home= /home/drizzle/repos/dbt2
5
6# location of generated data
7dbt2_data_dir= /home/drizzle/repos/dbt2/data_dir
8
9# number of data warehouses
10dbt2_warehouses= 10
11
12# number of connections
13dbt2_connections= 2,4,8,16,32,64,128,256,512,1024
14
15# time to run the tests
16dbt2_time= 300
017
=== added directory 'drizzle/automation/config/drizzleslap'
=== added file 'drizzle/automation/config/drizzleslap/drizzleslap.cnf'
--- drizzle/automation/config/drizzleslap/drizzleslap.cnf 1970-01-01 00:00:00 +0000
+++ drizzle/automation/config/drizzleslap/drizzleslap.cnf 2010-01-11 06:21:15 +0000
@@ -0,0 +1,29 @@
1[run]
2common_options= --number-int-cols=2 --number-char-cols=3 --auto-generate-sql
3concurrency= 1,100,200,300,400,500,600,700,800,900,1000,1100,1200
4engine= innodb
5iterations= 10
6
7[drizzleslap_tests]
8guid= --auto-generate-sql-guid-primary --auto-generate-sql-load-type=write --number-of-queries=100000 --engine=innodb
9guid-scale= --auto-generate-sql-guid-primary --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --engine=innodb
10key= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=key --number-of-queries=100000 --engine=innodb
11key-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=key --auto-generate-sql-execute-number=1000 --engine=innodb
12mixed= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --number-of-queries=100000 --engine=innodb
13mixed-commit= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --number-of-queries=100000 --commit=8 --engine=innodb
14mixed-commit-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --auto-generate-sql-execute-number=1000 --commit=8 --engine=innodb
15mixed-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --auto-generate-sql-execute-number=1000 --engine=innodb
16scan= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=read --number-of-queries=100000 --engine=innodb
17scan-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=read --auto-generate-sql-execute-number=1000 --engine=innodb
18update= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=update --number-of-queries=100000 --auto-generate-sql-write-number=50000 --engine=innodb
19update-commit= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=update --number-of-queries=100000 --auto-generate-sql-write-number=50000 --commit=8 --engine=innodb
20update-commit-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=update --auto-generate-sql-execute-number=1000 --auto-generate-sql-write-number=50000 --commit=8 --engine=innodb
21update-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=update --auto-generate-sql-execute-number=1000 --auto-generate-sql-write-number=50000 --engine=innodb
22write= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --number-of-queries=100000 --engine=innodb
23write-commit= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --number-of-queries=100000 --commit=8 --engine=innodb
24write-commit-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --commit=8 --engine=innodb
25write-scale= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --engine=innodb
26write_bh= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --number-of-queries=100000 --engine=blackhole
27write-scale_bh= --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --engine=blackhole
28guid_bh= --auto-generate-sql-guid-primary --auto-generate-sql-load-type=write --number-of-queries=100000 --engine=blackhole
29guid-scale_bh= --auto-generate-sql-guid-primary --auto-generate-sql-load-type=write --auto-generate-sql-execute-number=1000 --engine=blackhole
030
=== added directory 'drizzle/automation/config/sqlbench'
=== added file 'drizzle/automation/config/sqlbench/sqlbench.cnf'
--- drizzle/automation/config/sqlbench/sqlbench.cnf 1970-01-01 00:00:00 +0000
+++ drizzle/automation/config/sqlbench/sqlbench.cnf 2010-01-11 06:21:15 +0000
@@ -0,0 +1,4 @@
1[run]
2
3# location of the sql bench repository
4sqlbench_home= /home/drizzle/repos/sql-bench
05
=== modified file 'drizzle/automation/dbt2/run.py'
--- drizzle/automation/dbt2/run.py 2009-12-22 21:04:47 +0000
+++ drizzle/automation/dbt2/run.py 2010-01-11 06:21:15 +0000
@@ -83,7 +83,7 @@
83 working_dir= variables['working_dir']83 working_dir= variables['working_dir']
84 server_name= variables['server']84 server_name= variables['server']
85 run_date= datetime.datetime.now().isoformat()85 run_date= datetime.datetime.now().isoformat()
86 config_name= variables['dbt2']['dbt2_config_name']86 bench_config_name= variables['bench_config_name']
8787
88 os.chdir(working_dir)88 os.chdir(working_dir)
8989
@@ -157,13 +157,16 @@
157 util.get_profile_options(server,variables['profiler'])157 util.get_profile_options(server,variables['profiler'])
158158
159 run_id= util.getNextRunId()159 run_id= util.getNextRunId()
160 config_id= util.getConfigId(config_name)160 config_id= util.getConfigId(bench_config_name)
161 161
162 # load the configuration file
163 dbt2_config_variables= util.loadConfigFile("dbt2", bench_config_name)
164
162 # location of dbt2 tools and scripts165 # location of dbt2 tools and scripts
163 dbt2_home= variables['dbt2']['dbt2_home']166 dbt2_home= dbt2_config_variables['run']['dbt2_home']
164 bzr_revision= variables['bzr_revision']167 bzr_revision= variables['bzr_revision']
165 test_time= variables['dbt2']['dbt2_time']168 test_time= dbt2_config_variables['run']['dbt2_time']
166 warehouses= variables['dbt2']['dbt2_warehouses']169 warehouses= dbt2_config_variables['run']['dbt2_warehouses']
167170
168 # location where test results are stored171 # location where test results are stored
169 output_dirname= ('dbt2-%s' % (bzr_revision))172 output_dirname= ('dbt2-%s' % (bzr_revision))
@@ -172,7 +175,7 @@
172 os.mkdir(output_dirname)175 os.mkdir(output_dirname)
173176
174 # load data into database177 # load data into database
175 cmd= "%s/scripts/drizzle/drizzle_load_db.sh --path %s --verbose --drizzle_path %s" % (dbt2_home, variables['dbt2']['dbt2_data_dir'], os.path.join(working_dir, 'client/drizzle'))178 cmd= "%s/bin/drizzle/dbt2-drizzle-load-db --path %s --verbose --drizzle_path %s" % (dbt2_home, dbt2_config_variables['run']['dbt2_data_dir'], os.path.join(working_dir, 'client/drizzle'))
176 logging.info("Loading data.... ")179 logging.info("Loading data.... ")
177 logging.info("%s " % cmd)180 logging.info("%s " % cmd)
178 (retcode, output)= commands.getstatusoutput(cmd)181 (retcode, output)= commands.getstatusoutput(cmd)
@@ -181,11 +184,11 @@
181 sys.exit(1)184 sys.exit(1)
182185
183 # get list of connections to run with186 # get list of connections to run with
184 connection_levels= [int(x) for x in variables['dbt2']['dbt2_connections'].split(",")]187 connection_levels= [int(x) for x in dbt2_config_variables['run']['dbt2_connections'].split(",")]
185 188
186 # run the tests189 # run the tests
187 for connections in connection_levels: 190 for connections in connection_levels:
188 cmd= "%s/scripts/drizzle/drizzle_run.sh --connections %d --time %d --warehouses %d --verbose --output-base %s --run-number %s" % (dbt2_home, connections, int(test_time), int(warehouses), output_dirname, connections)191 cmd= "%s/bin/drizzle/dbt2-drizzle-run --connections %d --time %d --warehouses %d --verbose --output-base %s --run-number %s" % (dbt2_home, connections, int(test_time), int(warehouses), output_dirname, connections)
189 logging.info("Running %s " % cmd)192 logging.info("Running %s " % cmd)
190 (retcode, output)= commands.getstatusoutput(cmd)193 (retcode, output)= commands.getstatusoutput(cmd)
191 if not retcode == 0:194 if not retcode == 0:
@@ -207,7 +210,7 @@
207 # send email report210 # send email report
208 if variables['with_email_report'] is True:211 if variables['with_email_report'] is True:
209 import drizzle.automation.reports.dbt2 as reports212 import drizzle.automation.reports.dbt2 as reports
210 email_text= reports.getDbt2Report(working_dir, config_name, run_id, run_date, server_name, variables['bzr_branch'], bzr_revision)213 email_text= reports.getDbt2Report(working_dir, bench_config_name, run_id, run_date, server_name, variables['bzr_branch'], bzr_revision)
211 logging.info("Sending email...")214 logging.info("Sending email...")
212 # bug https://bugs.launchpad.net/launchpad/+bug/419562 - need to use registered launchpad name for from215 # bug https://bugs.launchpad.net/launchpad/+bug/419562 - need to use registered launchpad name for from
213 #from_string= ('%s <drizzle-benchmark@lists.launchpad.net>' % socket.gethostname())216 #from_string= ('%s <drizzle-benchmark@lists.launchpad.net>' % socket.gethostname())
214217
=== modified file 'drizzle/automation/drizzleslap/run.py'
--- drizzle/automation/drizzleslap/run.py 2009-12-08 19:39:50 +0000
+++ drizzle/automation/drizzleslap/run.py 2010-01-11 06:21:15 +0000
@@ -100,7 +100,7 @@
100 working_dir= variables['working_dir']100 working_dir= variables['working_dir']
101 server_name= variables['server']101 server_name= variables['server']
102 run_date= datetime.datetime.now().isoformat()102 run_date= datetime.datetime.now().isoformat()
103 config_name= variables['drizzleslap']['drizzleslap_config_name']103 bench_config_name= variables['bench_config_name']
104104
105 os.chdir(working_dir)105 os.chdir(working_dir)
106106
@@ -170,17 +170,20 @@
170 sys.exit(1)170 sys.exit(1)
171171
172 run_id= util.getNextRunId()172 run_id= util.getNextRunId()
173 config_id= util.getConfigId(config_name)173 config_id= util.getConfigId(bench_config_name)
174
175 # load the configuration file
176 drizzleslap_config_variables= util.loadConfigFile("drizzleslap", bench_config_name)
174177
175 # get the list of tests that are specified178 # get the list of tests that are specified
176 # in the configuration file in the drizzleslap_tests section179 # in the configuration file in the drizzleslap_tests section
177 list_of_tests= variables['drizzleslap_tests']180 list_of_tests= drizzleslap_config_variables['drizzleslap_tests']
178181
179 # csv file name includes the bzr version number /tmp/drizzleslap-1172.csv182 # csv file name includes the bzr version number /tmp/drizzleslap-1172.csv
180 csv_file= ("/tmp/drizzleslap-%s.csv" % (variables['bzr_revision']))183 csv_file= ("/tmp/drizzleslap-%s.csv" % (variables['bzr_revision']))
181 common_options= variables['drizzleslap']['common_options']184 common_options= drizzleslap_config_variables['run']['common_options']
182 concurrency = variables['drizzleslap']['concurrency']185 concurrency = drizzleslap_config_variables['run']['concurrency']
183 iterations= variables['drizzleslap']['iterations']186 iterations= drizzleslap_config_variables['run']['iterations']
184187
185 # remove csv file to start fresh188 # remove csv file to start fresh
186 if os.path.exists(csv_file):189 if os.path.exists(csv_file):
@@ -229,7 +232,7 @@
229 # send email report232 # send email report
230 if variables['with_email_report'] is True:233 if variables['with_email_report'] is True:
231 import drizzle.automation.reports.drizzleslap as reports234 import drizzle.automation.reports.drizzleslap as reports
232 email_text= reports.getDrizzleslapReport(working_dir, config_name, run_id, run_date, server_name, variables['bzr_branch'], int(variables['bzr_revision']))235 email_text= reports.getDrizzleslapReport(working_dir, bench_config_name, run_id, run_date, server_name, variables['bzr_branch'], int(variables['bzr_revision']))
233 logging.info("Sending email...")236 logging.info("Sending email...")
234 # bug https://bugs.launchpad.net/launchpad/+bug/419562 - need to use registered launchpad name for from237 # bug https://bugs.launchpad.net/launchpad/+bug/419562 - need to use registered launchpad name for from
235 #from_string= ('%s <drizzle-benchmark@lists.launchpad.net>' % socket.gethostname())238 #from_string= ('%s <drizzle-benchmark@lists.launchpad.net>' % socket.gethostname())
236239
=== modified file 'drizzle/automation/lib/options.py'
--- drizzle/automation/lib/options.py 2009-12-22 21:04:47 +0000
+++ drizzle/automation/lib/options.py 2010-01-11 06:21:15 +0000
@@ -68,6 +68,10 @@
6868
69# Add non-grouped options...69# Add non-grouped options...
70parser.add_option(70parser.add_option(
71 "--bench-config-name"
72 , help="DBT2/DRIZZLESLAP/SYSBENCH/SQLBENCH command only. Sets the bench configuration to use."
73 )
74parser.add_option(
71 "--dry-run"75 "--dry-run"
72 , action="store_true"76 , action="store_true"
73 , default= False77 , default= False
@@ -144,7 +148,7 @@
144 "--with-email-report"148 "--with-email-report"
145 , action="store_true"149 , action="store_true"
146 , default= False150 , default= False
147 , help="DBT2/DRIZZLESLAP/SQLBENCH/SYSBENCH/REPORT command only. Sends a text report to those recipients in [dbt2][sqlbench][sysbench][drizzleslap][report_email] configuration variable."151 , help="DBT2/DRIZZLESLAP/SQLBENCH/SYSBENCH REPORT command. Sends a text report to those recipients in [dbt2][sqlbench][sysbench][drizzleslap][report_email] configuration variable."
148 )152 )
149parser.add_option(153parser.add_option(
150 "--with-show-status"154 "--with-show-status"
@@ -196,14 +200,6 @@
196)200)
197parser.add_option_group(group)201parser.add_option_group(group)
198202
199# Add all the SYSBENCH-COMMAND-specific options
200group= optparse.OptionGroup(parser, "Options when running the SYSBENCH command")
201
202group.add_option(
203 "--sysbench-config"
204 , help="SYSBENCH command only. Sets the bench configuration to run."
205 )
206parser.add_option_group(group)
207203
208# Add all the MySQL Sandbox-mode-specific options204# Add all the MySQL Sandbox-mode-specific options
209group= optparse.OptionGroup(parser, "Options when running reports")205group= optparse.OptionGroup(parser, "Options when running reports")
@@ -367,19 +363,20 @@
367 os.environ['LD_PRELOAD']= variables['ld_preload']363 os.environ['LD_PRELOAD']= variables['ld_preload']
368 logging.info("LD_PRELOAD is set to %s\n" % variables['ld_preload'])364 logging.info("LD_PRELOAD is set to %s\n" % variables['ld_preload'])
369365
370 # For benchmarks with sysbench, we require that a configuration file366 # For dbt2, drizzleslap, sqlbench and sysbench, we require that
371 # for the sysbench options is supplied at runtime...367 # a configuration file with options is supplied at runtime...
372 if variables['command'] == 'sysbench':368 command_to_run= variables['command']
373 # Check to ensure we have a sysbench_config value...369 if command_to_run in ['dbt2','drizzleslap','sqlbench','sysbench']:
374 bench_config= supplied.sysbench_config370 # Check to ensure we have a bench_config value...
375 if bench_config is None:371 bench_config_name= supplied.bench_config_name
376 logging.error("The --sysbench-config CLI option is required when running the BENCH command. Exiting.")372 if bench_config_name is None:
373 logging.error("The --bench-config-name CLI option is required when running the %s command. Exiting." % command_to_run)
377 sys.exit(1)374 sys.exit(1)
378 else:375 else:
379 variables['sysbench_config']= bench_config376 variables['bench_config_name']= bench_config_name
380377
381 # Ensure reports have a report name specified378 # Ensure reports have a report name specified
382 if variables['command'] == 'report':379 if command_to_run == 'report':
383 report_name= supplied.report_name380 report_name= supplied.report_name
384 if report_name is None:381 if report_name is None:
385 logging.error("The --report-name CLI option is required when running the REPORT command. Exiting.")382 logging.error("The --report-name CLI option is required when running the REPORT command. Exiting.")
@@ -387,14 +384,14 @@
387 else:384 else:
388 variables['report_name']= report_name385 variables['report_name']= report_name
389 386
390 # Check to ensure we have a sysbench_config value for the sysbench report387 # Check to ensure we have a bench_config value for the specified report
391 if report_name == 'sysbench':388 if report_name in ['dbt2','drizzleslap','sqlbench','sysbench']:
392 bench_config= supplied.sysbench_config389 bench_config_name= supplied.bench_config_name
393 if bench_config is None:390 if bench_config_name is None:
394 logging.error("The --sysbench-config CLI option is required when running the BENCH command. Exiting.")391 logging.error("The --bench-config CLI option is required when running the %s command. Exiting." % command_to_run)
395 sys.exit(1)392 sys.exit(1)
396 else:393 else:
397 variables['sysbench_config']= bench_config394 variables['bench_config_name']= bench_config_name
398395
399 return variables396 return variables
400397
401398
=== modified file 'drizzle/automation/lib/util.py'
--- drizzle/automation/lib/util.py 2009-12-17 17:18:18 +0000
+++ drizzle/automation/lib/util.py 2010-01-11 06:21:15 +0000
@@ -27,6 +27,7 @@
27"""Just some useful functions"""27"""Just some useful functions"""
2828
29import textwrap29import textwrap
30import os
30import types31import types
31from drizzle.automation.lib import logging32from drizzle.automation.lib import logging
32from drizzle.automation.lib import db33from drizzle.automation.lib import db
@@ -86,7 +87,7 @@
86 87
87 db.execute_sql(sql)88 db.execute_sql(sql)
8889
89def getConfigId(config_name):90def getConfigId(bench_config_name):
90 """Returns the integer ID of the configuration name used in this run."""91 """Returns the integer ID of the configuration name used in this run."""
9192
92 # If we have not already done so, we query the local DB for the ID93 # If we have not already done so, we query the local DB for the ID
@@ -94,16 +95,16 @@
94 # a new record in the sysbench_config table and return the newly generated95 # a new record in the sysbench_config table and return the newly generated
95 # identifier.96 # identifier.
9697
97 sql= "SELECT config_id FROM sysbench_config WHERE name = '%s'" % config_name98 sql= "SELECT config_id FROM sysbench_config WHERE name = '%s'" % bench_config_name
9899
99 from drizzle.automation.lib import db100 from drizzle.automation.lib import db
100 result= db.get_select(sql)101 result= db.get_select(sql)
101 102
102 if len(result) == 0:103 if len(result) == 0:
103 # Insert a new record for this config and return the new ID...104 # Insert a new record for this config and return the new ID...
104 sql= "INSERT INTO sysbench_config (config_id, name) VALUES (NULL, '%s')" % config_name105 sql= "INSERT INTO sysbench_config (config_id, name) VALUES (NULL, '%s')" % bench_config_name
105 db.execute_sql(sql)106 db.execute_sql(sql)
106 return getConfigId(config_name)107 return getConfigId(bench_config_name)
107 else:108 else:
108 config_id= int(result[0][0])109 config_id= int(result[0][0])
109110
@@ -124,7 +125,7 @@
124 return new_run_id125 return new_run_id
125126
126# Find the specific last run_id which corresponds to the revision and branch ...127# Find the specific last run_id which corresponds to the revision and branch ...
127def getLastRunId(config_name, server_name, bzr_branch, bzr_revision):128def getLastRunId(bench_config_name, server_name, bzr_branch, bzr_revision):
128129
129 version= bzr_branch + '-' + str(bzr_revision)130 version= bzr_branch + '-' + str(bzr_revision)
130131
@@ -139,7 +140,7 @@
139ORDER BY run_id DESC140ORDER BY run_id DESC
140LIMIT 1141LIMIT 1
141""" % (142""" % (
142 config_name143 bench_config_name
143 , server_name144 , server_name
144 , version145 , version
145 )146 )
@@ -170,3 +171,42 @@
170 server.setProfiler(profiler)171 server.setProfiler(profiler)
171 server.start()172 server.start()
172173
174# Finds and parses the configuration file for the supplied config name
175# A configuration file containing benchmark program and server
176# parameters is required. If the --bench-config=NAME is a relative
177# filename, we search in /etc/drizzle-automation/sysbench/ for a
178# file called NAME.cnf
179def loadConfigFile(benchmark_name, bench_config_name):
180
181 logging.info("Loading configuration for config name %s." % bench_config_name)
182 bench_config_variables= {}
183
184 locations=[]
185 bench_config_file= bench_config_name
186 if not bench_config_file.endswith(".cnf"):
187 bench_config_file= bench_config_file + ".cnf"
188
189 if not bench_config_file.startswith(os.path.sep):
190 # Assume all relative config files are in /etc/drizzle-automation/sysbench/
191 locations.append(os.path.join(os.path.sep, "etc", "drizzle-automation", benchmark_name, bench_config_file))
192 locations.append(os.path.expanduser(os.path.join("~", ".drizzle-automation", benchmark_name, bench_config_file)))
193 else:
194 locations.append(bench_config_file)
195
196 bench_config_file_found=False
197 for test_bench_config_file in locations:
198 if os.path.exists(test_bench_config_file):
199 bench_config_file_found=True
200 if not bench_config_file_found:
201 logging.error("Specified configuration file not found: \"%s\". Exiting." % bench_config_file)
202 sys.exit(1)
203
204 import ConfigParser
205 parser= ConfigParser.RawConfigParser()
206 parser.read(locations)
207 for sec in parser.sections():
208 bench_config_variables[sec]= {}
209 for k,v in parser.items(sec):
210 bench_config_variables[sec][k]= v
211
212 return bench_config_variables
173213
=== modified file 'drizzle/automation/reports/__init__.py'
--- drizzle/automation/reports/__init__.py 2009-11-16 21:25:20 +0000
+++ drizzle/automation/reports/__init__.py 2010-01-11 06:21:15 +0000
@@ -27,4 +27,4 @@
2727
28__copyright__= "Copyright 2009 Sun Microsystems"28__copyright__= "Copyright 2009 Sun Microsystems"
2929
30__all__= ['sysbench','sqlbench','drizzleslap','run']30__all__= ['dbt2', 'drizzleslap', 'sqlbench','sysbench','run']
3131
=== modified file 'drizzle/automation/reports/dbt2.py'
--- drizzle/automation/reports/dbt2.py 2010-01-05 16:27:22 +0000
+++ drizzle/automation/reports/dbt2.py 2010-01-11 06:21:15 +0000
@@ -38,11 +38,11 @@
38 i.connections38 i.connections
39, ROUND(AVG(i.tpm),2) AS tpm39, ROUND(AVG(i.tpm),2) AS tpm
40, IF (AVG(i.tpm) >= agg.avg_tpm40, IF (AVG(i.tpm) >= agg.avg_tpm
41 , CONCAT('-', ROUND(((AVG(i.tpm) - agg.avg_tpm) / agg.avg_tpm) * 100, 2), '%%')41 , CONCAT('+', ROUND(((AVG(i.tpm) - agg.avg_tpm) / agg.avg_tpm) * 100, 2), '%%')
42 , CONCAT('+', ROUND(((agg.avg_tpm- AVG(i.tpm)) / agg.avg_tpm) * 100, 2), '%%')42 , CONCAT('-', ROUND(((agg.avg_tpm - AVG(i.tpm)) / agg.avg_tpm) * 100, 2), '%%')
43 ) as pct_diff_from_avg43 ) as pct_diff_from_avg
44, ROUND(agg.avg_tpm- (AVG(i.tpm)), 2) AS diff_from_avg44, ROUND((AVG(i.tpm) - agg.avg_tpm), 2) AS diff_from_avg
45, IF(ABS(agg.avg_tpm- AVG(i.tpm)) <= agg.stddev_tpm45, IF(ABS(AVG(i.tpm) - agg.avg_tpm) <= agg.stddev_tpm
46 , 'within norms'46 , 'within norms'
47 , 'outside norms'47 , 'outside norms'
48 ) as is_normal48 ) as is_normal
@@ -97,7 +97,7 @@
97"""97"""
98 return report_text98 return report_text
9999
100def getDbt2Report(working_dir, dbt2_config_name, run_id, run_date, server_name, bzr_branch, bzr_revision):100def getDbt2Report(working_dir, bench_config_name, run_id, run_date, server_name, bzr_branch, bzr_revision):
101 """Returns a textual report of the regression over a series of runs"""101 """Returns a textual report of the regression over a series of runs"""
102102
103 # Find the revision comment from BZR103 # Find the revision comment from BZR
@@ -135,7 +135,7 @@
135ORDER BY run_id DESC135ORDER BY run_id DESC
136LIMIT 20136LIMIT 20
137""" % (137""" % (
138 dbt2_config_name138 bench_config_name
139 , server_name139 , server_name
140 , bzr_branch140 , bzr_branch
141 , run_id141 , run_id
@@ -189,11 +189,11 @@
189 i.connections189 i.connections
190, ROUND(AVG(i.tpm),2) AS tpm190, ROUND(AVG(i.tpm),2) AS tpm
191, IF (AVG(i.tpm) >= agg.avg_tpm191, IF (AVG(i.tpm) >= agg.avg_tpm
192 , CONCAT('-', ROUND(((AVG(i.tpm) - agg.avg_tpm) / agg.avg_tpm) * 100, 2), '%%')192 , CONCAT('+', ROUND(((AVG(i.tpm) - agg.avg_tpm) / agg.avg_tpm) * 100, 2), '%%')
193 , CONCAT('+', ROUND(((agg.avg_tpm- AVG(i.tpm)) / agg.avg_tpm) * 100, 2), '%%')193 , CONCAT('-', ROUND(((agg.avg_tpm- AVG(i.tpm)) / agg.avg_tpm) * 100, 2), '%%')
194 ) as pct_diff_from_avg194 ) as pct_diff_from_avg
195, ROUND((agg.avg_tpm- AVG(i.tpm)), 2) AS diff_from_avg195, ROUND((AVG(i.tpm) - agg.avg_tpm), 2) AS diff_from_avg
196, IF(ABS(agg.avg_tpm- AVG(i.tpm)) <= agg.stddev_tpm196, IF(ABS(AVG(i.tpm) - agg.avg_tpm) <= agg.stddev_tpm
197 , 'within norms'197 , 'within norms'
198 , 'outside norms'198 , 'outside norms'
199 ) as is_normal199 ) as is_normal
@@ -224,7 +224,7 @@
224GROUP BY i.connections224GROUP BY i.connections
225ORDER BY i.connections225ORDER BY i.connections
226 """ % (226 """ % (
227 dbt2_config_name227 bench_config_name
228 , server_name228 , server_name
229 , bzr_branch229 , bzr_branch
230 , run_id230 , run_id
231231
=== modified file 'drizzle/automation/reports/drizzleslap.py'
--- drizzle/automation/reports/drizzleslap.py 2009-12-08 19:39:50 +0000
+++ drizzle/automation/reports/drizzleslap.py 2010-01-11 06:21:15 +0000
@@ -99,7 +99,7 @@
9999
100 return report_text100 return report_text
101101
102def getDrizzleslapReport(working_dir, drizzleslap_config_name, run_id, run_date, server_name, bzr_branch, bzr_revision):102def getDrizzleslapReport(working_dir, bench_config_name, run_id, run_date, server_name, bzr_branch, bzr_revision):
103 """Returns a textual report of the results over a series of runs"""103 """Returns a textual report of the results over a series of runs"""
104104
105 # Find the revision comment from BZR105 # Find the revision comment from BZR
@@ -139,7 +139,7 @@
139ORDER BY run_id DESC139ORDER BY run_id DESC
140LIMIT 20140LIMIT 20
141""" % (141""" % (
142 drizzleslap_config_name142 bench_config_name
143 , server_name143 , server_name
144 , bzr_branch144 , bzr_branch
145 , run_id145 , run_id
@@ -228,7 +228,7 @@
228GROUP BY i.engine_name, i.test_name, i.concurrency228GROUP BY i.engine_name, i.test_name, i.concurrency
229ORDER BY i.engine_name, i.test_name, i.concurrency229ORDER BY i.engine_name, i.test_name, i.concurrency
230 """ % (230 """ % (
231 drizzleslap_config_name231 bench_config_name
232 , server_name232 , server_name
233 , bzr_branch233 , bzr_branch
234 , run_id234 , run_id
235235
=== modified file 'drizzle/automation/reports/run.py'
--- drizzle/automation/reports/run.py 2009-12-22 21:04:47 +0000
+++ drizzle/automation/reports/run.py 2010-01-11 06:21:15 +0000
@@ -59,13 +59,12 @@
59 logging.error("The report option requires the --bzr-revision, --bzr-branch CLI options to be supplied. Exiting.")59 logging.error("The report option requires the --bzr-revision, --bzr-branch CLI options to be supplied. Exiting.")
60 return False60 return False
6161
62 if report_name == 'sysbench':62 # For reports, we need a config file, a server, a revision, and a branch
63 # For sysbench We need a config file, a server, a revision, and a branch63 try:
64 try:64 bench_config_name= variables['bench_config_name']
65 sysbench_config= variables['sysbench_config']65 except KeyError:
66 except KeyError:66 logging.error("The %s report requires the --bench-config-name, --bzr-revision, --bzr-branch CLI options to be supplied. Exiting." % report_name)
67 logging.error("The sysbench report requires the --sysbench-config, --bzr-revision, --bzr-branch CLI options to be supplied. Exiting.")67 return False
68 return False
6968
70 try:69 try:
71 server_name= variables['server']70 server_name= variables['server']
@@ -74,62 +73,62 @@
7473
75 if report_name == 'sysbench':74 if report_name == 'sysbench':
76 import drizzle.automation.reports.sysbench as reports75 import drizzle.automation.reports.sysbench as reports
77 run_id= util.getLastRunId(variables['sysbench_config'], server_name, variables['bzr_branch'], int(variables['bzr_revision']))76 run_id= util.getLastRunId(bench_config_name, server_name, variables['bzr_branch'], int(variables['bzr_revision']))
78 if run_id is None:77 if run_id is None:
79 logging.error("Could not find the last run ID for config %s, server %s, branch %s at revision %s. Exiting."78 logging.error("Could not find the last run ID for config %s, server %s, branch %s at revision %s. Exiting."
80 % (79 % (
81 sysbench_config_name80 bench_config_name
82 , server_name81 , server_name
83 , variables['bzr_branch']82 , variables['bzr_branch']
84 , variables['bzr_revision']83 , variables['bzr_revision']
85 ))84 ))
86 sys.exit(1)85 sys.exit(1)
87 report_text= reports.getSysbenchRegressionReportForRunId(run_id, sysbench_config, server_name, variables['bzr_branch'], int(variables['bzr_revision']))86 report_text= reports.getSysbenchRegressionReportForRunId(run_id, bench_config_name, server_name, variables['bzr_branch'], int(variables['bzr_revision']))
88 email_or_display_report(variables['with_email_report'], variables['sysbench']['report_email'], 'SYSBENCH', report_text, bzr_revision, run_id)87 email_or_display_report(variables['with_email_report'], variables['sysbench']['report_email'], 'SYSBENCH', report_text, bzr_revision, run_id)
8988
90 elif report_name == 'sqlbench':89 elif report_name == 'sqlbench':
91 import drizzle.automation.reports.sqlbench as reports90 import drizzle.automation.reports.sqlbench as reports
92 run_id= util.getLastRunId(variables['sqlbench']['sqlbench_config_name'], server_name, variables['bzr_branch'], int(variables['bzr_revision']))91 run_id= util.getLastRunId(bench_config_name, server_name, variables['bzr_branch'], int(variables['bzr_revision']))
93 if run_id is None:92 if run_id is None:
94 logging.error("Could not find the last run ID for config %s, server %s, branch %s at revision %s. Exiting."93 logging.error("Could not find the last run ID for config %s, server %s, branch %s at revision %s. Exiting."
95 % (94 % (
96 variables['sqlbench']['sqlbench_config_name']95 bench_config_name
97 , server_name96 , server_name
98 , variables['bzr_branch']97 , variables['bzr_branch']
99 , variables['bzr_revision']98 , variables['bzr_revision']
100 ))99 ))
101 sys.exit(1)100 sys.exit(1)
102 report_text= reports.getSqlbenchReport(None, variables['sqlbench']['sqlbench_config_name'], run_id, 'N/A', server_name, variables['bzr_branch'], int(variables['bzr_revision']), variables['engine'])101 report_text= reports.getSqlbenchReport(None, bench_config_name, run_id, 'N/A', server_name, variables['bzr_branch'], int(variables['bzr_revision']), variables['engine'])
103 email_or_display_report(variables['with_email_report'], variables['sqlbench']['report_email'], 'SQLBENCH', report_text, bzr_revision, run_id)102 email_or_display_report(variables['with_email_report'], variables['sqlbench']['report_email'], 'SQLBENCH', report_text, bzr_revision, run_id)
104103
105 elif report_name == 'drizzleslap':104 elif report_name == 'drizzleslap':
106 import drizzle.automation.reports.drizzleslap as reports105 import drizzle.automation.reports.drizzleslap as reports
107 run_id= util.getLastRunId(variables['drizzleslap']['drizzleslap_config_name'], server_name, variables['bzr_branch'], int(variables['bzr_revision']))106 run_id= util.getLastRunId(bench_config_name, server_name, variables['bzr_branch'], int(variables['bzr_revision']))
108 if run_id is None:107 if run_id is None:
109 logging.error("Could not find the last run ID for config %s, server %s, branch %s at revision %s. Exiting."108 logging.error("Could not find the last run ID for config %s, server %s, branch %s at revision %s. Exiting."
110 % (109 % (
111 variables['drizzleslap']['drizzleslap_config_name']110 bench_config_name
112 , server_name111 , server_name
113 , variables['bzr_branch']112 , variables['bzr_branch']
114 , variables['bzr_revision']113 , variables['bzr_revision']
115 ))114 ))
116 sys.exit(1)115 sys.exit(1)
117 report_text= reports.getDrizzleslapReport(None, variables['drizzleslap']['drizzleslap_config_name'], run_id, 'N/A', server_name, variables['bzr_branch'], int(variables['bzr_revision']))116 report_text= reports.getDrizzleslapReport(None, bench_config_name, run_id, 'N/A', server_name, variables['bzr_branch'], int(variables['bzr_revision']))
118 email_or_display_report(variables['with_email_report'], variables['drizzleslap']['report_email'], 'DRIZZLESLAP', report_text, bzr_revision, run_id)117 email_or_display_report(variables['with_email_report'], variables['drizzleslap']['report_email'], 'DRIZZLESLAP', report_text, bzr_revision, run_id)
119118
120 elif report_name == 'dbt2':119 elif report_name == 'dbt2':
121 import drizzle.automation.reports.dbt2 as reports120 import drizzle.automation.reports.dbt2 as reports
122 run_id= util.getLastRunId(variables['dbt2']['dbt2_config_name'], server_name, variables['bzr_branch'], int(variables['bzr_revision']))121 run_id= util.getLastRunId(bench_config_name, server_name, variables['bzr_branch'], int(variables['bzr_revision']))
123 if run_id is None:122 if run_id is None:
124 logging.error("Could not find the last run ID for config %s, server %s, branch %s at revision %s. Exiting."123 logging.error("Could not find the last run ID for config %s, server %s, branch %s at revision %s. Exiting."
125 % (124 % (
126 variables['dbt2']['dbt2_config_name']125 bench_config_name
127 , server_name126 , server_name
128 , variables['bzr_branch']127 , variables['bzr_branch']
129 , variables['bzr_revision']128 , variables['bzr_revision']
130 ))129 ))
131 sys.exit(1)130 sys.exit(1)
132 report_text= reports.getDbt2Report(None, variables['dbt2']['dbt2_config_name'], run_id, 'N/A', server_name, variables['bzr_branch'], int(variables['bzr_revision']))131 report_text= reports.getDbt2Report(None, bench_config_name, run_id, 'N/A', server_name, variables['bzr_branch'], int(variables['bzr_revision']))
133 email_or_display_report(variables['with_email_report'], variables['dbt2']['report_email'], 'DBT2', report_text, bzr_revision, run_id)132 email_or_display_report(variables['with_email_report'], variables['dbt2']['report_email'], 'DBT2', report_text, bzr_revision, run_id)
134133
135 else: 134 else:
136135
=== modified file 'drizzle/automation/reports/sqlbench.py'
--- drizzle/automation/reports/sqlbench.py 2009-12-22 21:04:47 +0000
+++ drizzle/automation/reports/sqlbench.py 2010-01-11 06:21:15 +0000
@@ -98,7 +98,7 @@
98"""98"""
99 return report_text99 return report_text
100100
101def getSqlbenchReport(working_dir, sqlbench_config_name, run_id, run_date, server_name, bzr_branch, bzr_revision, storage_engine):101def getSqlbenchReport(working_dir, bench_config_name, run_id, run_date, server_name, bzr_branch, bzr_revision, storage_engine):
102 """Returns a textual report of the regression over a series of runs"""102 """Returns a textual report of the regression over a series of runs"""
103103
104 # Find the revision comment from BZR104 # Find the revision comment from BZR
@@ -136,7 +136,7 @@
136ORDER BY run_id DESC136ORDER BY run_id DESC
137LIMIT 20137LIMIT 20
138""" % (138""" % (
139 sqlbench_config_name139 bench_config_name
140 , server_name140 , server_name
141 , bzr_branch141 , bzr_branch
142 , run_id142 , run_id
@@ -228,7 +228,7 @@
228GROUP BY i.engine, i.operation_name228GROUP BY i.engine, i.operation_name
229ORDER BY i.engine, i.operation_name229ORDER BY i.engine, i.operation_name
230 """ % (230 """ % (
231 sqlbench_config_name231 bench_config_name
232 , server_name232 , server_name
233 , bzr_branch233 , bzr_branch
234 , run_id234 , run_id
235235
=== modified file 'drizzle/automation/reports/sysbench.py'
--- drizzle/automation/reports/sysbench.py 2009-11-23 19:16:20 +0000
+++ drizzle/automation/reports/sysbench.py 2010-01-11 06:21:15 +0000
@@ -30,7 +30,7 @@
30import socket30import socket
31import commands31import commands
3232
33def get5and20RevisionRanges(sysbench_config, server_name, bzr_branch, run_id):33def get5and20RevisionRanges(bench_config_name, server_name, bzr_branch, run_id):
34 """Return a tuple with 2 ranges of run_id values for the last 5 and 20 runs"""34 """Return a tuple with 2 ranges of run_id values for the last 5 and 20 runs"""
35 sql= """35 sql= """
36SELECT 36SELECT
@@ -44,7 +44,7 @@
44ORDER BY run_id DESC44ORDER BY run_id DESC
45LIMIT 2045LIMIT 20
46""" % (46""" % (
47 sysbench_config47 bench_config_name
48 , server_name48 , server_name
49 , bzr_branch49 , bzr_branch
50 , run_id50 , run_id
@@ -105,7 +105,7 @@
105 )105 )
106 return db.get_select(sql)106 return db.get_select(sql)
107107
108def getAllRegressionForBranchAndConfig(sysbench_config, server_name, bzr_branch, run_id):108def getAllRegressionForBranchAndConfig(bench_config_name, server_name, bzr_branch, run_id):
109 sql= """109 sql= """
110SELECT 110SELECT
111 i.concurrency111 i.concurrency
@@ -146,7 +146,7 @@
146GROUP BY i.concurrency146GROUP BY i.concurrency
147ORDER BY i.concurrency147ORDER BY i.concurrency
148 """ % (148 """ % (
149 sysbench_config149 bench_config_name
150 , server_name150 , server_name
151 , bzr_branch151 , bzr_branch
152 , run_id152 , run_id
@@ -154,10 +154,10 @@
154154
155 return db.get_select(sql)155 return db.get_select(sql)
156156
157def getSysbenchRegressionReportForRunId(run_id, sysbench_config, server_name, bzr_branch, bzr_revision):157def getSysbenchRegressionReportForRunId(run_id, bench_config_name, server_name, bzr_branch, bzr_revision):
158 """Returns a textual report of the regression over a series of runs given a supplied run ID"""158 """Returns a textual report of the regression over a series of runs given a supplied run ID"""
159 159
160 (last_5_revs, last_20_revs)= get5and20RevisionRanges(sysbench_config, server_name, bzr_branch, run_id)160 (last_5_revs, last_20_revs)= get5and20RevisionRanges(bench_config_name, server_name, bzr_branch, run_id)
161 161
162 report_text= """=========================================================================================================162 report_text= """=========================================================================================================
163REGRESSION REPORT163REGRESSION REPORT
@@ -175,7 +175,7 @@
175""" % (175""" % (
176 socket.gethostname()176 socket.gethostname()
177 , run_id177 , run_id
178 , sysbench_config178 , bench_config_name
179 , server_name179 , server_name
180 , bzr_branch180 , bzr_branch
181 , int(bzr_revision)181 , int(bzr_revision)
@@ -214,14 +214,14 @@
214=========================================================================================================214=========================================================================================================
215"""215"""
216216
217 results= getAllRegressionForBranchAndConfig(sysbench_config, server_name, bzr_branch, run_id)217 results= getAllRegressionForBranchAndConfig(bench_config_name, server_name, bzr_branch, run_id)
218 for result in results:218 for result in results:
219 report_text= report_text + "%-6s %9s %15s %10s %14s %10s %10s %10s %10s\n" % tuple(result)219 report_text= report_text + "%-6s %9s %15s %10s %14s %10s %10s %10s %10s\n" % tuple(result)
220 report_text= report_text + "========================================================================================================="220 report_text= report_text + "========================================================================================================="
221221
222 return report_text222 return report_text
223223
224def getSysbenchRegressionReport(working_dir, sysbench_config, run_id, run_date, server_name, bzr_branch, bzr_revision):224def getSysbenchRegressionReport(working_dir, bench_config_name, run_id, run_date, server_name, bzr_branch, bzr_revision):
225 """Returns a textual report of the regression over a series of runs"""225 """Returns a textual report of the regression over a series of runs"""
226226
227 # Find the revision comment from BZR227 # Find the revision comment from BZR
@@ -243,7 +243,7 @@
243 else:243 else:
244 full_commentary= None244 full_commentary= None
245 245
246 (last_5_revs, last_20_revs)= get5and20RevisionRanges(sysbench_config, server_name, bzr_branch, run_id)246 (last_5_revs, last_20_revs)= get5and20RevisionRanges(bench_config_name, server_name, bzr_branch, run_id)
247 247
248 report_text= """=========================================================================================================248 report_text= """=========================================================================================================
249REGRESSION REPORT249REGRESSION REPORT
@@ -263,7 +263,7 @@
263 socket.gethostname()263 socket.gethostname()
264 , run_id264 , run_id
265 , run_date265 , run_date
266 , sysbench_config266 , bench_config_name
267 , server_name267 , server_name
268 , bzr_branch268 , bzr_branch
269 , int(bzr_revision)269 , int(bzr_revision)
@@ -301,7 +301,7 @@
301=========================================================================================================301=========================================================================================================
302"""302"""
303303
304 results= getAllRegressionForBranchAndConfig(sysbench_config, server_name, bzr_branch, run_id)304 results= getAllRegressionForBranchAndConfig(bench_config_name, server_name, bzr_branch, run_id)
305 for result in results:305 for result in results:
306 report_text= report_text + "%-6s %9s %15s %10s %14s %10s %10s %10s %10s\n" % tuple(result)306 report_text= report_text + "%-6s %9s %15s %10s %14s %10s %10s %10s %10s\n" % tuple(result)
307 report_text= report_text + "========================================================================================================="307 report_text= report_text + "========================================================================================================="
308308
=== modified file 'drizzle/automation/runner.py'
--- drizzle/automation/runner.py 2009-12-22 21:04:47 +0000
+++ drizzle/automation/runner.py 2010-01-11 06:21:15 +0000
@@ -49,7 +49,7 @@
49 If we wanted to run the "sysbench" command against this branch for revisions49 If we wanted to run the "sysbench" command against this branch for revisions
50 r930 through r932, we could call the drizzle-automation script like so:50 r930 through r932, we could call the drizzle-automation script like so:
5151
52 $> drizzle-automation --sysbench-config=some_benchmark_config --bzr-branch=trunk --r930..932 sysbench52 $> drizzle-automation --bench-config=some_benchmark_config --bzr-branch=trunk --r930..932 sysbench
5353
54 This would create 3 sandboxes:54 This would create 3 sandboxes:
5555
5656
=== modified file 'drizzle/automation/sqlbench/run.py'
--- drizzle/automation/sqlbench/run.py 2009-12-22 21:04:47 +0000
+++ drizzle/automation/sqlbench/run.py 2010-01-11 06:21:15 +0000
@@ -86,11 +86,8 @@
86 working_dir= variables['working_dir']86 working_dir= variables['working_dir']
87 run_date= datetime.datetime.now().isoformat()87 run_date= datetime.datetime.now().isoformat()
88 server_name= variables['server']88 server_name= variables['server']
89 # need the location where the sqlbench repository is located89 # name of the configuration file to use
90 sqlbench_home= variables['sqlbench']['sqlbench_home']90 bench_config_name= variables['bench_config_name']
91 # the name of the script to run
92 # sqlbench_config_name is set to "sqlbench" for now
93 sqlbench_config_name= variables['sqlbench']['sqlbench_config_name']
94 os.chdir(working_dir)91 os.chdir(working_dir)
9592
96 # For BZR mode, the "version" of the server (used in identifying the 93 # For BZR mode, the "version" of the server (used in identifying the
@@ -160,7 +157,13 @@
160 sys.exit(1)157 sys.exit(1)
161158
162 run_id= util.getNextRunId()159 run_id= util.getNextRunId()
163 config_id= util.getConfigId(sqlbench_config_name)160 config_id= util.getConfigId(bench_config_name)
161
162 # load the configuration file
163 sqlbench_config_variables= util.loadConfigFile("sqlbench", bench_config_name)
164
165 # need the location where the sqlbench repository is located
166 sqlbench_home= sqlbench_config_variables['run']['sqlbench_home']
164167
165 try:168 try:
166 storage_engine= variables['engine']169 storage_engine= variables['engine']
@@ -197,7 +200,7 @@
197 # send email report200 # send email report
198 if variables['with_email_report'] is True:201 if variables['with_email_report'] is True:
199 import drizzle.automation.reports.sqlbench as reports202 import drizzle.automation.reports.sqlbench as reports
200 email_text= reports.getSqlbenchReport(working_dir, sqlbench_config_name, run_id, run_date, server_name, variables['bzr_branch'], int(variables['bzr_revision']), storage_engine)203 email_text= reports.getSqlbenchReport(working_dir, bench_config_name, run_id, run_date, server_name, variables['bzr_branch'], int(variables['bzr_revision']), storage_engine)
201 logging.info("Sending email...")204 logging.info("Sending email...")
202 # bug https://bugs.launchpad.net/launchpad/+bug/419562 - need to use registered launchpad name for from205 # bug https://bugs.launchpad.net/launchpad/+bug/419562 - need to use registered launchpad name for from
203 #from_string= ('%s <drizzle-benchmark@lists.launchpad.net>' % socket.gethostname())206 #from_string= ('%s <drizzle-benchmark@lists.launchpad.net>' % socket.gethostname())
204207
=== modified file 'drizzle/automation/sysbench/run.py'
--- drizzle/automation/sysbench/run.py 2009-12-17 17:18:18 +0000
+++ drizzle/automation/sysbench/run.py 2010-01-11 06:21:15 +0000
@@ -59,7 +59,7 @@
59 , concurrency59 , concurrency
60 , variable_name60 , variable_name
61 , value61 , value
62 ) VALUES ('%s', '%s', '%s', %d, %d, '%s', %d)""" % (server_version, sysbench_config, run_date, int(concurrency), name, value)62 ) VALUES ('%s', '%s', '%s', %d, %d, '%s', %d)""" % (server_version, bench_config_name, run_date, int(concurrency), name, value)
63 db.execute_sql(sql)63 db.execute_sql(sql)
64 except:64 except:
65 continue65 continue
@@ -118,80 +118,35 @@
118118
119class Sysbench:119class Sysbench:
120120
121 def __init__(self, config_name, server_name, server_port):121 def __init__(self, bench_config_name, server_name, server_port):
122 self._bench_cmd= "sysbench"122 self._bench_cmd= "sysbench"
123 self._config_name= config_name123 self._bench_config_name= bench_config_name
124 self._config_id= None124 self._config_id= None
125 self._server_name= server_name125 self._server_name= server_name
126 self._server_port= server_port126 self._server_port= server_port
127 self.loadConfigFile()127
128128 def getConcurrencyLevels(self, sysbench_config_variables, bench_config_name):
129 def loadConfigFile(self):
130 """Finds and parses the configuration file for the supplied config name"""
131 # A configuration file containing benchmark program and server
132 # parameters is required. If the --sysbench-config=NAME is a relative
133 # filename, we search in /etc/drizzle-automation/sysbench/ for a
134 # file called NAME.cnf
135
136 logging.info("Loading sysbench configuration for config name %s." % self._config_name)
137 sysbench_variables= {} # This is what we return to the caller
138
139 locations=[]
140 config_file= self._config_name
141 if not config_file.endswith(".cnf"):
142 config_file= config_file + ".cnf"
143
144 if not config_file.startswith(os.path.sep):
145 # Assume all relative config files are in /etc/drizzle-automation/sysbench/
146 locations.append(os.path.join(os.path.sep, "etc", "drizzle-automation", "sysbench", config_file))
147 locations.append(os.path.expanduser(os.path.join("~", ".drizzle-automation", "sysbench", config_file)))
148 else:
149 locations.append(config_file)
150
151 config_file_found=False
152 for test_config_file in locations:
153 if os.path.exists(test_config_file):
154 config_file_found=True
155 if not config_file_found:
156 logging.error("Specified sysbench configuration file not found: \"%s\". Exiting." % config_file)
157 sys.exit(1)
158
159 import ConfigParser
160 parser= ConfigParser.RawConfigParser()
161 parser.read(locations)
162 for sec in parser.sections():
163 sysbench_variables[sec]= {}
164 for k,v in parser.items(sec):
165 sysbench_variables[sec][k]= v
166
167 self._config_variables= sysbench_variables
168 self.setRunOptions(sysbench_variables['sysbench'])
169
170 if 'build' in sysbench_variables.keys():
171 self.setBuildOptions(sysbench_variables['build'])
172
173 def getConcurrencyLevels(self):
174 """Returns a sequence of concurrency levels this sysbench will run"""129 """Returns a sequence of concurrency levels this sysbench will run"""
175 try:130 try:
176 concurrency_levels= [int(x) for x in self._config_variables['run']['concurrency'].split(",")]131 concurrency_levels= [int(x) for x in sysbench_config_variables['run']['concurrency'].split(",")]
177 return concurrency_levels132 return concurrency_levels
178 except KeyError:133 except KeyError:
179 logging.error("concurrency is required in configuration section [run] for %s. Exiting." % self._config_name)134 logging.error("concurrency is required in configuration section [run] for %s. Exiting." % bench_config_name)
180 sys.exit(1)135 sys.exit(1)
181136
182 def getIterations(self):137 def getIterations(self, sysbench_config_variables, bench_config_name):
183 """Returns the number of iterations this sysbench will run"""138 """Returns the number of iterations this sysbench will run"""
184 try:139 try:
185 iterations= int(self._config_variables['run']['iterations'])140 iterations= int(sysbench_config_variables['run']['iterations'])
186 return iterations141 return iterations
187 except KeyError:142 except KeyError:
188 logging.error("iterations is required in configuration section [run] for %s. Exiting." % self._config_name)143 logging.error("iterations is required in configuration section [run] for %s. Exiting." % bench_config_name)
189 sys.exit(1)144 sys.exit(1)
190145
191 def getServerOptions(self, server_name):146 def getServerOptions(self, sysbench_config_variables, server_name):
192 """Returns a dictionary of server-specific options loaded from sysbench config file"""147 """Returns a dictionary of server-specific options loaded from sysbench config file"""
193 if server_name in self._config_variables.keys():148 if server_name in sysbench_config_variables.keys():
194 return self._config_variables[server_name]149 return sysbench_config_variables[server_name]
195 else:150 else:
196 logging.warning("Did not find any variables in sysbench config file for server section %s" % server_name)151 logging.warning("Did not find any variables in sysbench config file for server section %s" % server_name)
197 return {}152 return {}
@@ -303,7 +258,7 @@
303 # we are benchmarking.258 # we are benchmarking.
304259
305 working_dir= variables['working_dir']260 working_dir= variables['working_dir']
306 sysbench_config= variables['sysbench_config']261 bench_config_name= variables['bench_config_name']
307 run_date= datetime.datetime.now().isoformat()262 run_date= datetime.datetime.now().isoformat()
308263
309 server_name= variables['server']264 server_name= variables['server']
@@ -350,7 +305,13 @@
350 client= client_adapter(variables['working_dir'], server.getPort())305 client= client_adapter(variables['working_dir'], server.getPort())
351306
352 # Initialize sysbench runner instance and load config file307 # Initialize sysbench runner instance and load config file
353 sysbench= Sysbench(sysbench_config, server_name, server.getPort())308 sysbench= Sysbench(bench_config_name, server_name, server.getPort())
309
310 sysbench_config_variables= util.loadConfigFile("sysbench", bench_config_name)
311 sysbench.setRunOptions(sysbench_config_variables['sysbench'])
312
313 if 'build' in sysbench_config_variables.keys():
314 sysbench.setBuildOptions(sysbench_config_variables['build'])
354315
355 # The sysbench configuration file can specify configure and make options316 # The sysbench configuration file can specify configure and make options
356 # which is why we delay building until this point, which is after the 317 # which is why we delay building until this point, which is after the
@@ -364,7 +325,7 @@
364 builder.build(variables['force_build'])325 builder.build(variables['force_build'])
365 326
366 # Set the startup options of the server from the sysbench configuration file327 # Set the startup options of the server from the sysbench configuration file
367 server.setStartOptions(sysbench.getServerOptions(server_name))328 server.setStartOptions(sysbench.getServerOptions(sysbench_config_variables, server_name))
368329
369 server.stopAll()330 server.stopAll()
370331
@@ -385,10 +346,10 @@
385 # under the profiler now that the database is prepared346 # under the profiler now that the database is prepared
386 util.get_profile_options(server,variables['profiler'])347 util.get_profile_options(server,variables['profiler'])
387348
388 concurrency_levels= sysbench.getConcurrencyLevels()349 concurrency_levels= sysbench.getConcurrencyLevels(sysbench_config_variables, bench_config_name)
389 iterations= sysbench.getIterations()350 iterations= sysbench.getIterations(sysbench_config_variables, bench_config_name)
390 run_id= util.getNextRunId()351 run_id= util.getNextRunId()
391 config_id= util.getConfigId(sysbench_config)352 config_id= util.getConfigId(bench_config_name)
392353
393 # Run the benchmarks for the specified config354 # Run the benchmarks for the specified config
394 for concurrency in concurrency_levels:355 for concurrency in concurrency_levels:
@@ -398,7 +359,7 @@
398 logging.warning("Server not running. Re-starting...")359 logging.warning("Server not running. Re-starting...")
399 server.start()360 server.start()
400361
401 logging.info("Running sysbench config %s for concurrency at %d - iteration %d." % (sysbench_config, concurrency, iteration))362 logging.info("Running sysbench config %s for concurrency at %d - iteration %d." % (bench_config_name, concurrency, iteration))
402363
403 result= sysbench.run(concurrency)364 result= sysbench.run(concurrency)
404365
@@ -431,7 +392,7 @@
431392
432 if variables['with_email_report'] is True:393 if variables['with_email_report'] is True:
433 import drizzle.automation.reports.sysbench as reports394 import drizzle.automation.reports.sysbench as reports
434 email_text= reports.getSysbenchRegressionReport(working_dir, sysbench_config, run_id, run_date, server_name, variables['bzr_branch'], int(variables['bzr_revision']))395 email_text= reports.getSysbenchRegressionReport(working_dir, bench_config_name, run_id, run_date, server_name, variables['bzr_branch'], int(variables['bzr_revision']))
435 # bug https://bugs.launchpad.net/launchpad/+bug/419562 - need to use registered launchpad name for from396 # bug https://bugs.launchpad.net/launchpad/+bug/419562 - need to use registered launchpad name for from
436 #from_string= ('%s <drizzle-benchmark@lists.launchpad.net>' % socket.gethostname())397 #from_string= ('%s <drizzle-benchmark@lists.launchpad.net>' % socket.gethostname())
437 from_string= ('%s <eday@oddments.org>' % socket.gethostname())398 from_string= ('%s <eday@oddments.org>' % socket.gethostname())

Subscribers

People subscribed via source and target branches

to all changes: