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
436
# 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' ) {
437
if ( $ENV{'MTR_BUILD_THREAD'} ) {
438
if ( lc($ENV{'MTR_BUILD_THREAD'}) eq 'auto' ) {
460
439
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";
440
$ENV{'MTR_BUILD_THREAD'} = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
441
print "got ".$ENV{'MTR_BUILD_THREAD'}."\n";
466
if ( $ENV{'DTR_BUILD_THREAD'} )
445
if ( $ENV{'MTR_BUILD_THREAD'} )
468
set_dtr_build_thread_ports($ENV{'DTR_BUILD_THREAD'});
447
set_mtr_build_thread_ports($ENV{'MTR_BUILD_THREAD'});
471
450
# This is needed for test log evaluation in "gen-build-status-page"
507
486
'master_port=i' => \$opt_master_myport,
508
487
'slave_port=i' => \$opt_slave_myport,
509
488
'memc_port=i' => \$opt_memc_myport,
510
'pbms_port=i' => \$opt_pbms_myport,
511
'dtr-build-thread=i' => \$opt_dtr_build_thread,
489
'mtr-build-thread=i' => \$opt_mtr_build_thread,
513
491
# Test case authoring
514
492
'record' => \$opt_record,
515
493
'check-testcases' => \$opt_check_testcases,
516
494
'mark-progress' => \$opt_mark_progress,
518
# Extra options used when starting drizzled
519
'drizzled=s' => \@opt_extra_drizzled_opt,
496
# Extra options used when starting mysqld
497
'mysqld=s' => \@opt_extra_mysqld_opt,
520
498
'engine=s' => \$opt_engine,
522
500
# Run test on running server
638
613
# Find the absolute path to the test directory
639
614
if ( ! $opt_testdir )
641
$glob_drizzle_test_dir= cwd();
616
$glob_mysql_test_dir= cwd();
645
$glob_drizzle_test_dir= $opt_testdir;
620
$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/..";
622
$default_vardir= "$glob_mysql_test_dir/var";
651
624
if ( ! $opt_suitepath )
653
$glob_suite_path= "$glob_drizzle_test_dir/../plugin";
626
$glob_suite_path= "$glob_mysql_test_dir/../plugin";
657
630
$glob_suite_path= $opt_suitepath;
659
632
# In most cases, the base directory we find everything relative to,
660
# is the parent directory of the "drizzle-test" directory. For source
633
# is the parent directory of the "mysql-test" directory. For source
661
634
# distributions, TAR binary distributions and some other packages.
662
$glob_basedir= dirname($glob_drizzle_test_dir);
635
$glob_basedir= dirname($glob_mysql_test_dir);
664
637
# In the RPM case, binaries and libraries are installed in the
665
638
# 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
639
# directory. And we install "/usr/share/mysql-test". Moving up one
640
# more directory relative to "mysql-test" gives us a usable base
668
641
# directory for RPM installs.
669
642
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
682
655
$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();
658
# Expect mysql-bench to be located adjacent to the source tree, by default
659
$glob_mysql_bench_dir= "$glob_basedir/../mysql-bench"
660
unless defined $glob_mysql_bench_dir;
661
$glob_mysql_bench_dir= undef
662
unless -d $glob_mysql_bench_dir;
665
$source_dist ? $glob_mysql_test_dir : $glob_basedir;
667
$glob_timers= mtr_init_timers();
694
# Find the drizzled executable to be able to find the drizzled version
670
# Find the mysqld executable to be able to find the mysqld version
695
671
# number as early as possible
698
674
# Look for the client binaries directory
699
$path_client_bindir= dtr_path_exists("$glob_builddir/client",
675
$path_client_bindir= mtr_path_exists("$glob_builddir/client",
700
676
"$glob_basedir/client",
701
677
"$glob_basedir/bin");
703
679
if (!$opt_extern)
705
$exe_drizzled= dtr_exe_exists ("$glob_basedir/drizzled/drizzled",
681
$exe_drizzled= mtr_exe_exists ("$glob_basedir/drizzled/drizzled",
706
682
"$path_client_bindir/drizzled",
707
683
"$glob_basedir/libexec/drizzled",
708
684
"$glob_basedir/bin/drizzled",
709
685
"$glob_basedir/sbin/drizzled",
710
686
"$glob_builddir/drizzled/drizzled");
712
# Use the drizzled found above to find out what features are available
713
collect_drizzled_features();
688
# Use the mysqld found above to find out what features are available
689
collect_mysqld_features();
717
$drizzled_variables{'port'}= 4427;
693
$mysqld_variables{'port'}= 4427;
720
696
if (!$opt_engine)
870
828
$glob_debugger= 1;
871
829
if ( $opt_extern )
873
dtr_error("Can't use --extern when using debugger");
831
mtr_error("Can't use --extern when using debugger");
877
835
# --------------------------------------------------------------------------
878
836
# Check if special exe was selected for master or slave
879
837
# --------------------------------------------------------------------------
880
$exe_master_drizzled= $exe_master_drizzled || $exe_drizzled;
881
$exe_slave_drizzled= $exe_slave_drizzled || $exe_drizzled;
838
$exe_master_mysqld= $exe_master_mysqld || $exe_drizzled;
839
$exe_slave_mysqld= $exe_slave_mysqld || $exe_drizzled;
883
841
# --------------------------------------------------------------------------
884
842
# Check valgrind arguments
885
843
# --------------------------------------------------------------------------
886
844
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
888
dtr_report("Turning on valgrind for all executables");
846
mtr_report("Turning on valgrind for all executables");
889
847
$opt_valgrind= 1;
890
$opt_valgrind_drizzled= 1;
848
$opt_valgrind_mysqld= 1;
891
849
$opt_valgrind_drizzletest= 1;
892
$ENV{'VALGRIND_RUN'} = '1';
894
elsif ( $opt_valgrind_drizzled )
851
elsif ( $opt_valgrind_mysqld )
896
dtr_report("Turning on valgrind for drizzled(s) only");
853
mtr_report("Turning on valgrind for mysqld(s) only");
897
854
$opt_valgrind= 1;
899
856
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");
858
mtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
907
859
$opt_valgrind= 1;
910
862
if ( $opt_callgrind )
912
dtr_report("Turning on valgrind with callgrind for drizzled(s)");
864
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
913
865
$opt_valgrind= 1;
914
$opt_valgrind_drizzled= 1;
866
$opt_valgrind_mysqld= 1;
916
868
# Set special valgrind options unless options passed on command line
917
869
push(@valgrind_args, "--trace-children=yes")
1122
1085
# But a fairly safe range seems to be 5001 - 32767
1125
sub set_dtr_build_thread_ports($) {
1126
my $dtr_build_thread= shift;
1088
sub set_mtr_build_thread_ports($) {
1089
my $mtr_build_thread= shift;
1128
if ( lc($dtr_build_thread) eq 'auto' ) {
1091
if ( lc($mtr_build_thread) eq 'auto' ) {
1129
1092
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";
1093
$ENV{'MTR_BUILD_THREAD'} = $mtr_build_thread = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
1094
print "got ".$mtr_build_thread."\n";
1134
$dtr_build_thread= (($dtr_build_thread * 10) % 2000) - 1000;
1097
$mtr_build_thread= (($mtr_build_thread * 10) % 2000) - 1000;
1136
1099
# Up to two masters, up to three slaves
1137
1100
# 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
1101
$opt_master_myport= gimme_a_good_port($mtr_build_thread + 9000); # and 1
1141
1104
$opt_slave_myport= gimme_a_good_port($opt_master_myport + 2); # and 3 4
1142
1105
$opt_memc_myport= gimme_a_good_port($opt_master_myport + 10);
1143
$opt_pbms_myport= gimme_a_good_port($opt_master_myport + 11);
1145
1107
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
1147
dtr_error("DTR_BUILD_THREAD number results in a port",
1109
mtr_error("MTR_BUILD_THREAD number results in a port",
1148
1110
"outside 5001 - 32767",
1149
1111
"($opt_master_myport - $opt_master_myport + 10)");
1173
1135
##############################################################################
1176
sub collect_drizzled_features () {
1138
sub collect_mysqld_features () {
1177
1139
my $found_variable_list_start= 0;
1178
1140
my $tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
1181
# Execute "drizzled --help" to get a list
1143
# Execute "mysqld --help --verbose" to get a list
1182
1144
# list of all features and settings
1184
# --no-defaults are to avoid loading
1146
# --no-defaults and --skip-grant-tables are to avoid loading
1185
1147
# system-wide configs and plugins
1187
my $list= `$exe_drizzled --no-defaults --help`;
1149
# --datadir must exist, mysqld will chdir into it
1151
my $list= `$exe_drizzled --no-defaults --datadir=$tmpdir --skip-grant-tables --verbose --help`;
1189
1153
foreach my $line (split('\n', $list))
1194
1158
# Look for version
1195
1159
my $exe_name= basename($exe_drizzled);
1196
dtr_verbose("exe_name: $exe_name");
1160
mtr_verbose("exe_name: $exe_name");
1197
1161
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
1199
1163
#print "Major: $1 Minor: $2 Build: $3\n";
1200
1164
$drizzle_version_id= $1*10000 + $2*100 + $3;
1201
1165
#print "drizzle_version_id: $drizzle_version_id\n";
1202
dtr_report("Drizzle Version $1.$2.$3");
1166
mtr_report("Drizzle Version $1.$2.$3");
1171
if (!$found_variable_list_start)
1173
# Look for start of variables list
1174
if ( $line =~ /[\-]+\s[\-]+/ )
1176
$found_variable_list_start= 1;
1181
# Put variables into hash
1182
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
1184
# print "$1=\"$2\"\n";
1185
$mysqld_variables{$1}= $2;
1189
# The variable list is ended with a blank line
1190
if ( $line =~ /^[\s]*$/ )
1196
# Send out a warning, we should fix the variables that has no
1197
# space between variable name and it's value
1198
# or should it be fixed width column parsing? It does not
1199
# look like that in function my_print_variables in my_getopt.c
1200
mtr_warning("Could not parse variable list line : $line");
1206
1206
rmtree($tmpdir);
1207
dtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1207
mtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1208
mtr_error("Could not find variabes list") unless $found_variable_list_start;
1212
1213
sub run_query($$) {
1213
my ($drizzled, $query)= @_;
1214
my ($mysqld, $query)= @_;
1216
dtr_init_args(\$args);
1217
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);
1219
mtr_add_arg($args, "--no-defaults");
1220
mtr_add_arg($args, "--skip-stack-trace");
1221
mtr_add_arg($args, "--user=%s", $opt_user);
1222
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
1223
mtr_add_arg($args, "--silent"); # Tab separated output
1224
mtr_add_arg($args, "-e '%s'", $query);
1225
1226
my $cmd= "$exe_drizzle " . join(' ', @$args);
1226
dtr_verbose("cmd: $cmd");
1227
mtr_verbose("cmd: $cmd");
1231
sub collect_drizzled_features_from_running_server ()
1232
sub collect_mysqld_features_from_running_server ()
1233
my $list= run_query($master->[0], "use drizzle; SHOW VARIABLES");
1234
my $list= run_query($master->[0], "use mysql; SHOW VARIABLES");
1235
1236
foreach my $line (split('\n', $list))
1256
1257
$exe_libtool= "../libtool";
1257
1258
if ($opt_valgrind or $glob_debugger)
1259
dtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1260
mtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1264
# Look for my_print_defaults
1265
$exe_my_print_defaults=
1267
"$path_client_bindir/my_print_defaults",
1268
"$glob_basedir/extra/my_print_defaults",
1269
"$glob_builddir/extra/my_print_defaults");
1263
1271
# Look for perror
1264
1272
$exe_perror= "perror";
1266
1274
# 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");
1275
$exe_drizzledump= mtr_exe_exists("$path_client_bindir/drizzledump");
1276
$exe_drizzleimport= mtr_exe_exists("$path_client_bindir/drizzleimport");
1277
$exe_drizzle= mtr_exe_exists("$path_client_bindir/drizzle");
1272
1279
if (!$opt_extern)
1274
1281
# Look for SQL scripts directory
1275
1282
if ( $drizzle_version_id >= 50100 )
1277
$exe_drizzleslap= dtr_exe_exists("$path_client_bindir/drizzleslap");
1284
$exe_drizzleslap= mtr_exe_exists("$path_client_bindir/drizzleslap");
1281
1288
# Look for schema_writer
1283
$exe_schemawriter= dtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1290
$exe_schemawriter= mtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1284
1291
"$glob_builddir/drizzled/message/schema_writer");
1287
1294
# Look for drizzletest executable
1289
$exe_drizzletest= dtr_exe_exists("$path_client_bindir/drizzletest");
1296
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1292
1299
# Look for drizzle_client_test executable which may _not_ exist in
1293
1300
# some versions, test using it should be skipped
1295
1302
$exe_drizzle_client_test=
1296
dtr_exe_maybe_exists(
1303
mtr_exe_maybe_exists(
1297
1304
"$glob_basedir/tests/drizzle_client_test",
1298
1305
"$glob_basedir/bin/drizzle_client_test");
1301
1308
# Look for bug25714 executable which may _not_ exist in
1302
1309
# some versions, test using it should be skipped
1304
dtr_exe_maybe_exists(
1311
mtr_exe_maybe_exists(
1305
1312
"$glob_basedir/tests/bug25714");
1310
sub generate_cmdline_drizzledump ($) {
1317
sub generate_cmdline_mysqldump ($) {
1313
dtr_native_path($exe_drizzledump) .
1320
mtr_native_path($exe_drizzledump) .
1314
1321
" --no-defaults -uroot " .
1315
"--port=$drizzled->{'port'} ";
1318
sub generate_cmdline_drizzle ($) {
1321
dtr_native_path($exe_drizzle) .
1322
" -uroot --port=$drizzled->{'port'} ";
1325
sub generate_cmdline_drizzleadmin ($) {
1328
dtr_native_path($exe_drizzleadmin) .
1329
" -uroot --port=$drizzled->{'port'} ";
1322
"--port=$mysqld->{'port'} ";
1332
1326
##############################################################################
1341
1335
my $exe= $exe_drizzle_client_test;
1344
dtr_init_args(\$args);
1338
mtr_init_args(\$args);
1345
1339
if ( $opt_valgrind_drizzletest )
1347
1341
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'}");
1344
mtr_add_arg($args, "--no-defaults");
1345
mtr_add_arg($args, "--testcase");
1346
mtr_add_arg($args, "--user=root");
1347
mtr_add_arg($args, "--port=$master->[0]->{'port'}");
1355
1349
if ( $opt_extern || $drizzle_version_id >= 50000 )
1357
dtr_add_arg($args, "--vardir=$opt_vardir")
1351
mtr_add_arg($args, "--vardir=$opt_vardir")
1360
1354
if ( $opt_debug )
1363
1357
"--debug=d:t:A,$path_vardir_trace/log/drizzle_client_test.trace");
1416
1410
$ENV{'LD_LIBRARY_PATH'} ?
1417
1411
split(':', $ENV{'LD_LIBRARY_PATH'}) : (),
1418
1412
@ld_library_paths);
1419
dtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1413
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1421
1415
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
1422
1416
$ENV{'DYLD_LIBRARY_PATH'} ?
1423
1417
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
1424
dtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1418
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1426
1420
# The environment variable used for shared libs on AIX
1427
1421
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
1428
1422
$ENV{'SHLIB_PATH'} ?
1429
1423
split(':', $ENV{'SHLIB_PATH'}) : ());
1430
dtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1424
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1432
1426
# The environment variable used for shared libs on hp-ux
1433
1427
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
1434
1428
$ENV{'LIBPATH'} ?
1435
1429
split(':', $ENV{'LIBPATH'}) : ());
1436
dtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1430
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1438
1432
# --------------------------------------------------------------------------
1439
1433
# Also command lines in .opt files may contain env vars
1470
1462
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1471
1463
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
1472
1464
$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;
1465
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'drizzle-protocol-port'};
1467
$ENV{'MTR_BUILD_THREAD'}= $opt_mtr_build_thread;
1469
$ENV{'EXE_MYSQL'}= $exe_drizzle;
1481
1472
# ----------------------------------------------------
1482
1473
# Setup env to childs can execute myqldump
1483
1474
# ----------------------------------------------------
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) .
1475
my $cmdline_mysqldump= generate_cmdline_mysqldump($master->[0]);
1476
my $cmdline_mysqldumpslave= generate_cmdline_mysqldump($slave->[0]);
1477
my $cmdline_mysqldump_secondary= mtr_native_path($exe_drizzledump) .
1488
1478
" --no-defaults -uroot " .
1489
1479
" --port=$master->[0]->{'secondary_port'} ";
1491
1481
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";
1483
$cmdline_mysqldump .=
1484
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-master.trace";
1485
$cmdline_mysqldumpslave .=
1486
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-slave.trace";
1487
$cmdline_mysqldump_secondary .=
1488
" --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;
1505
# ----------------------------------------------------
1506
# Setup env so we can execute drizzle client
1507
# ----------------------------------------------------
1508
#my $cmdline_drizzle = generate_cmdline_drizzle($master->[0]);
1509
#$ENV{'DRIZZLE'}= $cmdline_drizzle;
1511
# ----------------------------------------------------
1512
# Setup env so childs can execute drizzleslap
1490
$ENV{'DRIZZLE_DUMP'}= $cmdline_mysqldump;
1491
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_mysqldumpslave;
1492
$ENV{'DRIZZLE_DUMP_SECONDARY'}= $cmdline_mysqldump_secondary;
1494
# ----------------------------------------------------
1495
# Setup env so childs can execute mysqlslap
1513
1496
# ----------------------------------------------------
1514
1497
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) .
1499
my $cmdline_drizzleslap=
1500
mtr_native_path($exe_drizzleslap) .
1525
1502
"--port=$master->[0]->{'port'} ";
1526
1503
my $cmdline_drizzleslap_secondary=
1527
dtr_native_path($exe_drizzleslap) .
1504
mtr_native_path($exe_drizzleslap) .
1529
1506
" --port=$master->[0]->{'secondary_port'} ";
1544
1521
# ----------------------------------------------------
1545
# Setup env so childs can execute drizzleimport
1522
# Setup env so childs can execute mysqlimport
1546
1523
# ----------------------------------------------------
1547
my $cmdline_drizzleimport=
1548
dtr_native_path($exe_drizzleimport) .
1524
my $cmdline_mysqlimport=
1525
mtr_native_path($exe_drizzleimport) .
1550
1527
"--port=$master->[0]->{'port'} ";
1552
1529
if ( $opt_debug )
1554
$cmdline_drizzleimport .=
1555
" --debug=d:t:A,$path_vardir_trace/log/drizzleimport.trace";
1531
$cmdline_mysqlimport .=
1532
" --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) .
1534
$ENV{'DRIZZLE_IMPORT'}= $cmdline_mysqlimport;
1537
# ----------------------------------------------------
1538
# Setup env so childs can execute mysql
1539
# ----------------------------------------------------
1541
mtr_native_path($exe_drizzle) .
1565
1542
" --no-defaults --host=localhost --user=root --password= " .
1566
1543
"--port=$master->[0]->{'port'} ";
1567
1544
my $cmdline_drizzle_secondary=
1568
dtr_native_path($exe_drizzle) .
1545
mtr_native_path($exe_drizzle) .
1569
1546
" --no-defaults --host=localhost --user=root --password= " .
1570
1547
" --port=$master->[0]->{'secondary_port'} ";
1572
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1549
$ENV{'MYSQL'}= $cmdline_mysql;
1573
1550
$ENV{'DRIZZLE_SECONDARY'}= $cmdline_drizzle_secondary;
1575
1552
# ----------------------------------------------------
1586
1563
# ----------------------------------------------------
1587
# Setup env so childs can execute drizzle_fix_system_tables
1564
# Setup env so childs can execute mysql_fix_system_tables
1588
1565
# ----------------------------------------------------
1589
1566
#if ( !$opt_extern)
1592
my $cmdline_drizzle_fix_system_tables=
1569
my $cmdline_mysql_fix_system_tables=
1593
1570
"$exe_drizzle_fix_system_tables --no-defaults --host=localhost " .
1594
1571
"--user=root --password= " .
1595
1572
"--basedir=$glob_basedir --bindir=$path_client_bindir --verbose " .
1596
1573
"--port=$master->[0]->{'port'} ";
1597
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_drizzle_fix_system_tables;
1574
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_mysql_fix_system_tables;
1601
1578
# ----------------------------------------------------
1579
# Setup env so childs can execute my_print_defaults
1580
# ----------------------------------------------------
1581
$ENV{'DRIZZLE_MY_PRINT_DEFAULTS'}= mtr_native_path($exe_my_print_defaults);
1583
# ----------------------------------------------------
1602
1584
# Setup env so childs can shutdown the server
1603
1585
# ----------------------------------------------------
1604
$ENV{'DRIZZLED_SHUTDOWN'}= dtr_native_path($exe_drizzle);
1586
$ENV{'DRIZZLED_SHUTDOWN'}= mtr_native_path($exe_drizzle);
1606
1588
# ----------------------------------------------------
1607
1589
# Setup env so childs can execute perror
1608
1590
# ----------------------------------------------------
1609
$ENV{'MY_PERROR'}= dtr_native_path($exe_perror);
1591
$ENV{'MY_PERROR'}= mtr_native_path($exe_perror);
1611
1593
# ----------------------------------------------------
1612
# Add the path where drizzled will find ha_example.so
1594
# Add the path where mysqld will find ha_example.so
1613
1595
# ----------------------------------------------------
1614
1596
$ENV{'EXAMPLE_PLUGIN'}=
1615
1597
($lib_example_plugin ? basename($lib_example_plugin) : "");
1617
1599
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
1619
1601
# ----------------------------------------------------
1602
# Setup env so childs can execute myisampack and myisamchk
1603
# ----------------------------------------------------
1604
# $ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
1605
# "$path_client_bindir/myisamchk",
1606
# "$glob_basedir/storage/myisam/myisamchk",
1607
# "$glob_basedir/myisam/myisamchk"));
1608
# $ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
1609
# "$path_client_bindir/myisampack",
1610
# "$glob_basedir/storage/myisam/myisampack",
1611
# "$glob_basedir/myisam/myisampack"));
1613
# ----------------------------------------------------
1620
1614
# We are nice and report a bit about our settings
1621
1615
# ----------------------------------------------------
1622
1616
if (!$opt_extern)
1624
print "Using DTR_BUILD_THREAD = $ENV{DTR_BUILD_THREAD}\n";
1618
print "Using MTR_BUILD_THREAD = $ENV{MTR_BUILD_THREAD}\n";
1625
1619
print "Using MASTER_MYPORT = $ENV{MASTER_MYPORT}\n";
1626
1620
print "Using MASTER_MYPORT1 = $ENV{MASTER_MYPORT1}\n";
1627
1621
print "Using SLAVE_MYPORT = $ENV{SLAVE_MYPORT}\n";
1628
1622
print "Using SLAVE_MYPORT1 = $ENV{SLAVE_MYPORT1}\n";
1629
1623
print "Using SLAVE_MYPORT2 = $ENV{SLAVE_MYPORT2}\n";
1630
1624
print "Using MC_PORT = $ENV{MC_PORT}\n";
1631
print "Using PBMS_PORT = $ENV{PBMS_PORT}\n";
1634
1627
# Create an environment variable to make it possible
1699
1692
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
1701
1694
# Remove the directory which the link points at
1702
dtr_verbose("Removing " . readlink($opt_vardir));
1703
dtr_rmtree(readlink($opt_vardir));
1695
mtr_verbose("Removing " . readlink($opt_vardir));
1696
mtr_rmtree(readlink($opt_vardir));
1705
1698
# Remove the "var" symlink
1706
dtr_verbose("unlink($opt_vardir)");
1699
mtr_verbose("unlink($opt_vardir)");
1707
1700
unlink($opt_vardir);
1709
1702
elsif ( $opt_mem )
1711
1704
# Just remove the "var" symlink
1712
dtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1705
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1714
dtr_verbose("unlink($opt_vardir)");
1707
mtr_verbose("unlink($opt_vardir)");
1715
1708
unlink($opt_vardir);
1719
# Some users creates a soft link in drizzle-test/var to another area
1712
# Some users creates a soft link in mysql-test/var to another area
1720
1713
# - allow it, but remove all files in it
1722
dtr_report("WARNING: Using the 'drizzle-test/var' symlink");
1715
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
1724
1717
# Make sure the directory where it points exist
1725
dtr_error("The destination for symlink $opt_vardir does not exist")
1718
mtr_error("The destination for symlink $opt_vardir does not exist")
1726
1719
if ! -d readlink($opt_vardir);
1728
1721
foreach my $bin ( glob("$opt_vardir/*") )
1730
dtr_verbose("Removing bin $bin");
1723
mtr_verbose("Removing bin $bin");
1737
1730
# Remove the entire "var" dir
1738
dtr_verbose("Removing $opt_vardir/");
1739
dtr_rmtree("$opt_vardir/");
1731
mtr_verbose("Removing $opt_vardir/");
1732
mtr_rmtree("$opt_vardir/");
1742
1735
if ( $opt_mem )
1770
1763
# Create var and the directories needed in var
1772
1765
sub setup_vardir() {
1773
dtr_report("Creating Directories");
1766
mtr_report("Creating Directories");
1775
1768
if ( $opt_vardir eq $default_vardir )
1778
# Running with "var" in drizzle-test dir
1771
# Running with "var" in mysql-test dir
1780
1773
if ( -l $opt_vardir )
1782
1775
# it's a symlink
1784
1777
# Make sure the directory where it points exist
1785
dtr_error("The destination for symlink $opt_vardir does not exist")
1778
mtr_error("The destination for symlink $opt_vardir does not exist")
1786
1779
if ! -d readlink($opt_vardir);
1788
1781
elsif ( $opt_mem )
1790
1783
# Runinng with "var" as a link to some "memory" location, normally tmpfs
1791
dtr_verbose("Creating $opt_mem");
1784
mtr_verbose("Creating $opt_mem");
1792
1785
mkpath($opt_mem);
1794
dtr_report("Symlinking 'var' to '$opt_mem'");
1787
mtr_report("Symlinking 'var' to '$opt_mem'");
1795
1788
symlink($opt_mem, $opt_vardir);
1799
1792
if ( ! -d $opt_vardir )
1801
dtr_verbose("Creating $opt_vardir");
1794
mtr_verbose("Creating $opt_vardir");
1802
1795
mkpath($opt_vardir);
1805
1798
# Ensure a proper error message if vardir couldn't be created
1806
1799
unless ( -d $opt_vardir and -w $opt_vardir )
1808
dtr_error("Writable 'var' directory is needed, use the " .
1801
mtr_error("Writable 'var' directory is needed, use the " .
1809
1802
"'--vardir=<path>' option");
1817
1810
# Create new data dirs
1818
1811
foreach my $data_dir (@data_dir_lst)
1820
mkpath("$data_dir/local/mysql");
1821
system("$exe_schemawriter mysql $data_dir/local/mysql/db.opt");
1813
mkpath("$data_dir/mysql");
1814
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");
1816
mkpath("$data_dir/test");
1817
system("$exe_schemawriter test $data_dir/test/db.opt");
1827
1820
# Make a link std_data_ln in var/ that points to std_data
1828
symlink(collapse_path("$glob_drizzle_test_dir/std_data"),
1821
symlink(collapse_path("$glob_mysql_test_dir/std_data"),
1829
1822
"$opt_vardir/std_data_ln");
1831
symlink(collapse_path("$glob_suite_path/filesystem_engine/tests/t"),
1832
"$opt_vardir/filesystem_ln");
1834
1824
# Remove old log files
1835
1825
foreach my $name (glob("r/*.progress r/*.log r/*.warnings"))
1911
drizzled_start($master->[0],[],[]);
1899
mysqld_start($master->[0],[],[]);
1912
1900
if ( ! $master->[0]->{'pid'} )
1914
dtr_error("Can't start the drizzled server");
1902
mtr_error("Can't start the mysqld server");
1918
dtr_init_args(\$args);
1906
mtr_init_args(\$args);
1920
dtr_add_arg($args, "--user=%s", $opt_user);
1908
mtr_add_arg($args, "--user=%s", $opt_user);
1922
1910
if ( $opt_small_bench )
1924
dtr_add_arg($args, "--small-test");
1925
dtr_add_arg($args, "--small-tables");
1912
mtr_add_arg($args, "--small-test");
1913
mtr_add_arg($args, "--small-tables");
1928
chdir($glob_drizzle_bench_dir)
1929
or dtr_error("Couldn't chdir to '$glob_drizzle_bench_dir': $!");
1916
chdir($glob_mysql_bench_dir)
1917
or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!");
1931
1919
if ( ! $benchmark )
1933
dtr_run("$glob_drizzle_bench_dir/run-all-tests", $args, "", "", "", "");
1921
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
1934
1922
# FIXME check result code?!
1936
1924
elsif ( -x $benchmark )
1938
dtr_run("$glob_drizzle_bench_dir/$benchmark", $args, "", "", "", "");
1926
mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", "");
1939
1927
# FIXME check result code?!
1943
dtr_error("Benchmark $benchmark not found");
1931
mtr_error("Benchmark $benchmark not found");
1946
chdir($glob_drizzle_test_dir); # Go back
1934
chdir($glob_mysql_test_dir); # Go back
1949
1937
stop_masters();
2509
2497
my $prefix= ""; # If drizzletest server arg
2511
dtr_add_arg($args, "%s--no-defaults", $prefix);
2499
mtr_add_arg($args, "%s--no-defaults", $prefix);
2501
$path_my_basedir= collapse_path($path_my_basedir);
2502
mtr_add_arg($args, "%s--basedir=%s", $prefix, $path_my_basedir);
2513
2504
if ($opt_engine)
2515
dtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2506
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2518
2509
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);
2511
# By default, prevent the started mysqld to access files outside of vardir
2512
mtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2524
dtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2515
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2526
2517
# Increase default connect_timeout to avoid intermittent
2527
2518
# disconnects when test servers are put under load
2528
2519
# 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
2520
mtr_add_arg($args, "%s--mysql-protocol-connect-timeout=60", $prefix);
2523
# When mysqld is run by a root user(euid is 0), it will fail
2533
2524
# 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);
2526
if (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
2527
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'});
2530
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
2531
$mysqld->{'path_pid'});
2533
mtr_add_arg($args, "%s--mysql-protocol-port=%d", $prefix,
2536
mtr_add_arg($args, "%s--drizzle-protocol-port=%d", $prefix,
2537
$mysqld->{'secondary_port'});
2539
mtr_add_arg($args, "%s--datadir=%s", $prefix,
2540
$mysqld->{'path_myddir'});
2554
2542
# Check if "extra_opt" contains --skip-log-bin
2555
if ( $drizzled->{'type'} eq 'master' )
2543
if ( $mysqld->{'type'} eq 'master' )
2557
dtr_add_arg($args, "%s--server-id=%d", $prefix,
2545
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2558
2546
$idx > 0 ? $idx + 101 : 1);
2561
"%s--innodb.data-file-path=ibdata1:20M:autoextend", $prefix);
2548
mtr_add_arg($args, "%s--loose-innodb_data_file_path=ibdata1:10M:autoextend",
2551
mtr_add_arg($args, "%s--loose-innodb-lock-wait-timeout=5", $prefix);
2566
dtr_error("unknown drizzled type")
2567
unless $drizzled->{'type'} eq 'slave';
2556
mtr_error("unknown mysqld type")
2557
unless $mysqld->{'type'} eq 'slave';
2569
2559
# Directory where slaves find the dumps generated by "load data"
2570
2560
# on the server. The path need to have constant length otherwise
2576
2566
foreach my $arg ( @$slave_master_info )
2578
dtr_add_arg($args, "%s%s", $prefix, $arg);
2568
mtr_add_arg($args, "%s%s", $prefix, $arg);
2583
2573
my $slave_server_id= 2 + $idx;
2584
2574
my $slave_rpl_rank= $slave_server_id;
2585
dtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2575
mtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2589
2579
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);
2581
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2582
$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);
2585
mtr_add_arg($args, "%s--myisam_key_cache_size=1M", $prefix);
2586
mtr_add_arg($args, "%s--sort_buffer=256K", $prefix);
2587
mtr_add_arg($args, "%s--max_heap_table_size=1M", $prefix);
2598
2589
if ( $opt_warnings )
2600
dtr_add_arg($args, "%s--log-warnings", $prefix);
2591
mtr_add_arg($args, "%s--log-warnings", $prefix);
2603
# Indicate to "drizzled" it will be debugged in debugger
2594
# Indicate to "mysqld" it will be debugged in debugger
2604
2595
if ( $glob_debugger )
2606
dtr_add_arg($args, "%s--gdb", $prefix);
2597
mtr_add_arg($args, "%s--gdb", $prefix);
2609
2600
my $found_skip_core= 0;
2610
foreach my $arg ( @opt_extra_drizzled_opt, @$extra_opt )
2601
foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
2612
2603
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2613
2604
if ($arg eq "--skip-core-file")
2645
2636
my $wait_for_pid_file= 1;
2647
my $type= $drizzled->{'type'};
2648
my $idx= $drizzled->{'idx'};
2638
my $type= $mysqld->{'type'};
2639
my $idx= $mysqld->{'idx'};
2650
2641
if ( $type eq 'master' )
2652
$exe= $exe_master_drizzled;
2643
$exe= $exe_master_mysqld;
2654
2645
elsif ( $type eq 'slave' )
2656
$exe= $exe_slave_drizzled;
2647
$exe= $exe_slave_mysqld;
2660
dtr_error("Unknown 'type' \"$type\" passed to drizzled_start");
2651
mtr_error("Unknown 'type' \"$type\" passed to mysqld_start");
2663
dtr_init_args(\$args);
2654
mtr_init_args(\$args);
2665
if ( $opt_valgrind_drizzled )
2656
if ( $opt_valgrind_mysqld )
2667
2658
valgrind_arguments($args, \$exe);
2670
drizzled_arguments($args,$drizzled,$extra_opt,$slave_master_info);
2661
mysqld_arguments($args,$mysqld,$extra_opt,$slave_master_info);
2672
2663
if ( $opt_gdb || $opt_manual_gdb)
2705
2696
# Remove the pidfile
2706
unlink($drizzled->{'path_pid'});
2697
unlink($mysqld->{'path_pid'});
2708
2699
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'},
2701
$pid= mtr_spawn($exe, $args, "",
2702
$mysqld->{'path_myerr'},
2703
$mysqld->{'path_myerr'},
2715
2705
{ append_log_file => 1 });
2719
if ( $wait_for_pid_file && !sleep_until_file_created($drizzled->{'path_pid'},
2720
$drizzled->{'start_timeout'},
2709
if ( $wait_for_pid_file && !sleep_until_file_created($mysqld->{'path_pid'},
2710
$mysqld->{'start_timeout'},
2724
dtr_error("Failed to start drizzled $drizzled->{'type'}");
2714
mtr_error("Failed to start mysqld $mysqld->{'type'}");
2728
2718
# Remember pid of the started process
2729
$drizzled->{'pid'}= $pid;
2719
$mysqld->{'pid'}= $pid;
2731
2721
# Remember options used when starting
2732
$drizzled->{'start_opts'}= $extra_opt;
2733
$drizzled->{'start_slave_master_info'}= $slave_master_info;
2722
$mysqld->{'start_opts'}= $extra_opt;
2723
$mysqld->{'start_slave_master_info'}= $slave_master_info;
2735
dtr_verbose("drizzled pid: $pid");
2725
mtr_verbose("mysqld pid: $pid");
2740
2730
sub stop_all_servers () {
2742
dtr_report("Stopping All Servers");
2732
mtr_report("Stopping All Servers");
2744
2734
my %admin_pids; # hash of admin processes that requests shutdown
2745
2735
my @kill_pids; # list of processes to shutdown/kill
2748
2738
# Start shutdown of all started masters
2749
foreach my $drizzled (@{$slave}, @{$master})
2739
foreach my $mysqld (@{$slave}, @{$master})
2751
if ( $drizzled->{'pid'} )
2741
if ( $mysqld->{'pid'} )
2753
$pid= dtr_server_shutdown($drizzled);
2743
$pid= mtr_server_shutdown($mysqld);
2754
2744
$admin_pids{$pid}= 1;
2756
2746
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'},
2747
pid => $mysqld->{'pid'},
2748
real_pid => $mysqld->{'real_pid'},
2749
pidfile => $mysqld->{'path_pid'},
2750
sockfile => $mysqld->{'path_sock'},
2751
port => $mysqld->{'port'},
2752
errfile => $mysqld->{'path_myerr'},
2765
$drizzled->{'pid'}= 0; # Assume we are done with it
2755
$mysqld->{'pid'}= 0; # Assume we are done with it
2769
2759
# Wait blocking until all shutdown processes has completed
2770
dtr_wait_blocking(\%admin_pids);
2760
mtr_wait_blocking(\%admin_pids);
2772
2762
# Make sure that process has shutdown else try to kill them
2773
dtr_check_stop_servers(\@kill_pids);
2763
mtr_check_stop_servers(\@kill_pids);
2784
2774
if ( $tinfo->{'master_sh'} )
2786
2776
$do_restart= 1; # Always restart if script to run
2787
dtr_verbose("Restart master: Always restart if script to run");
2777
mtr_verbose("Restart master: Always restart if script to run");
2789
2779
if ( $tinfo->{'force_restart'} )
2791
2781
$do_restart= 1; # Always restart if --force-restart in -opt file
2792
dtr_verbose("Restart master: Restart forced with --force-restart");
2782
mtr_verbose("Restart master: Restart forced with --force-restart");
2794
2784
elsif( $tinfo->{'component_id'} eq 'im' )
2796
2786
$do_restart= 1;
2797
dtr_verbose("Restart master: Always restart for im tests");
2787
mtr_verbose("Restart master: Always restart for im tests");
2799
2789
elsif ( $master->[0]->{'running_master_options'} and
2800
2790
$master->[0]->{'running_master_options'}->{'timezone'} ne
2801
2791
$tinfo->{'timezone'})
2803
2793
$do_restart= 1;
2804
dtr_verbose("Restart master: Different timezone");
2794
mtr_verbose("Restart master: Different timezone");
2806
2796
# Check that running master was started with same options
2807
2797
# as the current test requires
2808
elsif (! dtr_same_opts($master->[0]->{'start_opts'},
2798
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
2809
2799
$tinfo->{'master_opt'}) )
2811
2801
# Chech that diff is binlog format only
2812
my $diff_opts= dtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2802
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2813
2803
if (scalar(@$diff_opts) eq 2)
2815
2805
$do_restart= 1;
2904
2894
delete $master->[0]->{'running_master_options'}; # Forget history
2906
2896
# Start shutdown of all started masters
2907
foreach my $drizzled (@{$master})
2897
foreach my $mysqld (@{$master})
2909
if ( $drizzled->{'pid'} )
2899
if ( $mysqld->{'pid'} )
2911
$pid= dtr_server_shutdown($drizzled);
2901
$pid= mtr_server_shutdown($mysqld);
2913
2903
$admin_pids{$pid}= 1;
2915
2905
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'},
2906
pid => $mysqld->{'pid'},
2907
real_pid => $mysqld->{'real_pid'},
2908
pidfile => $mysqld->{'path_pid'},
2909
sockfile => $mysqld->{'path_sock'},
2910
port => $mysqld->{'port'},
2911
errfile => $mysqld->{'path_myerr'},
2924
$drizzled->{'pid'}= 0; # Assume we are done with it
2914
$mysqld->{'pid'}= 0; # Assume we are done with it
2932
2922
delete $slave->[0]->{'running_slave_options'}; # Forget history
2934
2924
# Start shutdown of all started slaves
2935
foreach my $drizzled (@{$slave})
2925
foreach my $mysqld (@{$slave})
2937
if ( $drizzled->{'pid'} )
2927
if ( $mysqld->{'pid'} )
2939
$pid= dtr_server_shutdown($drizzled);
2929
$pid= mtr_server_shutdown($mysqld);
2941
2931
$admin_pids{$pid}= 1;
2943
2933
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'},
2934
pid => $mysqld->{'pid'},
2935
real_pid => $mysqld->{'real_pid'},
2936
pidfile => $mysqld->{'path_pid'},
2937
sockfile => $mysqld->{'path_sock'},
2938
port => $mysqld->{'port'},
2939
errfile => $mysqld->{'path_myerr'},
2952
$drizzled->{'pid'}= 0; # Assume we are done with it
2942
$mysqld->{'pid'}= 0; # Assume we are done with it
3049
3039
sub run_check_testcase ($$) {
3051
3041
my $mode= shift;
3052
my $drizzled= shift;
3054
my $name= "check-" . $drizzled->{'type'} . $drizzled->{'idx'};
3044
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");
3047
mtr_init_args(\$args);
3049
mtr_add_arg($args, "--no-defaults");
3050
mtr_add_arg($args, "--silent");
3051
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3053
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
3054
mtr_add_arg($args, "--database=test");
3055
mtr_add_arg($args, "--user=%s", $opt_user);
3056
mtr_add_arg($args, "--password=");
3058
mtr_add_arg($args, "-R");
3059
mtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3071
3061
if ( $mode eq "before" )
3073
dtr_add_arg($args, "--record");
3063
mtr_add_arg($args, "--record");
3076
3066
if ( $opt_testdir )
3078
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3068
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3081
my $res = dtr_run_test($exe_drizzletest,$args,
3071
my $res = mtr_run_test($exe_drizzletest,$args,
3082
3072
"include/check-testcase.test", "", "", "");
3084
3074
if ( $res == 1 and $mode eq "after")
3086
dtr_run("diff",["-u",
3076
mtr_run("diff",["-u",
3087
3077
"$opt_vardir/tmp/$name.result",
3088
3078
"$opt_vardir/tmp/$name.reject"],
3089
3079
"", "", "", "");
3093
dtr_error("Could not execute 'check-testcase' $mode testcase");
3083
mtr_error("Could not execute 'check-testcase' $mode testcase");
3108
drizzled_start($master->[0],[],[]);
3098
mysqld_start($master->[0],[],[]);
3109
3099
if ( ! $master->[0]->{'pid'} )
3111
dtr_error("Can't start the drizzled server");
3101
mtr_error("Can't start the mysqld server");
3113
drizzled_wait_started($master->[0]);
3103
mysqld_wait_started($master->[0]);
3116
3106
my $tinfo = {};
3117
3107
$tinfo->{'name'} = 'report features';
3118
3108
$tinfo->{'result_file'} = undef;
3119
$tinfo->{'component_id'} = 'drizzled';
3109
$tinfo->{'component_id'} = 'mysqld';
3120
3110
$tinfo->{'path'} = 'include/report-features.test';
3121
3111
$tinfo->{'timezone'}= "GMT-3";
3122
3112
$tinfo->{'slave_num'} = 0;
3137
3127
my $exe= $exe_drizzletest;
3140
dtr_init_args(\$args);
3130
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);
3132
mtr_add_arg($args, "--no-defaults");
3133
mtr_add_arg($args, "--silent");
3134
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3135
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3147
3137
# Log line number and time for each line in .test file
3148
dtr_add_arg($args, "--mark-progress")
3138
mtr_add_arg($args, "--mark-progress")
3149
3139
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=");
3142
mtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3143
mtr_add_arg($args, "--database=test");
3144
mtr_add_arg($args, "--user=%s", $opt_user);
3145
mtr_add_arg($args, "--password=");
3158
3148
if ( $opt_strace_client )
3160
3150
$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");
3151
mtr_add_arg($args, "-o");
3152
mtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3153
mtr_add_arg($args, "$exe_drizzletest");
3166
3156
if ( $opt_timer )
3168
dtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3158
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3171
3161
if ( $opt_compress )
3173
dtr_add_arg($args, "--compress");
3163
mtr_add_arg($args, "--compress");
3176
3166
if ( $opt_sleep )
3178
dtr_add_arg($args, "--sleep=%d", $opt_sleep);
3168
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
3181
3171
if ( $opt_debug )
3183
dtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3173
mtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3184
3174
$path_vardir_trace);
3187
3177
if ( $opt_testdir )
3189
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3179
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3206
3196
# We do this here, since we do not want to Valgrind the nested invocations
3207
3197
# of drizzletest; that would mess up the stderr output causing test failure.
3208
3198
my @args_saved = @$args;
3209
dtr_init_args(\$args);
3199
mtr_init_args(\$args);
3210
3200
valgrind_arguments($args, \$exe);
3211
dtr_add_arg($args, "%s", $_) for @args_saved;
3201
mtr_add_arg($args, "%s", $_) for @args_saved;
3214
dtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3204
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3216
3206
# Number of lines of resut to include in failure report
3217
dtr_add_arg($args, "--tail-lines=20");
3207
mtr_add_arg($args, "--tail-lines=20");
3219
3209
if ( defined $tinfo->{'result_file'} ) {
3220
dtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3210
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3223
3213
if ( $opt_record )
3225
dtr_add_arg($args, "--record");
3215
mtr_add_arg($args, "--record");
3228
3218
if ( $opt_client_gdb )
3241
3231
if ( $opt_check_testcases )
3243
foreach my $drizzled (@{$master}, @{$slave})
3233
foreach my $mysqld (@{$master}, @{$slave})
3245
if ($drizzled->{'pid'})
3235
if ($mysqld->{'pid'})
3247
run_check_testcase("before", $drizzled);
3237
run_check_testcase("before", $mysqld);
3252
my $res = dtr_run_test($exe,$args,"","",$path_timefile,"");
3242
my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
3254
3244
if ( $opt_check_testcases )
3256
foreach my $drizzled (@{$master}, @{$slave})
3246
foreach my $mysqld (@{$master}, @{$slave})
3258
if ($drizzled->{'pid'})
3248
if ($mysqld->{'pid'})
3260
if (run_check_testcase("after", $drizzled))
3250
if (run_check_testcase("after", $mysqld))
3262
3252
# Check failed, mark the test case with that info
3263
3253
$tinfo->{'check_testcase_failed'}= 1;
3315
dtr_add_arg($$args, "-title");
3316
dtr_add_arg($$args, "$type");
3317
dtr_add_arg($$args, "-e");
3305
mtr_add_arg($$args, "-title");
3306
mtr_add_arg($$args, "$type");
3307
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");
3309
mtr_add_arg($$args, "dbx");
3310
mtr_add_arg($$args, "-c");
3311
mtr_add_arg($$args, "source $dbx_init_file");
3312
mtr_add_arg($$args, "$$exe");
3324
3314
$$exe= "xterm";
3388
dtr_add_arg($$args, "-title");
3389
dtr_add_arg($$args, "$type");
3390
dtr_add_arg($$args, "-e");
3364
mtr_add_arg($$args, "-title");
3365
mtr_add_arg($$args, "$type");
3366
mtr_add_arg($$args, "-e");
3392
3368
if ( $exe_libtool )
3394
dtr_add_arg($$args, $exe_libtool);
3395
dtr_add_arg($$args, "--mode=execute");
3370
mtr_add_arg($$args, $exe_libtool);
3371
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");
3374
mtr_add_arg($$args, "gdb");
3375
mtr_add_arg($$args, "-x");
3376
mtr_add_arg($$args, "$gdb_init_file");
3377
mtr_add_arg($$args, "$$exe");
3403
3379
$$exe= "xterm";
3514
3490
if ( $opt_callgrind)
3516
dtr_add_arg($args, "--tool=callgrind");
3492
mtr_add_arg($args, "--tool=callgrind");
3493
mtr_add_arg($args, "--base=$opt_vardir/log");
3518
3495
elsif ($opt_massif)
3520
dtr_add_arg($args, "--tool=massif");
3497
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";
3501
mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3502
mtr_add_arg($args, "--leak-check=yes");
3503
mtr_add_arg($args, "--num-callers=16");
3504
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
3505
if -f "$glob_mysql_test_dir/valgrind.supp";
3531
3508
# Add valgrind options, can be overriden by user
3532
dtr_add_arg($args, '%s', $_) for (@valgrind_args);
3509
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
3534
dtr_add_arg($args, $$exe);
3511
mtr_add_arg($args, $$exe);
3536
3513
$$exe= $opt_valgrind_path || "valgrind";
3676
3653
client-ddd Start drizzletest client in ddd
3677
3654
client-debugger=NAME Start drizzletest in the selected debugger
3678
3655
client-gdb Start drizzletest client in gdb
3679
ddd Start drizzled in ddd
3656
ddd Start mysqld in ddd
3680
3657
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
3658
debugger=NAME Start mysqld in the selected debugger
3659
gdb Start the mysqld(s) in gdb
3660
manual-debug Let user manually start mysqld in debugger, before
3684
3661
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
3662
manual-gdb Let user manually start mysqld in gdb, before running
3664
manual-ddd Let user manually start mysqld in ddd, before running
3666
master-binary=PATH Specify the master "mysqld" to use
3667
slave-binary=PATH Specify the slave "mysqld" to use
3691
3668
strace-client Create strace output for drizzletest client
3692
3669
max-save-core Limit the number of core files saved (to avoid filling
3693
3670
up disks for heavily crashing server). Defaults to
3699
3676
gprof See online documentation on how to use it.
3700
valgrind Run the "drizzletest" and "drizzled" executables using
3677
valgrind Run the "drizzletest" and "mysqld" executables using
3701
3678
valgrind with default options
3702
3679
valgrind-all Synonym for --valgrind
3703
valgrind-drizzleslap Run "drizzleslap" with valgrind.
3704
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3680
valgrind-drizzletest Run the "drizzletest" and "drizzle_client_test" executable
3706
valgrind-drizzled Run the "drizzled" executable with valgrind
3682
valgrind-mysqld Run the "mysqld" executable with valgrind
3707
3683
valgrind-options=ARGS Deprecated, use --valgrind-option
3708
3684
valgrind-option=ARGS Option to give valgrind, replaces default option(s),
3709
3685
can be specified more then once