9
# This program is free software; you can redistribute it and/or modify
10
# it under the terms of the GNU General Public License as published by
11
# the Free Software Foundation; version 2 of the License.
13
# This program is distributed in the hope that it will be useful,
14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
# GNU General Public License for more details.
18
# You should have received a copy of the GNU General Public License
19
# along with this program; if not, write to the Free Software
20
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
7
##############################################################################
25
9
# drizzle-test-run.pl
39
23
# - To make this Perl script easy to alter even for those that not
40
24
# code Perl that often, keeep the coding style as close as possible to
41
# the C/C++ drizzle coding standard.
25
# the C/C++ MySQL coding standard.
43
27
# - All lists of arguments to send to commands are Perl lists/arrays,
44
28
# not strings we append args to. Within reason, most string
45
29
# concatenation for arguments should be avoided.
47
31
# - Functions defined in the main program are not to be prefixed,
48
# functions in "library files" are to be prefixed with "dtr_" (for
49
# Drizzle-Test-Run). There are some exceptions, code that fits best in
32
# functions in "library files" are to be prefixed with "mtr_" (for
33
# Mysql-Test-Run). There are some exceptions, code that fits best in
50
34
# the main program, but are put into separate files to avoid
51
35
# clutter, may be without prefix.
457
440
# If so requested, we try to avail ourselves of a unique build thread number.
458
if ( $ENV{'DTR_BUILD_THREAD'} ) {
459
if ( lc($ENV{'DTR_BUILD_THREAD'}) eq 'auto' ) {
441
if ( $ENV{'MTR_BUILD_THREAD'} ) {
442
if ( lc($ENV{'MTR_BUILD_THREAD'}) eq 'auto' ) {
460
443
print "Requesting build thread... ";
461
$ENV{'DTR_BUILD_THREAD'} = dtr_require_unique_id_and_wait("/tmp/drizzle-test-ports", 200, 299);
462
print "got ".$ENV{'DTR_BUILD_THREAD'}."\n";
444
$ENV{'MTR_BUILD_THREAD'} = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
445
print "got ".$ENV{'MTR_BUILD_THREAD'}."\n";
466
if ( $ENV{'DTR_BUILD_THREAD'} )
449
if ( $ENV{'MTR_BUILD_THREAD'} )
468
set_dtr_build_thread_ports($ENV{'DTR_BUILD_THREAD'});
451
set_mtr_build_thread_ports($ENV{'MTR_BUILD_THREAD'});
471
454
# This is needed for test log evaluation in "gen-build-status-page"
507
490
'master_port=i' => \$opt_master_myport,
508
491
'slave_port=i' => \$opt_slave_myport,
509
492
'memc_port=i' => \$opt_memc_myport,
510
'pbms_port=i' => \$opt_pbms_myport,
511
'dtr-build-thread=i' => \$opt_dtr_build_thread,
493
'mtr-build-thread=i' => \$opt_mtr_build_thread,
513
495
# Test case authoring
514
496
'record' => \$opt_record,
515
497
'check-testcases' => \$opt_check_testcases,
516
498
'mark-progress' => \$opt_mark_progress,
518
# Extra options used when starting drizzled
519
'drizzled=s' => \@opt_extra_drizzled_opt,
500
# Extra options used when starting mysqld
501
'mysqld=s' => \@opt_extra_mysqld_opt,
520
502
'engine=s' => \$opt_engine,
522
504
# Run test on running server
638
619
# Find the absolute path to the test directory
639
620
if ( ! $opt_testdir )
641
$glob_drizzle_test_dir= cwd();
622
$glob_mysql_test_dir= cwd();
645
$glob_drizzle_test_dir= $opt_testdir;
626
$glob_mysql_test_dir= $opt_testdir;
647
$default_vardir= "$glob_drizzle_test_dir/var";
648
$default_top_srcdir= "$glob_drizzle_test_dir/..";
649
$default_top_builddir= "$glob_drizzle_test_dir/..";
628
$default_vardir= "$glob_mysql_test_dir/var";
629
$default_top_srcdir= "$glob_mysql_test_dir/..";
630
$default_top_builddir= "$glob_mysql_test_dir/..";
651
632
if ( ! $opt_suitepath )
653
$glob_suite_path= "$glob_drizzle_test_dir/../plugin";
634
$glob_suite_path= "$glob_mysql_test_dir/../plugin";
657
638
$glob_suite_path= $opt_suitepath;
659
640
# In most cases, the base directory we find everything relative to,
660
# is the parent directory of the "drizzle-test" directory. For source
641
# is the parent directory of the "mysql-test" directory. For source
661
642
# distributions, TAR binary distributions and some other packages.
662
$glob_basedir= dirname($glob_drizzle_test_dir);
643
$glob_basedir= dirname($glob_mysql_test_dir);
664
645
# In the RPM case, binaries and libraries are installed in the
665
646
# default system locations, instead of having our own private base
666
# directory. And we install "/usr/share/drizzle-test". Moving up one
667
# more directory relative to "drizzle-test" gives us a usable base
647
# directory. And we install "/usr/share/mysql-test". Moving up one
648
# more directory relative to "mysql-test" gives us a usable base
668
649
# directory for RPM installs.
669
650
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
682
663
$glob_builddir="..";
685
# Expect drizzle-bench to be located adjacent to the source tree, by default
686
$glob_drizzle_bench_dir= "$glob_basedir/../drizzle-bench"
687
unless defined $glob_drizzle_bench_dir;
688
$glob_drizzle_bench_dir= undef
689
unless -d $glob_drizzle_bench_dir;
691
$glob_timers= dtr_init_timers();
666
# Expect mysql-bench to be located adjacent to the source tree, by default
667
$glob_mysql_bench_dir= "$glob_basedir/../mysql-bench"
668
unless defined $glob_mysql_bench_dir;
669
$glob_mysql_bench_dir= undef
670
unless -d $glob_mysql_bench_dir;
673
$source_dist ? $glob_mysql_test_dir : $glob_basedir;
675
$glob_timers= mtr_init_timers();
694
# Find the drizzled executable to be able to find the drizzled version
678
# Find the mysqld executable to be able to find the mysqld version
695
679
# number as early as possible
698
682
# Look for the client binaries directory
699
$path_client_bindir= dtr_path_exists("$glob_builddir/client",
683
$path_client_bindir= mtr_path_exists("$glob_builddir/client",
700
684
"$glob_basedir/client",
701
685
"$glob_basedir/bin");
703
687
if (!$opt_extern)
705
$exe_drizzled= dtr_exe_exists ("$glob_basedir/drizzled/drizzled",
689
$exe_drizzled= mtr_exe_exists ("$glob_basedir/drizzled/drizzled",
706
690
"$path_client_bindir/drizzled",
707
691
"$glob_basedir/libexec/drizzled",
708
692
"$glob_basedir/bin/drizzled",
709
693
"$glob_basedir/sbin/drizzled",
710
694
"$glob_builddir/drizzled/drizzled");
712
# Use the drizzled found above to find out what features are available
713
collect_drizzled_features();
696
# Use the mysqld found above to find out what features are available
697
collect_mysqld_features();
717
$drizzled_variables{'port'}= 4427;
701
$mysqld_variables{'port'}= 4427;
720
704
if (!$opt_engine)
870
854
$glob_debugger= 1;
871
855
if ( $opt_extern )
873
dtr_error("Can't use --extern when using debugger");
857
mtr_error("Can't use --extern when using debugger");
877
861
# --------------------------------------------------------------------------
878
862
# Check if special exe was selected for master or slave
879
863
# --------------------------------------------------------------------------
880
$exe_master_drizzled= $exe_master_drizzled || $exe_drizzled;
881
$exe_slave_drizzled= $exe_slave_drizzled || $exe_drizzled;
864
$exe_master_mysqld= $exe_master_mysqld || $exe_drizzled;
865
$exe_slave_mysqld= $exe_slave_mysqld || $exe_drizzled;
883
867
# --------------------------------------------------------------------------
884
868
# Check valgrind arguments
885
869
# --------------------------------------------------------------------------
886
870
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
888
dtr_report("Turning on valgrind for all executables");
872
mtr_report("Turning on valgrind for all executables");
889
873
$opt_valgrind= 1;
890
$opt_valgrind_drizzled= 1;
874
$opt_valgrind_mysqld= 1;
891
875
$opt_valgrind_drizzletest= 1;
892
$ENV{'VALGRIND_RUN'} = '1';
894
elsif ( $opt_valgrind_drizzled )
877
elsif ( $opt_valgrind_mysqld )
896
dtr_report("Turning on valgrind for drizzled(s) only");
879
mtr_report("Turning on valgrind for mysqld(s) only");
897
880
$opt_valgrind= 1;
899
882
elsif ( $opt_valgrind_drizzletest )
901
dtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
904
elsif ( $opt_valgrind_drizzleslap )
906
dtr_report("Turning on valgrind for drizzleslap only");
884
mtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
907
885
$opt_valgrind= 1;
910
888
if ( $opt_callgrind )
912
dtr_report("Turning on valgrind with callgrind for drizzled(s)");
890
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
913
891
$opt_valgrind= 1;
914
$opt_valgrind_drizzled= 1;
892
$opt_valgrind_mysqld= 1;
916
894
# Set special valgrind options unless options passed on command line
917
895
push(@valgrind_args, "--trace-children=yes")
1122
1111
# But a fairly safe range seems to be 5001 - 32767
1125
sub set_dtr_build_thread_ports($) {
1126
my $dtr_build_thread= shift;
1114
sub set_mtr_build_thread_ports($) {
1115
my $mtr_build_thread= shift;
1128
if ( lc($dtr_build_thread) eq 'auto' ) {
1117
if ( lc($mtr_build_thread) eq 'auto' ) {
1129
1118
print "Requesting build thread... ";
1130
$ENV{'DTR_BUILD_THREAD'} = $dtr_build_thread = dtr_require_unique_id_and_wait("/tmp/drizzle-test-ports", 200, 299);
1131
print "got ".$dtr_build_thread."\n";
1119
$ENV{'MTR_BUILD_THREAD'} = $mtr_build_thread = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
1120
print "got ".$mtr_build_thread."\n";
1134
$dtr_build_thread= (($dtr_build_thread * 10) % 2000) - 1000;
1123
$mtr_build_thread= (($mtr_build_thread * 10) % 2000) - 1000;
1136
1125
# Up to two masters, up to three slaves
1137
1126
# A magic value in command_line_setup depends on these equations.
1138
$opt_master_myport= gimme_a_good_port($dtr_build_thread + 9000); # and 1
1127
$opt_master_myport= gimme_a_good_port($mtr_build_thread + 9000); # and 1
1141
1130
$opt_slave_myport= gimme_a_good_port($opt_master_myport + 2); # and 3 4
1142
1131
$opt_memc_myport= gimme_a_good_port($opt_master_myport + 10);
1143
$opt_pbms_myport= gimme_a_good_port($opt_master_myport + 11);
1145
1133
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
1147
dtr_error("DTR_BUILD_THREAD number results in a port",
1135
mtr_error("MTR_BUILD_THREAD number results in a port",
1148
1136
"outside 5001 - 32767",
1149
1137
"($opt_master_myport - $opt_master_myport + 10)");
1173
1161
##############################################################################
1176
sub collect_drizzled_features () {
1164
sub collect_mysqld_features () {
1177
1165
my $found_variable_list_start= 0;
1178
1166
my $tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
1181
# Execute "drizzled --help" to get a list
1169
# Execute "mysqld --help --verbose" to get a list
1182
1170
# list of all features and settings
1184
# --no-defaults are to avoid loading
1172
# --no-defaults and --skip-grant-tables are to avoid loading
1185
1173
# system-wide configs and plugins
1187
my $list= `$exe_drizzled --no-defaults --help`;
1175
# --datadir must exist, mysqld will chdir into it
1177
my $list= `$exe_drizzled --no-defaults --datadir=$tmpdir --skip-grant-tables --verbose --help`;
1189
1179
foreach my $line (split('\n', $list))
1194
1184
# Look for version
1195
1185
my $exe_name= basename($exe_drizzled);
1196
dtr_verbose("exe_name: $exe_name");
1186
mtr_verbose("exe_name: $exe_name");
1197
1187
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
1199
1189
#print "Major: $1 Minor: $2 Build: $3\n";
1200
1190
$drizzle_version_id= $1*10000 + $2*100 + $3;
1201
1191
#print "drizzle_version_id: $drizzle_version_id\n";
1202
dtr_report("Drizzle Version $1.$2.$3");
1192
mtr_report("Drizzle Version $1.$2.$3");
1197
if (!$found_variable_list_start)
1199
# Look for start of variables list
1200
if ( $line =~ /[\-]+\s[\-]+/ )
1202
$found_variable_list_start= 1;
1207
# Put variables into hash
1208
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
1210
# print "$1=\"$2\"\n";
1211
$mysqld_variables{$1}= $2;
1215
# The variable list is ended with a blank line
1216
if ( $line =~ /^[\s]*$/ )
1222
# Send out a warning, we should fix the variables that has no
1223
# space between variable name and it's value
1224
# or should it be fixed width column parsing? It does not
1225
# look like that in function my_print_variables in my_getopt.c
1226
mtr_warning("Could not parse variable list line : $line");
1206
1232
rmtree($tmpdir);
1207
dtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1233
mtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1234
mtr_error("Could not find variabes list") unless $found_variable_list_start;
1212
1239
sub run_query($$) {
1213
my ($drizzled, $query)= @_;
1240
my ($mysqld, $query)= @_;
1216
dtr_init_args(\$args);
1243
mtr_init_args(\$args);
1218
dtr_add_arg($args, "--no-defaults");
1219
dtr_add_arg($args, "--skip-stack-trace");
1220
dtr_add_arg($args, "--user=%s", $opt_user);
1221
dtr_add_arg($args, "--port=%d", $drizzled->{'port'});
1222
dtr_add_arg($args, "--silent"); # Tab separated output
1223
dtr_add_arg($args, "-e '%s'", $query);
1245
mtr_add_arg($args, "--no-defaults");
1246
mtr_add_arg($args, "--skip-stack-trace");
1247
mtr_add_arg($args, "--user=%s", $opt_user);
1248
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
1249
mtr_add_arg($args, "--silent"); # Tab separated output
1250
mtr_add_arg($args, "-e '%s'", $query);
1225
1252
my $cmd= "$exe_drizzle " . join(' ', @$args);
1226
dtr_verbose("cmd: $cmd");
1253
mtr_verbose("cmd: $cmd");
1231
sub collect_drizzled_features_from_running_server ()
1258
sub collect_mysqld_features_from_running_server ()
1233
my $list= run_query($master->[0], "use drizzle; SHOW VARIABLES");
1260
my $list= run_query($master->[0], "use mysql; SHOW VARIABLES");
1235
1262
foreach my $line (split('\n', $list))
1256
1283
$exe_libtool= "../libtool";
1257
1284
if ($opt_valgrind or $glob_debugger)
1259
dtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1286
mtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1290
# Look for my_print_defaults
1291
$exe_my_print_defaults=
1293
"$path_client_bindir/my_print_defaults",
1294
"$glob_basedir/extra/my_print_defaults",
1295
"$glob_builddir/extra/my_print_defaults");
1263
1297
# Look for perror
1264
1298
$exe_perror= "perror";
1266
1300
# Look for the client binaries
1267
$exe_drizzledump= dtr_exe_exists("$path_client_bindir/drizzledump");
1268
$exe_drizzleimport= dtr_exe_exists("$path_client_bindir/drizzleimport");
1269
$exe_drizzle= dtr_exe_exists("$path_client_bindir/drizzle");
1270
$exe_drizzleadmin= dtr_exe_exists("$path_client_bindir/drizzleadmin");
1301
$exe_drizzledump= mtr_exe_exists("$path_client_bindir/drizzledump");
1302
$exe_drizzleimport= mtr_exe_exists("$path_client_bindir/drizzleimport");
1303
$exe_drizzle= mtr_exe_exists("$path_client_bindir/drizzle");
1272
1305
if (!$opt_extern)
1274
1307
# Look for SQL scripts directory
1275
1308
if ( $drizzle_version_id >= 50100 )
1277
$exe_drizzleslap= dtr_exe_exists("$path_client_bindir/drizzleslap");
1310
$exe_drizzleslap= mtr_exe_exists("$path_client_bindir/drizzleslap");
1281
1314
# Look for schema_writer
1283
$exe_schemawriter= dtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1316
$exe_schemawriter= mtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1284
1317
"$glob_builddir/drizzled/message/schema_writer");
1287
1320
# Look for drizzletest executable
1289
$exe_drizzletest= dtr_exe_exists("$path_client_bindir/drizzletest");
1322
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1292
1325
# Look for drizzle_client_test executable which may _not_ exist in
1293
1326
# some versions, test using it should be skipped
1295
1328
$exe_drizzle_client_test=
1296
dtr_exe_maybe_exists(
1329
mtr_exe_maybe_exists(
1297
1330
"$glob_basedir/tests/drizzle_client_test",
1298
1331
"$glob_basedir/bin/drizzle_client_test");
1301
1334
# Look for bug25714 executable which may _not_ exist in
1302
1335
# some versions, test using it should be skipped
1304
dtr_exe_maybe_exists(
1337
mtr_exe_maybe_exists(
1305
1338
"$glob_basedir/tests/bug25714");
1310
sub generate_cmdline_drizzledump ($) {
1343
sub generate_cmdline_mysqldump ($) {
1313
dtr_native_path($exe_drizzledump) .
1346
mtr_native_path($exe_drizzledump) .
1314
1347
" --no-defaults -uroot " .
1315
"--port=$drizzled->{'port'} ";
1348
"--port=$mysqld->{'port'} ";
1318
1351
sub generate_cmdline_drizzle ($) {
1321
dtr_native_path($exe_drizzle) .
1322
" -uroot --port=$drizzled->{'port'} ";
1354
mtr_native_path($exe_drizzle) .
1355
" -uroot --port=$mysqld->{'port'} ";
1325
sub generate_cmdline_drizzleadmin ($) {
1328
dtr_native_path($exe_drizzleadmin) .
1329
" -uroot --port=$drizzled->{'port'} ";
1332
1359
##############################################################################
1341
1368
my $exe= $exe_drizzle_client_test;
1344
dtr_init_args(\$args);
1371
mtr_init_args(\$args);
1345
1372
if ( $opt_valgrind_drizzletest )
1347
1374
valgrind_arguments($args, \$exe);
1350
dtr_add_arg($args, "--no-defaults");
1351
dtr_add_arg($args, "--testcase");
1352
dtr_add_arg($args, "--user=root");
1353
dtr_add_arg($args, "--port=$master->[0]->{'port'}");
1377
mtr_add_arg($args, "--no-defaults");
1378
mtr_add_arg($args, "--testcase");
1379
mtr_add_arg($args, "--user=root");
1380
mtr_add_arg($args, "--port=$master->[0]->{'port'}");
1355
1382
if ( $opt_extern || $drizzle_version_id >= 50000 )
1357
dtr_add_arg($args, "--vardir=$opt_vardir")
1384
mtr_add_arg($args, "--vardir=$opt_vardir")
1360
1387
if ( $opt_debug )
1363
1390
"--debug=d:t:A,$path_vardir_trace/log/drizzle_client_test.trace");
1416
1443
$ENV{'LD_LIBRARY_PATH'} ?
1417
1444
split(':', $ENV{'LD_LIBRARY_PATH'}) : (),
1418
1445
@ld_library_paths);
1419
dtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1446
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1421
1448
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
1422
1449
$ENV{'DYLD_LIBRARY_PATH'} ?
1423
1450
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
1424
dtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1451
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1426
1453
# The environment variable used for shared libs on AIX
1427
1454
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
1428
1455
$ENV{'SHLIB_PATH'} ?
1429
1456
split(':', $ENV{'SHLIB_PATH'}) : ());
1430
dtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1457
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1432
1459
# The environment variable used for shared libs on hp-ux
1433
1460
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
1434
1461
$ENV{'LIBPATH'} ?
1435
1462
split(':', $ENV{'LIBPATH'}) : ());
1436
dtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1463
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1438
1465
# --------------------------------------------------------------------------
1439
1466
# Also command lines in .opt files may contain env vars
1470
1497
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1471
1498
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
1472
1499
$ENV{'MC_PORT'}= $opt_memc_myport;
1473
$ENV{'PBMS_PORT'}= $opt_pbms_myport;
1474
$ENV{'DRIZZLE_TCP_PORT'}= $drizzled_variables{'drizzle-protocol.port'};
1476
$ENV{'DTR_BUILD_THREAD'}= $opt_dtr_build_thread;
1478
$ENV{'EXE_DRIZZLE'}= $exe_drizzle;
1500
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'drizzle-protocol.port'};
1502
$ENV{'MTR_BUILD_THREAD'}= $opt_mtr_build_thread;
1504
$ENV{'EXE_MYSQL'}= $exe_drizzle;
1481
1507
# ----------------------------------------------------
1482
1508
# Setup env to childs can execute myqldump
1483
1509
# ----------------------------------------------------
1484
my $cmdline_drizzleadmin= generate_cmdline_drizzleadmin($master->[0]);
1485
my $cmdline_drizzledump= generate_cmdline_drizzledump($master->[0]);
1486
my $cmdline_drizzledumpslave= generate_cmdline_drizzledump($slave->[0]);
1487
my $cmdline_drizzledump_secondary= dtr_native_path($exe_drizzledump) .
1510
my $cmdline_mysqldump= generate_cmdline_mysqldump($master->[0]);
1511
my $cmdline_mysqldumpslave= generate_cmdline_mysqldump($slave->[0]);
1512
my $cmdline_mysqldump_secondary= mtr_native_path($exe_drizzledump) .
1488
1513
" --no-defaults -uroot " .
1489
1514
" --port=$master->[0]->{'secondary_port'} ";
1491
1516
if ( $opt_debug )
1493
$cmdline_drizzledump .=
1494
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-master.trace";
1495
$cmdline_drizzledumpslave .=
1496
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-slave.trace";
1497
$cmdline_drizzledump_secondary .=
1498
" --debug=d:t:A,$path_vardir_trace/log/drizzledump-drizzle.trace";
1518
$cmdline_mysqldump .=
1519
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-master.trace";
1520
$cmdline_mysqldumpslave .=
1521
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-slave.trace";
1522
$cmdline_mysqldump_secondary .=
1523
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-mysql.trace";
1500
$ENV{'DRIZZLE_ADMIN'}= $cmdline_drizzleadmin;
1501
$ENV{'DRIZZLE_DUMP'}= $cmdline_drizzledump;
1502
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_drizzledumpslave;
1503
$ENV{'DRIZZLE_DUMP_SECONDARY'}= $cmdline_drizzledump_secondary;
1525
$ENV{'DRIZZLE_DUMP'}= $cmdline_mysqldump;
1526
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_mysqldumpslave;
1527
$ENV{'DRIZZLE_DUMP_SECONDARY'}= $cmdline_mysqldump_secondary;
1505
1529
# ----------------------------------------------------
1506
1530
# Setup env so we can execute drizzle client
1507
1531
# ----------------------------------------------------
1508
#my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1509
#$ENV{'DRIZZLE'}= $cmdline_drizzle;
1532
my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1533
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1511
1535
# ----------------------------------------------------
1512
# Setup env so childs can execute drizzleslap
1536
# Setup env so childs can execute mysqlslap
1513
1537
# ----------------------------------------------------
1514
1538
if ( $exe_drizzleslap )
1516
my $cmdline_drizzleslap;
1518
if ( $opt_valgrind_drizzleslap )
1520
$cmdline_drizzleslap= "$glob_basedir/libtool --mode=execute valgrind --log-file=$opt_vardir/log/drizzleslap-valgrind.log ";
1522
$cmdline_drizzleslap .=
1523
dtr_native_path($exe_drizzleslap) .
1540
my $cmdline_drizzleslap=
1541
mtr_native_path($exe_drizzleslap) .
1525
1543
"--port=$master->[0]->{'port'} ";
1526
1544
my $cmdline_drizzleslap_secondary=
1527
dtr_native_path($exe_drizzleslap) .
1545
mtr_native_path($exe_drizzleslap) .
1529
1547
" --port=$master->[0]->{'secondary_port'} ";
1544
1562
# ----------------------------------------------------
1545
# Setup env so childs can execute drizzleimport
1563
# Setup env so childs can execute mysqlimport
1546
1564
# ----------------------------------------------------
1547
my $cmdline_drizzleimport=
1548
dtr_native_path($exe_drizzleimport) .
1565
my $cmdline_mysqlimport=
1566
mtr_native_path($exe_drizzleimport) .
1550
1568
"--port=$master->[0]->{'port'} ";
1552
1570
if ( $opt_debug )
1554
$cmdline_drizzleimport .=
1555
" --debug=d:t:A,$path_vardir_trace/log/drizzleimport.trace";
1572
$cmdline_mysqlimport .=
1573
" --debug=d:t:A,$path_vardir_trace/log/mysqlimport.trace";
1557
$ENV{'DRIZZLE_IMPORT'}= $cmdline_drizzleimport;
1560
# ----------------------------------------------------
1561
# Setup env so childs can execute drizzle
1562
# ----------------------------------------------------
1563
my $cmdline_drizzle=
1564
dtr_native_path($exe_drizzle) .
1575
$ENV{'DRIZZLE_IMPORT'}= $cmdline_mysqlimport;
1578
# ----------------------------------------------------
1579
# Setup env so childs can execute mysql
1580
# ----------------------------------------------------
1582
mtr_native_path($exe_drizzle) .
1565
1583
" --no-defaults --host=localhost --user=root --password= " .
1566
1584
"--port=$master->[0]->{'port'} ";
1567
1585
my $cmdline_drizzle_secondary=
1568
dtr_native_path($exe_drizzle) .
1586
mtr_native_path($exe_drizzle) .
1569
1587
" --no-defaults --host=localhost --user=root --password= " .
1570
1588
" --port=$master->[0]->{'secondary_port'} ";
1572
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1590
$ENV{'MYSQL'}= $cmdline_mysql;
1573
1591
$ENV{'DRIZZLE_SECONDARY'}= $cmdline_drizzle_secondary;
1575
1593
# ----------------------------------------------------
1586
1604
# ----------------------------------------------------
1587
# Setup env so childs can execute drizzle_fix_system_tables
1605
# Setup env so childs can execute mysql_fix_system_tables
1588
1606
# ----------------------------------------------------
1589
1607
#if ( !$opt_extern)
1592
my $cmdline_drizzle_fix_system_tables=
1610
my $cmdline_mysql_fix_system_tables=
1593
1611
"$exe_drizzle_fix_system_tables --no-defaults --host=localhost " .
1594
1612
"--user=root --password= " .
1595
1613
"--basedir=$glob_basedir --bindir=$path_client_bindir --verbose " .
1596
1614
"--port=$master->[0]->{'port'} ";
1597
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_drizzle_fix_system_tables;
1615
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_mysql_fix_system_tables;
1601
1619
# ----------------------------------------------------
1620
# Setup env so childs can execute my_print_defaults
1621
# ----------------------------------------------------
1622
$ENV{'DRIZZLE_MY_PRINT_DEFAULTS'}= mtr_native_path($exe_my_print_defaults);
1624
# ----------------------------------------------------
1602
1625
# Setup env so childs can shutdown the server
1603
1626
# ----------------------------------------------------
1604
$ENV{'DRIZZLED_SHUTDOWN'}= dtr_native_path($exe_drizzle);
1627
$ENV{'DRIZZLED_SHUTDOWN'}= mtr_native_path($exe_drizzle);
1606
1629
# ----------------------------------------------------
1607
1630
# Setup env so childs can execute perror
1608
1631
# ----------------------------------------------------
1609
$ENV{'MY_PERROR'}= dtr_native_path($exe_perror);
1632
$ENV{'MY_PERROR'}= mtr_native_path($exe_perror);
1611
1634
# ----------------------------------------------------
1612
# Add the path where drizzled will find ha_example.so
1635
# Add the path where mysqld will find ha_example.so
1613
1636
# ----------------------------------------------------
1614
1637
$ENV{'EXAMPLE_PLUGIN'}=
1615
1638
($lib_example_plugin ? basename($lib_example_plugin) : "");
1617
1640
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
1619
1642
# ----------------------------------------------------
1643
# Setup env so childs can execute myisampack and myisamchk
1644
# ----------------------------------------------------
1645
# $ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
1646
# "$path_client_bindir/myisamchk",
1647
# "$glob_basedir/storage/myisam/myisamchk",
1648
# "$glob_basedir/myisam/myisamchk"));
1649
# $ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
1650
# "$path_client_bindir/myisampack",
1651
# "$glob_basedir/storage/myisam/myisampack",
1652
# "$glob_basedir/myisam/myisampack"));
1654
# ----------------------------------------------------
1620
1655
# We are nice and report a bit about our settings
1621
1656
# ----------------------------------------------------
1622
1657
if (!$opt_extern)
1624
print "Using DTR_BUILD_THREAD = $ENV{DTR_BUILD_THREAD}\n";
1659
print "Using MTR_BUILD_THREAD = $ENV{MTR_BUILD_THREAD}\n";
1625
1660
print "Using MASTER_MYPORT = $ENV{MASTER_MYPORT}\n";
1626
1661
print "Using MASTER_MYPORT1 = $ENV{MASTER_MYPORT1}\n";
1627
1662
print "Using SLAVE_MYPORT = $ENV{SLAVE_MYPORT}\n";
1628
1663
print "Using SLAVE_MYPORT1 = $ENV{SLAVE_MYPORT1}\n";
1629
1664
print "Using SLAVE_MYPORT2 = $ENV{SLAVE_MYPORT2}\n";
1630
1665
print "Using MC_PORT = $ENV{MC_PORT}\n";
1631
print "Using PBMS_PORT = $ENV{PBMS_PORT}\n";
1634
1668
# Create an environment variable to make it possible
1699
1733
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
1701
1735
# Remove the directory which the link points at
1702
dtr_verbose("Removing " . readlink($opt_vardir));
1703
dtr_rmtree(readlink($opt_vardir));
1736
mtr_verbose("Removing " . readlink($opt_vardir));
1737
mtr_rmtree(readlink($opt_vardir));
1705
1739
# Remove the "var" symlink
1706
dtr_verbose("unlink($opt_vardir)");
1740
mtr_verbose("unlink($opt_vardir)");
1707
1741
unlink($opt_vardir);
1709
1743
elsif ( $opt_mem )
1711
1745
# Just remove the "var" symlink
1712
dtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1746
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1714
dtr_verbose("unlink($opt_vardir)");
1748
mtr_verbose("unlink($opt_vardir)");
1715
1749
unlink($opt_vardir);
1719
# Some users creates a soft link in drizzle-test/var to another area
1753
# Some users creates a soft link in mysql-test/var to another area
1720
1754
# - allow it, but remove all files in it
1722
dtr_report("WARNING: Using the 'drizzle-test/var' symlink");
1756
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
1724
1758
# Make sure the directory where it points exist
1725
dtr_error("The destination for symlink $opt_vardir does not exist")
1759
mtr_error("The destination for symlink $opt_vardir does not exist")
1726
1760
if ! -d readlink($opt_vardir);
1728
1762
foreach my $bin ( glob("$opt_vardir/*") )
1730
dtr_verbose("Removing bin $bin");
1764
mtr_verbose("Removing bin $bin");
1737
1771
# Remove the entire "var" dir
1738
dtr_verbose("Removing $opt_vardir/");
1739
dtr_rmtree("$opt_vardir/");
1772
mtr_verbose("Removing $opt_vardir/");
1773
mtr_rmtree("$opt_vardir/");
1742
1776
if ( $opt_mem )
1770
1804
# Create var and the directories needed in var
1772
1806
sub setup_vardir() {
1773
dtr_report("Creating Directories");
1807
mtr_report("Creating Directories");
1775
1809
if ( $opt_vardir eq $default_vardir )
1778
# Running with "var" in drizzle-test dir
1812
# Running with "var" in mysql-test dir
1780
1814
if ( -l $opt_vardir )
1782
1816
# it's a symlink
1784
1818
# Make sure the directory where it points exist
1785
dtr_error("The destination for symlink $opt_vardir does not exist")
1819
mtr_error("The destination for symlink $opt_vardir does not exist")
1786
1820
if ! -d readlink($opt_vardir);
1788
1822
elsif ( $opt_mem )
1790
1824
# Runinng with "var" as a link to some "memory" location, normally tmpfs
1791
dtr_verbose("Creating $opt_mem");
1825
mtr_verbose("Creating $opt_mem");
1792
1826
mkpath($opt_mem);
1794
dtr_report("Symlinking 'var' to '$opt_mem'");
1828
mtr_report("Symlinking 'var' to '$opt_mem'");
1795
1829
symlink($opt_mem, $opt_vardir);
1799
1833
if ( ! -d $opt_vardir )
1801
dtr_verbose("Creating $opt_vardir");
1835
mtr_verbose("Creating $opt_vardir");
1802
1836
mkpath($opt_vardir);
1805
1839
# Ensure a proper error message if vardir couldn't be created
1806
1840
unless ( -d $opt_vardir and -w $opt_vardir )
1808
dtr_error("Writable 'var' directory is needed, use the " .
1842
mtr_error("Writable 'var' directory is needed, use the " .
1809
1843
"'--vardir=<path>' option");
1817
1851
# Create new data dirs
1818
1852
foreach my $data_dir (@data_dir_lst)
1820
mkpath("$data_dir/local/mysql");
1821
system("$exe_schemawriter mysql $data_dir/local/mysql/db.opt");
1854
mkpath("$data_dir/mysql");
1855
system("$exe_schemawriter mysql $data_dir/mysql/db.opt");
1823
mkpath("$data_dir/local/test");
1824
system("$exe_schemawriter test $data_dir/local/test/db.opt");
1857
mkpath("$data_dir/test");
1858
system("$exe_schemawriter test $data_dir/test/db.opt");
1827
1861
# Make a link std_data_ln in var/ that points to std_data
1828
symlink(collapse_path("$glob_drizzle_test_dir/std_data"),
1862
symlink(collapse_path("$glob_mysql_test_dir/std_data"),
1829
1863
"$opt_vardir/std_data_ln");
1831
symlink(collapse_path("$glob_suite_path/filesystem_engine/tests/t"),
1832
"$opt_vardir/filesystem_ln");
1834
1865
# Remove old log files
1835
1866
foreach my $name (glob("r/*.progress r/*.log r/*.warnings"))
1911
drizzled_start($master->[0],[],[]);
1940
mysqld_start($master->[0],[],[]);
1912
1941
if ( ! $master->[0]->{'pid'} )
1914
dtr_error("Can't start the drizzled server");
1943
mtr_error("Can't start the mysqld server");
1918
dtr_init_args(\$args);
1947
mtr_init_args(\$args);
1920
dtr_add_arg($args, "--user=%s", $opt_user);
1949
mtr_add_arg($args, "--user=%s", $opt_user);
1922
1951
if ( $opt_small_bench )
1924
dtr_add_arg($args, "--small-test");
1925
dtr_add_arg($args, "--small-tables");
1953
mtr_add_arg($args, "--small-test");
1954
mtr_add_arg($args, "--small-tables");
1928
chdir($glob_drizzle_bench_dir)
1929
or dtr_error("Couldn't chdir to '$glob_drizzle_bench_dir': $!");
1957
chdir($glob_mysql_bench_dir)
1958
or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!");
1931
1960
if ( ! $benchmark )
1933
dtr_run("$glob_drizzle_bench_dir/run-all-tests", $args, "", "", "", "");
1962
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
1934
1963
# FIXME check result code?!
1936
1965
elsif ( -x $benchmark )
1938
dtr_run("$glob_drizzle_bench_dir/$benchmark", $args, "", "", "", "");
1967
mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", "");
1939
1968
# FIXME check result code?!
1943
dtr_error("Benchmark $benchmark not found");
1972
mtr_error("Benchmark $benchmark not found");
1946
chdir($glob_drizzle_test_dir); # Go back
1975
chdir($glob_mysql_test_dir); # Go back
1949
1978
stop_masters();
2509
2538
my $prefix= ""; # If drizzletest server arg
2511
dtr_add_arg($args, "%s--no-defaults", $prefix);
2540
mtr_add_arg($args, "%s--no-defaults", $prefix);
2542
$path_my_basedir= collapse_path($path_my_basedir);
2543
mtr_add_arg($args, "%s--basedir=%s", $prefix, $path_my_basedir);
2513
2545
if ($opt_engine)
2515
dtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2547
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2518
2550
if ( $drizzle_version_id >= 50036)
2520
# By default, prevent the started drizzled to access files outside of vardir
2521
dtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2552
# By default, prevent the started mysqld to access files outside of vardir
2553
mtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2524
dtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2556
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2526
2558
# Increase default connect_timeout to avoid intermittent
2527
2559
# disconnects when test servers are put under load
2528
2560
# see BUG#28359
2529
dtr_add_arg($args, "%s--mysql-protocol.connect-timeout=60", $prefix);
2532
# When drizzled is run by a root user(euid is 0), it will fail
2561
mtr_add_arg($args, "%s--mysql-protocol.connect-timeout=60", $prefix);
2564
# When mysqld is run by a root user(euid is 0), it will fail
2533
2565
# to start unless we specify what user to run as, see BUG#30630
2535
if (grep(/^--user/, @$extra_opt, @opt_extra_drizzled_opt) == 0) {
2536
dtr_add_arg($args, "%s--user=root", $prefix);
2567
if (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
2568
mtr_add_arg($args, "%s--user=root", $prefix);
2539
dtr_add_arg($args, "%s--pid-file=%s", $prefix,
2540
$drizzled->{'path_pid'});
2542
dtr_add_arg($args, "%s--mysql-protocol.port=%d", $prefix,
2543
$drizzled->{'port'});
2545
dtr_add_arg($args, "%s--drizzle-protocol.port=%d", $prefix,
2546
$drizzled->{'secondary_port'});
2548
dtr_add_arg($args, "%s--datadir=%s", $prefix,
2549
$drizzled->{'path_myddir'});
2551
dtr_add_arg($args, "%s--mysql-unix-socket-protocol.path=%s", $prefix,
2552
$drizzled->{'path_sock'});
2571
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
2572
$mysqld->{'path_pid'});
2574
mtr_add_arg($args, "%s--mysql-protocol.port=%d", $prefix,
2577
mtr_add_arg($args, "%s--drizzle-protocol.port=%d", $prefix,
2578
$mysqld->{'secondary_port'});
2580
mtr_add_arg($args, "%s--datadir=%s", $prefix,
2581
$mysqld->{'path_myddir'});
2554
2583
# Check if "extra_opt" contains --skip-log-bin
2555
if ( $drizzled->{'type'} eq 'master' )
2584
if ( $mysqld->{'type'} eq 'master' )
2557
dtr_add_arg($args, "%s--server-id=%d", $prefix,
2586
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2558
2587
$idx > 0 ? $idx + 101 : 1);
2561
"%s--innodb.data-file-path=ibdata1:20M:autoextend", $prefix);
2590
"%s--loose-innodb_data_file_path=ibdata1:20M:autoextend", $prefix);
2592
mtr_add_arg($args, "%s--loose-innodb-lock-wait-timeout=5", $prefix);
2566
dtr_error("unknown drizzled type")
2567
unless $drizzled->{'type'} eq 'slave';
2597
mtr_error("unknown mysqld type")
2598
unless $mysqld->{'type'} eq 'slave';
2569
2600
# Directory where slaves find the dumps generated by "load data"
2570
2601
# on the server. The path need to have constant length otherwise
2576
2607
foreach my $arg ( @$slave_master_info )
2578
dtr_add_arg($args, "%s%s", $prefix, $arg);
2609
mtr_add_arg($args, "%s%s", $prefix, $arg);
2583
2614
my $slave_server_id= 2 + $idx;
2584
2615
my $slave_rpl_rank= $slave_server_id;
2585
dtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2616
mtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2589
2620
if ( $opt_debug )
2591
dtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2592
$prefix, $path_vardir_trace, $drizzled->{'type'}, $sidx);
2622
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2623
$prefix, $path_vardir_trace, $mysqld->{'type'}, $sidx);
2595
dtr_add_arg($args, "%s--sort-buffer-size=256K", $prefix);
2596
dtr_add_arg($args, "%s--max-heap-table-size=1M", $prefix);
2626
mtr_add_arg($args, "%s--myisam_key_cache_size=1M", $prefix);
2627
mtr_add_arg($args, "%s--sort_buffer=256K", $prefix);
2628
mtr_add_arg($args, "%s--max_heap_table_size=1M", $prefix);
2598
2630
if ( $opt_warnings )
2600
dtr_add_arg($args, "%s--log-warnings", $prefix);
2632
mtr_add_arg($args, "%s--log-warnings", $prefix);
2603
# Indicate to "drizzled" it will be debugged in debugger
2635
# Indicate to "mysqld" it will be debugged in debugger
2604
2636
if ( $glob_debugger )
2606
dtr_add_arg($args, "%s--gdb", $prefix);
2638
mtr_add_arg($args, "%s--gdb", $prefix);
2609
2641
my $found_skip_core= 0;
2610
foreach my $arg ( @opt_extra_drizzled_opt, @$extra_opt )
2642
foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
2612
2644
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2613
2645
if ($arg eq "--skip-core-file")
2645
2677
my $wait_for_pid_file= 1;
2647
my $type= $drizzled->{'type'};
2648
my $idx= $drizzled->{'idx'};
2679
my $type= $mysqld->{'type'};
2680
my $idx= $mysqld->{'idx'};
2650
2682
if ( $type eq 'master' )
2652
$exe= $exe_master_drizzled;
2684
$exe= $exe_master_mysqld;
2654
2686
elsif ( $type eq 'slave' )
2656
$exe= $exe_slave_drizzled;
2688
$exe= $exe_slave_mysqld;
2660
dtr_error("Unknown 'type' \"$type\" passed to drizzled_start");
2692
mtr_error("Unknown 'type' \"$type\" passed to mysqld_start");
2663
dtr_init_args(\$args);
2695
mtr_init_args(\$args);
2665
if ( $opt_valgrind_drizzled )
2697
if ( $opt_valgrind_mysqld )
2667
2699
valgrind_arguments($args, \$exe);
2670
drizzled_arguments($args,$drizzled,$extra_opt,$slave_master_info);
2702
mysqld_arguments($args,$mysqld,$extra_opt,$slave_master_info);
2672
2704
if ( $opt_gdb || $opt_manual_gdb)
2705
2737
# Remove the pidfile
2706
unlink($drizzled->{'path_pid'});
2738
unlink($mysqld->{'path_pid'});
2708
2740
if ( defined $exe )
2710
dtr_verbose("running Drizzle with: $exe @$args");
2711
$pid= dtr_spawn($exe, $args, "",
2712
$drizzled->{'path_myerr'},
2713
$drizzled->{'path_myerr'},
2742
mtr_verbose("running Drizzle with: $exe @$args");
2743
$pid= mtr_spawn($exe, $args, "",
2744
$mysqld->{'path_myerr'},
2745
$mysqld->{'path_myerr'},
2715
2747
{ append_log_file => 1 });
2719
if ( $wait_for_pid_file && !sleep_until_file_created($drizzled->{'path_pid'},
2720
$drizzled->{'start_timeout'},
2751
if ( $wait_for_pid_file && !sleep_until_file_created($mysqld->{'path_pid'},
2752
$mysqld->{'start_timeout'},
2724
dtr_error("Failed to start drizzled $drizzled->{'type'}");
2756
mtr_error("Failed to start mysqld $mysqld->{'type'}");
2728
2760
# Remember pid of the started process
2729
$drizzled->{'pid'}= $pid;
2761
$mysqld->{'pid'}= $pid;
2731
2763
# Remember options used when starting
2732
$drizzled->{'start_opts'}= $extra_opt;
2733
$drizzled->{'start_slave_master_info'}= $slave_master_info;
2764
$mysqld->{'start_opts'}= $extra_opt;
2765
$mysqld->{'start_slave_master_info'}= $slave_master_info;
2735
dtr_verbose("drizzled pid: $pid");
2767
mtr_verbose("mysqld pid: $pid");
2740
2772
sub stop_all_servers () {
2742
dtr_report("Stopping All Servers");
2774
mtr_report("Stopping All Servers");
2744
2776
my %admin_pids; # hash of admin processes that requests shutdown
2745
2777
my @kill_pids; # list of processes to shutdown/kill
2748
2780
# Start shutdown of all started masters
2749
foreach my $drizzled (@{$slave}, @{$master})
2781
foreach my $mysqld (@{$slave}, @{$master})
2751
if ( $drizzled->{'pid'} )
2783
if ( $mysqld->{'pid'} )
2753
$pid= dtr_server_shutdown($drizzled);
2785
$pid= mtr_server_shutdown($mysqld);
2754
2786
$admin_pids{$pid}= 1;
2756
2788
push(@kill_pids,{
2757
pid => $drizzled->{'pid'},
2758
real_pid => $drizzled->{'real_pid'},
2759
pidfile => $drizzled->{'path_pid'},
2760
sockfile => $drizzled->{'path_sock'},
2761
port => $drizzled->{'port'},
2762
errfile => $drizzled->{'path_myerr'},
2789
pid => $mysqld->{'pid'},
2790
real_pid => $mysqld->{'real_pid'},
2791
pidfile => $mysqld->{'path_pid'},
2792
sockfile => $mysqld->{'path_sock'},
2793
port => $mysqld->{'port'},
2794
errfile => $mysqld->{'path_myerr'},
2765
$drizzled->{'pid'}= 0; # Assume we are done with it
2797
$mysqld->{'pid'}= 0; # Assume we are done with it
2769
2801
# Wait blocking until all shutdown processes has completed
2770
dtr_wait_blocking(\%admin_pids);
2802
mtr_wait_blocking(\%admin_pids);
2772
2804
# Make sure that process has shutdown else try to kill them
2773
dtr_check_stop_servers(\@kill_pids);
2805
mtr_check_stop_servers(\@kill_pids);
2784
2816
if ( $tinfo->{'master_sh'} )
2786
2818
$do_restart= 1; # Always restart if script to run
2787
dtr_verbose("Restart master: Always restart if script to run");
2819
mtr_verbose("Restart master: Always restart if script to run");
2789
2821
if ( $tinfo->{'force_restart'} )
2791
2823
$do_restart= 1; # Always restart if --force-restart in -opt file
2792
dtr_verbose("Restart master: Restart forced with --force-restart");
2824
mtr_verbose("Restart master: Restart forced with --force-restart");
2794
2826
elsif( $tinfo->{'component_id'} eq 'im' )
2796
2828
$do_restart= 1;
2797
dtr_verbose("Restart master: Always restart for im tests");
2829
mtr_verbose("Restart master: Always restart for im tests");
2799
2831
elsif ( $master->[0]->{'running_master_options'} and
2800
2832
$master->[0]->{'running_master_options'}->{'timezone'} ne
2801
2833
$tinfo->{'timezone'})
2803
2835
$do_restart= 1;
2804
dtr_verbose("Restart master: Different timezone");
2836
mtr_verbose("Restart master: Different timezone");
2806
2838
# Check that running master was started with same options
2807
2839
# as the current test requires
2808
elsif (! dtr_same_opts($master->[0]->{'start_opts'},
2840
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
2809
2841
$tinfo->{'master_opt'}) )
2811
2843
# Chech that diff is binlog format only
2812
my $diff_opts= dtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2844
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2813
2845
if (scalar(@$diff_opts) eq 2)
2815
2847
$do_restart= 1;
2904
2936
delete $master->[0]->{'running_master_options'}; # Forget history
2906
2938
# Start shutdown of all started masters
2907
foreach my $drizzled (@{$master})
2939
foreach my $mysqld (@{$master})
2909
if ( $drizzled->{'pid'} )
2941
if ( $mysqld->{'pid'} )
2911
$pid= dtr_server_shutdown($drizzled);
2943
$pid= mtr_server_shutdown($mysqld);
2913
2945
$admin_pids{$pid}= 1;
2915
2947
push(@kill_pids,{
2916
pid => $drizzled->{'pid'},
2917
real_pid => $drizzled->{'real_pid'},
2918
pidfile => $drizzled->{'path_pid'},
2919
sockfile => $drizzled->{'path_sock'},
2920
port => $drizzled->{'port'},
2921
errfile => $drizzled->{'path_myerr'},
2948
pid => $mysqld->{'pid'},
2949
real_pid => $mysqld->{'real_pid'},
2950
pidfile => $mysqld->{'path_pid'},
2951
sockfile => $mysqld->{'path_sock'},
2952
port => $mysqld->{'port'},
2953
errfile => $mysqld->{'path_myerr'},
2924
$drizzled->{'pid'}= 0; # Assume we are done with it
2956
$mysqld->{'pid'}= 0; # Assume we are done with it
2932
2964
delete $slave->[0]->{'running_slave_options'}; # Forget history
2934
2966
# Start shutdown of all started slaves
2935
foreach my $drizzled (@{$slave})
2967
foreach my $mysqld (@{$slave})
2937
if ( $drizzled->{'pid'} )
2969
if ( $mysqld->{'pid'} )
2939
$pid= dtr_server_shutdown($drizzled);
2971
$pid= mtr_server_shutdown($mysqld);
2941
2973
$admin_pids{$pid}= 1;
2943
2975
push(@kill_pids,{
2944
pid => $drizzled->{'pid'},
2945
real_pid => $drizzled->{'real_pid'},
2946
pidfile => $drizzled->{'path_pid'},
2947
sockfile => $drizzled->{'path_sock'},
2948
port => $drizzled->{'port'},
2949
errfile => $drizzled->{'path_myerr'},
2976
pid => $mysqld->{'pid'},
2977
real_pid => $mysqld->{'real_pid'},
2978
pidfile => $mysqld->{'path_pid'},
2979
sockfile => $mysqld->{'path_sock'},
2980
port => $mysqld->{'port'},
2981
errfile => $mysqld->{'path_myerr'},
2952
$drizzled->{'pid'}= 0; # Assume we are done with it
2984
$mysqld->{'pid'}= 0; # Assume we are done with it
3049
3081
sub run_check_testcase ($$) {
3051
3083
my $mode= shift;
3052
my $drizzled= shift;
3054
my $name= "check-" . $drizzled->{'type'} . $drizzled->{'idx'};
3086
my $name= "check-" . $mysqld->{'type'} . $mysqld->{'idx'};
3057
dtr_init_args(\$args);
3059
dtr_add_arg($args, "--no-defaults");
3060
dtr_add_arg($args, "--silent");
3061
dtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3063
dtr_add_arg($args, "--port=%d", $drizzled->{'port'});
3064
dtr_add_arg($args, "--database=test");
3065
dtr_add_arg($args, "--user=%s", $opt_user);
3066
dtr_add_arg($args, "--password=");
3068
dtr_add_arg($args, "-R");
3069
dtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3089
mtr_init_args(\$args);
3091
mtr_add_arg($args, "--no-defaults");
3092
mtr_add_arg($args, "--silent");
3093
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3095
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
3096
mtr_add_arg($args, "--database=test");
3097
mtr_add_arg($args, "--user=%s", $opt_user);
3098
mtr_add_arg($args, "--password=");
3100
mtr_add_arg($args, "-R");
3101
mtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3071
3103
if ( $mode eq "before" )
3073
dtr_add_arg($args, "--record");
3105
mtr_add_arg($args, "--record");
3076
3108
if ( $opt_testdir )
3078
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3110
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3081
my $res = dtr_run_test($exe_drizzletest,$args,
3113
my $res = mtr_run_test($exe_drizzletest,$args,
3082
3114
"include/check-testcase.test", "", "", "");
3084
3116
if ( $res == 1 and $mode eq "after")
3086
dtr_run("diff",["-u",
3118
mtr_run("diff",["-u",
3087
3119
"$opt_vardir/tmp/$name.result",
3088
3120
"$opt_vardir/tmp/$name.reject"],
3089
3121
"", "", "", "");
3093
dtr_error("Could not execute 'check-testcase' $mode testcase");
3125
mtr_error("Could not execute 'check-testcase' $mode testcase");
3108
drizzled_start($master->[0],[],[]);
3140
mysqld_start($master->[0],[],[]);
3109
3141
if ( ! $master->[0]->{'pid'} )
3111
dtr_error("Can't start the drizzled server");
3143
mtr_error("Can't start the mysqld server");
3113
drizzled_wait_started($master->[0]);
3145
mysqld_wait_started($master->[0]);
3116
3148
my $tinfo = {};
3117
3149
$tinfo->{'name'} = 'report features';
3118
3150
$tinfo->{'result_file'} = undef;
3119
$tinfo->{'component_id'} = 'drizzled';
3151
$tinfo->{'component_id'} = 'mysqld';
3120
3152
$tinfo->{'path'} = 'include/report-features.test';
3121
3153
$tinfo->{'timezone'}= "GMT-3";
3122
3154
$tinfo->{'slave_num'} = 0;
3137
3169
my $exe= $exe_drizzletest;
3140
dtr_init_args(\$args);
3172
mtr_init_args(\$args);
3142
dtr_add_arg($args, "--no-defaults");
3143
dtr_add_arg($args, "--silent");
3144
dtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3145
dtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3174
mtr_add_arg($args, "--no-defaults");
3175
mtr_add_arg($args, "--silent");
3176
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3177
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3147
3179
# Log line number and time for each line in .test file
3148
dtr_add_arg($args, "--mark-progress")
3180
mtr_add_arg($args, "--mark-progress")
3149
3181
if $opt_mark_progress;
3152
dtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3153
dtr_add_arg($args, "--database=test");
3154
dtr_add_arg($args, "--user=%s", $opt_user);
3155
dtr_add_arg($args, "--password=");
3184
mtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3185
mtr_add_arg($args, "--database=test");
3186
mtr_add_arg($args, "--user=%s", $opt_user);
3187
mtr_add_arg($args, "--password=");
3158
3190
if ( $opt_strace_client )
3160
3192
$exe= "strace"; # FIXME there are ktrace, ....
3161
dtr_add_arg($args, "-o");
3162
dtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3163
dtr_add_arg($args, "$exe_drizzletest");
3193
mtr_add_arg($args, "-o");
3194
mtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3195
mtr_add_arg($args, "$exe_drizzletest");
3166
3198
if ( $opt_timer )
3168
dtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3200
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3171
3203
if ( $opt_compress )
3173
dtr_add_arg($args, "--compress");
3205
mtr_add_arg($args, "--compress");
3176
3208
if ( $opt_sleep )
3178
dtr_add_arg($args, "--sleep=%d", $opt_sleep);
3210
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
3181
3213
if ( $opt_debug )
3183
dtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3215
mtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3184
3216
$path_vardir_trace);
3187
3219
if ( $opt_testdir )
3189
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3221
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3206
3238
# We do this here, since we do not want to Valgrind the nested invocations
3207
3239
# of drizzletest; that would mess up the stderr output causing test failure.
3208
3240
my @args_saved = @$args;
3209
dtr_init_args(\$args);
3241
mtr_init_args(\$args);
3210
3242
valgrind_arguments($args, \$exe);
3211
dtr_add_arg($args, "%s", $_) for @args_saved;
3243
mtr_add_arg($args, "%s", $_) for @args_saved;
3214
dtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3246
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3216
3248
# Number of lines of resut to include in failure report
3217
dtr_add_arg($args, "--tail-lines=20");
3249
mtr_add_arg($args, "--tail-lines=20");
3219
3251
if ( defined $tinfo->{'result_file'} ) {
3220
dtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3252
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3223
3255
if ( $opt_record )
3225
dtr_add_arg($args, "--record");
3257
mtr_add_arg($args, "--record");
3228
3260
if ( $opt_client_gdb )
3241
3273
if ( $opt_check_testcases )
3243
foreach my $drizzled (@{$master}, @{$slave})
3275
foreach my $mysqld (@{$master}, @{$slave})
3245
if ($drizzled->{'pid'})
3277
if ($mysqld->{'pid'})
3247
run_check_testcase("before", $drizzled);
3279
run_check_testcase("before", $mysqld);
3252
my $res = dtr_run_test($exe,$args,"","",$path_timefile,"");
3284
my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
3254
3286
if ( $opt_check_testcases )
3256
foreach my $drizzled (@{$master}, @{$slave})
3288
foreach my $mysqld (@{$master}, @{$slave})
3258
if ($drizzled->{'pid'})
3290
if ($mysqld->{'pid'})
3260
if (run_check_testcase("after", $drizzled))
3292
if (run_check_testcase("after", $mysqld))
3262
3294
# Check failed, mark the test case with that info
3263
3295
$tinfo->{'check_testcase_failed'}= 1;
3315
dtr_add_arg($$args, "-title");
3316
dtr_add_arg($$args, "$type");
3317
dtr_add_arg($$args, "-e");
3347
mtr_add_arg($$args, "-title");
3348
mtr_add_arg($$args, "$type");
3349
mtr_add_arg($$args, "-e");
3319
dtr_add_arg($$args, "dbx");
3320
dtr_add_arg($$args, "-c");
3321
dtr_add_arg($$args, "source $dbx_init_file");
3322
dtr_add_arg($$args, "$$exe");
3351
mtr_add_arg($$args, "dbx");
3352
mtr_add_arg($$args, "-c");
3353
mtr_add_arg($$args, "source $dbx_init_file");
3354
mtr_add_arg($$args, "$$exe");
3324
3356
$$exe= "xterm";
3388
dtr_add_arg($$args, "-title");
3389
dtr_add_arg($$args, "$type");
3390
dtr_add_arg($$args, "-e");
3406
mtr_add_arg($$args, "-title");
3407
mtr_add_arg($$args, "$type");
3408
mtr_add_arg($$args, "-e");
3392
3410
if ( $exe_libtool )
3394
dtr_add_arg($$args, $exe_libtool);
3395
dtr_add_arg($$args, "--mode=execute");
3412
mtr_add_arg($$args, $exe_libtool);
3413
mtr_add_arg($$args, "--mode=execute");
3398
dtr_add_arg($$args, "gdb");
3399
dtr_add_arg($$args, "-x");
3400
dtr_add_arg($$args, "$gdb_init_file");
3401
dtr_add_arg($$args, "$$exe");
3416
mtr_add_arg($$args, "gdb");
3417
mtr_add_arg($$args, "-x");
3418
mtr_add_arg($$args, "$gdb_init_file");
3419
mtr_add_arg($$args, "$$exe");
3403
3421
$$exe= "xterm";
3514
3532
if ( $opt_callgrind)
3516
dtr_add_arg($args, "--tool=callgrind");
3534
mtr_add_arg($args, "--tool=callgrind");
3535
mtr_add_arg($args, "--base=$opt_vardir/log");
3518
3537
elsif ($opt_massif)
3520
dtr_add_arg($args, "--tool=massif");
3539
mtr_add_arg($args, "--tool=massif");
3524
dtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3525
dtr_add_arg($args, "--leak-check=yes");
3526
dtr_add_arg($args, "--num-callers=16");
3527
dtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_drizzle_test_dir)
3528
if -f "$glob_drizzle_test_dir/valgrind.supp";
3543
mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3544
mtr_add_arg($args, "--leak-check=yes");
3545
mtr_add_arg($args, "--num-callers=16");
3546
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
3547
if -f "$glob_mysql_test_dir/valgrind.supp";
3531
3550
# Add valgrind options, can be overriden by user
3532
dtr_add_arg($args, '%s', $_) for (@valgrind_args);
3551
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
3534
dtr_add_arg($args, $$exe);
3553
mtr_add_arg($args, $$exe);
3536
3555
$$exe= $opt_valgrind_path || "valgrind";
3676
3695
client-ddd Start drizzletest client in ddd
3677
3696
client-debugger=NAME Start drizzletest in the selected debugger
3678
3697
client-gdb Start drizzletest client in gdb
3679
ddd Start drizzled in ddd
3698
ddd Start mysqld in ddd
3680
3699
debug Dump trace output for all servers and client programs
3681
debugger=NAME Start drizzled in the selected debugger
3682
gdb Start the drizzled(s) in gdb
3683
manual-debug Let user manually start drizzled in debugger, before
3700
debugger=NAME Start mysqld in the selected debugger
3701
gdb Start the mysqld(s) in gdb
3702
manual-debug Let user manually start mysqld in debugger, before
3684
3703
running test(s)
3685
manual-gdb Let user manually start drizzled in gdb, before running
3687
manual-ddd Let user manually start drizzled in ddd, before running
3689
master-binary=PATH Specify the master "drizzled" to use
3690
slave-binary=PATH Specify the slave "drizzled" to use
3704
manual-gdb Let user manually start mysqld in gdb, before running
3706
manual-ddd Let user manually start mysqld in ddd, before running
3708
master-binary=PATH Specify the master "mysqld" to use
3709
slave-binary=PATH Specify the slave "mysqld" to use
3691
3710
strace-client Create strace output for drizzletest client
3692
3711
max-save-core Limit the number of core files saved (to avoid filling
3693
3712
up disks for heavily crashing server). Defaults to
3699
3718
gprof See online documentation on how to use it.
3700
valgrind Run the "drizzletest" and "drizzled" executables using
3719
valgrind Run the "drizzletest" and "mysqld" executables using
3701
3720
valgrind with default options
3702
3721
valgrind-all Synonym for --valgrind
3703
valgrind-drizzleslap Run "drizzleslap" with valgrind.
3704
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3722
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3706
valgrind-drizzled Run the "drizzled" executable with valgrind
3724
valgrind-mysqld Run the "mysqld" executable with valgrind
3707
3725
valgrind-options=ARGS Deprecated, use --valgrind-option
3708
3726
valgrind-option=ARGS Option to give valgrind, replaces default option(s),
3709
3727
can be specified more then once