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.
507
476
'master_port=i' => \$opt_master_myport,
508
477
'slave_port=i' => \$opt_slave_myport,
509
'memc_port=i' => \$opt_memc_myport,
510
'pbms_port=i' => \$opt_pbms_myport,
511
'dtr-build-thread=i' => \$opt_dtr_build_thread,
478
'mtr-build-thread=i' => \$opt_mtr_build_thread,
513
480
# Test case authoring
514
481
'record' => \$opt_record,
515
482
'check-testcases' => \$opt_check_testcases,
516
483
'mark-progress' => \$opt_mark_progress,
518
# Extra options used when starting drizzled
519
'drizzled=s' => \@opt_extra_drizzled_opt,
485
# Extra options used when starting mysqld
486
'mysqld=s' => \@opt_extra_mysqld_opt,
520
487
'engine=s' => \$opt_engine,
522
489
# Run test on running server
523
490
'extern' => \$opt_extern,
526
'subunit' => \$opt_subunit,
529
493
'gdb' => \$opt_gdb,
531
494
'client-gdb' => \$opt_client_gdb,
532
'client-dbx' => \$opt_client_dbx,
533
495
'manual-gdb' => \$opt_manual_gdb,
534
'manual-dbx' => \$opt_manual_dbx,
535
496
'manual-debug' => \$opt_manual_debug,
536
497
'ddd' => \$opt_ddd,
537
498
'client-ddd' => \$opt_client_ddd,
638
590
# Find the absolute path to the test directory
639
591
if ( ! $opt_testdir )
641
$glob_drizzle_test_dir= cwd();
593
$glob_mysql_test_dir= cwd();
645
$glob_drizzle_test_dir= $opt_testdir;
597
$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/..";
599
$default_vardir= "$glob_mysql_test_dir/var";
651
if ( ! $opt_suitepath )
653
$glob_suite_path= "$glob_drizzle_test_dir/../plugin";
657
$glob_suite_path= $opt_suitepath;
659
601
# In most cases, the base directory we find everything relative to,
660
# is the parent directory of the "drizzle-test" directory. For source
602
# is the parent directory of the "mysql-test" directory. For source
661
603
# distributions, TAR binary distributions and some other packages.
662
$glob_basedir= dirname($glob_drizzle_test_dir);
604
$glob_basedir= dirname($glob_mysql_test_dir);
664
606
# In the RPM case, binaries and libraries are installed in the
665
607
# 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
608
# directory. And we install "/usr/share/mysql-test". Moving up one
609
# more directory relative to "mysql-test" gives us a usable base
668
610
# directory for RPM installs.
669
611
if ( ! $source_dist and ! -d "$glob_basedir/bin" )
682
624
$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();
627
# Expect mysql-bench to be located adjacent to the source tree, by default
628
$glob_mysql_bench_dir= "$glob_basedir/../mysql-bench"
629
unless defined $glob_mysql_bench_dir;
630
$glob_mysql_bench_dir= undef
631
unless -d $glob_mysql_bench_dir;
634
$source_dist ? $glob_mysql_test_dir : $glob_basedir;
636
$glob_timers= mtr_init_timers();
694
# Find the drizzled executable to be able to find the drizzled version
639
# Find the mysqld executable to be able to find the mysqld version
695
640
# number as early as possible
698
643
# Look for the client binaries directory
699
$path_client_bindir= dtr_path_exists("$glob_builddir/client",
644
$path_client_bindir= mtr_path_exists("$glob_builddir/client",
700
645
"$glob_basedir/client",
701
646
"$glob_basedir/bin");
703
648
if (!$opt_extern)
705
$exe_drizzled= dtr_exe_exists ("$glob_basedir/drizzled/drizzled",
650
$exe_drizzled= mtr_exe_exists ("$glob_basedir/drizzled/drizzled",
706
651
"$path_client_bindir/drizzled",
707
652
"$glob_basedir/libexec/drizzled",
708
653
"$glob_basedir/bin/drizzled",
709
654
"$glob_basedir/sbin/drizzled",
710
655
"$glob_builddir/drizzled/drizzled");
712
# Use the drizzled found above to find out what features are available
713
collect_drizzled_features();
657
# Use the mysqld found above to find out what features are available
658
collect_mysqld_features();
717
$drizzled_variables{'port'}= 4427;
662
$mysqld_variables{'port'}= 4427;
720
665
if (!$opt_engine)
864
791
# --------------------------------------------------------------------------
865
792
if ( $opt_gdb || $opt_client_gdb || $opt_ddd || $opt_client_ddd ||
866
793
$opt_manual_gdb || $opt_manual_ddd || $opt_manual_debug ||
867
$opt_debugger || $opt_client_debugger || $opt_gdb || $opt_manual_gdb)
794
$opt_debugger || $opt_client_debugger )
869
796
# Indicate that we are using debugger
870
797
$glob_debugger= 1;
871
798
if ( $opt_extern )
873
dtr_error("Can't use --extern when using debugger");
800
mtr_error("Can't use --extern when using debugger");
877
804
# --------------------------------------------------------------------------
878
805
# Check if special exe was selected for master or slave
879
806
# --------------------------------------------------------------------------
880
$exe_master_drizzled= $exe_master_drizzled || $exe_drizzled;
881
$exe_slave_drizzled= $exe_slave_drizzled || $exe_drizzled;
807
$exe_master_mysqld= $exe_master_mysqld || $exe_drizzled;
808
$exe_slave_mysqld= $exe_slave_mysqld || $exe_drizzled;
883
810
# --------------------------------------------------------------------------
884
811
# Check valgrind arguments
885
812
# --------------------------------------------------------------------------
886
813
if ( $opt_valgrind or $opt_valgrind_path or @valgrind_args)
888
dtr_report("Turning on valgrind for all executables");
815
mtr_report("Turning on valgrind for all executables");
889
816
$opt_valgrind= 1;
890
$opt_valgrind_drizzled= 1;
817
$opt_valgrind_mysqld= 1;
891
818
$opt_valgrind_drizzletest= 1;
892
$ENV{'VALGRIND_RUN'} = '1';
894
elsif ( $opt_valgrind_drizzled )
820
elsif ( $opt_valgrind_mysqld )
896
dtr_report("Turning on valgrind for drizzled(s) only");
822
mtr_report("Turning on valgrind for mysqld(s) only");
897
823
$opt_valgrind= 1;
899
825
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");
827
mtr_report("Turning on valgrind for drizzletest and drizzle_client_test only");
907
828
$opt_valgrind= 1;
910
831
if ( $opt_callgrind )
912
dtr_report("Turning on valgrind with callgrind for drizzled(s)");
833
mtr_report("Turning on valgrind with callgrind for mysqld(s)");
913
834
$opt_valgrind= 1;
914
$opt_valgrind_drizzled= 1;
835
$opt_valgrind_mysqld= 1;
916
837
# Set special valgrind options unless options passed on command line
917
838
push(@valgrind_args, "--trace-children=yes")
918
839
unless @valgrind_args;
923
dtr_report("Valgrind with Massif tool for drizzled(s)");
925
$opt_valgrind_drizzled= 1;
928
842
if ( $opt_valgrind )
930
844
# Set valgrind_options to default unless already defined
931
845
push(@valgrind_args, @default_valgrind_args)
932
846
unless @valgrind_args;
934
dtr_report("Running valgrind with options \"",
848
mtr_report("Running valgrind with options \"",
935
849
join(" ", @valgrind_args), "\"");
876
# On QNX, /tmp/dir/master.sock and /tmp/dir//master.sock seem to be
877
# considered different, so avoid the extra slash (/) in the socket
879
my $sockdir = $opt_tmpdir;
882
# On some operating systems, there is a limit to the length of a
883
# UNIX domain socket's path far below PATH_MAX, so try to avoid long
885
$sockdir = tempdir(CLEANUP => 0) if ( length($sockdir) >= 70 );
967
path_myddir => "$opt_vardir/master-data",
968
path_myerr => "$opt_vardir/log/master.err",
969
path_pid => "$opt_vardir/run/master.pid",
970
path_sock => "$opt_vardir/master.sock",
971
port => $opt_master_myport,
972
secondary_port => $opt_master_myport + $secondary_port_offset,
973
start_timeout => 400, # enough time create innodb tables
974
cluster => 0, # index in clusters list
892
path_myddir => "$opt_vardir/master-data",
893
path_myerr => "$opt_vardir/log/master.err",
894
path_pid => "$opt_vardir/run/master.pid",
895
path_sock => "$sockdir/master.sock",
896
port => $opt_master_myport,
897
start_timeout => 400, # enough time create innodb tables
898
cluster => 0, # index in clusters list
983
path_myddir => "$opt_vardir/master1-data",
984
path_myerr => "$opt_vardir/log/master1.err",
985
path_pid => "$opt_vardir/run/master1.pid",
986
path_sock => "$opt_vardir/master1.sock",
987
port => $opt_master_myport + 1,
988
secondary_port => $opt_master_myport + 1 + $secondary_port_offset,
989
start_timeout => 400, # enough time create innodb tables
990
cluster => 0, # index in clusters list
907
path_myddir => "$opt_vardir/master1-data",
908
path_myerr => "$opt_vardir/log/master1.err",
909
path_pid => "$opt_vardir/run/master1.pid",
910
path_sock => "$sockdir/master1.sock",
911
port => $opt_master_myport + 1,
912
start_timeout => 400, # enough time create innodb tables
913
cluster => 0, # index in clusters list
999
path_myddir => "$opt_vardir/slave-data",
1000
path_myerr => "$opt_vardir/log/slave.err",
1001
path_pid => "$opt_vardir/run/slave.pid",
1002
path_sock => "$opt_vardir/slave.sock",
1003
port => $opt_slave_myport,
1004
secondary_port => $opt_slave_myport + $secondary_port_offset,
1005
start_timeout => 400,
1006
cluster => 1, # index in clusters list
922
path_myddir => "$opt_vardir/slave-data",
923
path_myerr => "$opt_vardir/log/slave.err",
924
path_pid => "$opt_vardir/run/slave.pid",
925
path_sock => "$sockdir/slave.sock",
926
port => $opt_slave_myport,
927
start_timeout => 400,
929
cluster => 1, # index in clusters list
1015
path_myddir => "$opt_vardir/slave1-data",
1016
path_myerr => "$opt_vardir/log/slave1.err",
1017
path_pid => "$opt_vardir/run/slave1.pid",
1018
path_sock => "$opt_vardir/slave1.sock",
1019
port => $opt_slave_myport + 1,
1020
secondary_port => $opt_slave_myport + 1 + $secondary_port_offset,
1021
start_timeout => 300,
1022
cluster => -1, # index in clusters list
938
path_myddir => "$opt_vardir/slave1-data",
939
path_myerr => "$opt_vardir/log/slave1.err",
940
path_pid => "$opt_vardir/run/slave1.pid",
941
path_sock => "$sockdir/slave1.sock",
942
port => $opt_slave_myport + 1,
943
start_timeout => 300,
944
cluster => -1, # index in clusters list
1031
path_myddir => "$opt_vardir/slave2-data",
1032
path_myerr => "$opt_vardir/log/slave2.err",
1033
path_pid => "$opt_vardir/run/slave2.pid",
1034
path_sock => "$opt_vardir/slave2.sock",
1035
port => $opt_slave_myport + 2,
1036
secondary_port => $opt_slave_myport + 2 + $secondary_port_offset,
1037
start_timeout => 300,
1038
cluster => -1, # index in clusters list
953
path_myddir => "$opt_vardir/slave2-data",
954
path_myerr => "$opt_vardir/log/slave2.err",
955
path_pid => "$opt_vardir/run/slave2.pid",
956
path_sock => "$sockdir/slave2.sock",
957
port => $opt_slave_myport + 2,
958
start_timeout => 300,
959
cluster => -1, # index in clusters list
1071
992
# When both --valgrind and --debug is selected, send
1072
993
# all output to the trace file, making it possible to
1073
994
# see the exact location where valgrind complains
1074
foreach my $drizzled (@{$master}, @{$slave})
995
foreach my $mysqld (@{$master}, @{$slave})
1076
my $sidx= $drizzled->{idx} ? "$drizzled->{idx}" : "";
1077
$drizzled->{path_myerr}=
1078
"$opt_vardir/log/" . $drizzled->{type} . "$sidx.trace";
1083
sub gimme_a_good_port($)
1085
my $port_to_test= shift;
1086
if ($port_to_test == 8000)
1088
$port_to_test = 8001;
1091
while ($is_port_bad) {
1092
my $sock = new IO::Socket::INET( PeerAddr => 'localhost',
1093
PeerPort => $port_to_test,
1098
if ($port_to_test >= 32767) {
1099
$port_to_test = 5001;
1106
return $port_to_test;
997
my $sidx= $mysqld->{idx} ? "$mysqld->{idx}" : "";
998
$mysqld->{path_myerr}=
999
"$opt_vardir/log/" . $mysqld->{type} . "$sidx.trace";
1110
1005
# To make it easier for different devs to work on the same host,
1111
1006
# an environment variable can be used to control all ports. A small
1122
1017
# But a fairly safe range seems to be 5001 - 32767
1125
sub set_dtr_build_thread_ports($) {
1126
my $dtr_build_thread= shift;
1020
sub set_mtr_build_thread_ports($) {
1021
my $mtr_build_thread= shift;
1128
if ( lc($dtr_build_thread) eq 'auto' ) {
1023
if ( lc($mtr_build_thread) eq 'auto' ) {
1129
1024
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";
1025
$ENV{'MTR_BUILD_THREAD'} = $mtr_build_thread = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
1026
print "got ".$mtr_build_thread."\n";
1134
$dtr_build_thread= (($dtr_build_thread * 10) % 2000) - 1000;
1029
$mtr_build_thread= (($mtr_build_thread * 10) % 2000) - 1000;
1136
1031
# Up to two masters, up to three slaves
1137
1032
# 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
1141
$opt_slave_myport= gimme_a_good_port($opt_master_myport + 2); # and 3 4
1142
$opt_memc_myport= gimme_a_good_port($opt_master_myport + 10);
1143
$opt_pbms_myport= gimme_a_good_port($opt_master_myport + 11);
1033
$opt_master_myport= $mtr_build_thread + 9000; # and 1
1034
$opt_slave_myport= $opt_master_myport + 2; # and 3 4
1145
1036
if ( $opt_master_myport < 5001 or $opt_master_myport + 10 >= 32767 )
1147
dtr_error("DTR_BUILD_THREAD number results in a port",
1038
mtr_error("MTR_BUILD_THREAD number results in a port",
1148
1039
"outside 5001 - 32767",
1149
1040
"($opt_master_myport - $opt_master_myport + 10)");
1173
1064
##############################################################################
1176
sub collect_drizzled_features () {
1067
sub collect_mysqld_features () {
1177
1068
my $found_variable_list_start= 0;
1178
1069
my $tmpdir= tempdir(CLEANUP => 0); # Directory removed by this function
1181
# Execute "drizzled --help" to get a list
1072
# Execute "mysqld --help --verbose" to get a list
1182
1073
# list of all features and settings
1184
# --no-defaults are to avoid loading
1075
# --no-defaults and --skip-grant-tables are to avoid loading
1185
1076
# system-wide configs and plugins
1187
my $list= `$exe_drizzled --no-defaults --help`;
1078
# --datadir must exist, mysqld will chdir into it
1080
my $list= `$exe_drizzled --no-defaults --datadir=$tmpdir --skip-grant-tables --verbose --help`;
1189
1082
foreach my $line (split('\n', $list))
1191
1084
# First look for version
1192
if ( !$drizzle_version_id )
1085
if ( !$mysql_version_id )
1194
1087
# Look for version
1195
1088
my $exe_name= basename($exe_drizzled);
1196
dtr_verbose("exe_name: $exe_name");
1089
mtr_verbose("exe_name: $exe_name");
1197
1090
if ( $line =~ /^\S*$exe_name\s\sVer\s([0-9]*)\.([0-9]*)\.([0-9]*)/ )
1199
1092
#print "Major: $1 Minor: $2 Build: $3\n";
1200
$drizzle_version_id= $1*10000 + $2*100 + $3;
1201
#print "drizzle_version_id: $drizzle_version_id\n";
1202
dtr_report("Drizzle Version $1.$2.$3");
1093
$mysql_version_id= $1*10000 + $2*100 + $3;
1094
#print "mysql_version_id: $mysql_version_id\n";
1095
mtr_report("MySQL Version $1.$2.$3");
1100
if (!$found_variable_list_start)
1102
# Look for start of variables list
1103
if ( $line =~ /[\-]+\s[\-]+/ )
1105
$found_variable_list_start= 1;
1110
# Put variables into hash
1111
if ( $line =~ /^([\S]+)[ \t]+(.*?)\r?$/ )
1113
# print "$1=\"$2\"\n";
1114
$mysqld_variables{$1}= $2;
1118
# The variable list is ended with a blank line
1119
if ( $line =~ /^[\s]*$/ )
1125
# Send out a warning, we should fix the variables that has no
1126
# space between variable name and it's value
1127
# or should it be fixed width column parsing? It does not
1128
# look like that in function my_print_variables in my_getopt.c
1129
mtr_warning("Could not parse variable list line : $line");
1206
1135
rmtree($tmpdir);
1207
dtr_error("Could not find version of Drizzle") unless $drizzle_version_id;
1136
mtr_error("Could not find version of MySQL") unless $mysql_version_id;
1137
mtr_error("Could not find variabes list") unless $found_variable_list_start;
1212
1142
sub run_query($$) {
1213
my ($drizzled, $query)= @_;
1143
my ($mysqld, $query)= @_;
1216
dtr_init_args(\$args);
1146
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);
1148
mtr_add_arg($args, "--no-defaults");
1149
mtr_add_arg($args, "--skip-stack-trace");
1150
mtr_add_arg($args, "--user=%s", $opt_user);
1151
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
1152
mtr_add_arg($args, "--silent"); # Tab separated output
1153
mtr_add_arg($args, "-e '%s'", $query);
1225
1155
my $cmd= "$exe_drizzle " . join(' ', @$args);
1226
dtr_verbose("cmd: $cmd");
1156
mtr_verbose("cmd: $cmd");
1231
sub collect_drizzled_features_from_running_server ()
1161
sub collect_mysqld_features_from_running_server ()
1233
my $list= run_query($master->[0], "use drizzle; SHOW VARIABLES");
1163
my $list= run_query($master->[0], "use mysql; SHOW VARIABLES");
1235
1165
foreach my $line (split('\n', $list))
1256
1186
$exe_libtool= "../libtool";
1257
1187
if ($opt_valgrind or $glob_debugger)
1259
dtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1189
mtr_report("Using \"$exe_libtool\" when running valgrind or debugger");
1193
# Look for my_print_defaults
1194
$exe_my_print_defaults=
1196
"$path_client_bindir/my_print_defaults",
1197
"$glob_basedir/extra/my_print_defaults",
1198
"$glob_builddir/extra/my_print_defaults");
1263
1200
# Look for perror
1264
1201
$exe_perror= "perror";
1266
1203
# 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");
1204
$exe_drizzlecheck= mtr_exe_exists("$path_client_bindir/drizzlecheck");
1205
$exe_drizzledump= mtr_exe_exists("$path_client_bindir/drizzledump");
1206
$exe_drizzleimport= mtr_exe_exists("$path_client_bindir/drizzleimport");
1207
$exe_drizzle= mtr_exe_exists("$path_client_bindir/drizzle");
1272
1209
if (!$opt_extern)
1274
1211
# Look for SQL scripts directory
1275
if ( $drizzle_version_id >= 50100 )
1212
if ( $mysql_version_id >= 50100 )
1277
$exe_drizzleslap= dtr_exe_exists("$path_client_bindir/drizzleslap");
1214
$exe_drizzleslap= mtr_exe_exists("$path_client_bindir/drizzleslap");
1281
# Look for schema_writer
1283
$exe_schemawriter= dtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1284
"$glob_builddir/drizzled/message/schema_writer");
1287
1218
# Look for drizzletest executable
1289
$exe_drizzletest= dtr_exe_exists("$path_client_bindir/drizzletest");
1220
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1292
1223
# Look for drizzle_client_test executable which may _not_ exist in
1293
1224
# some versions, test using it should be skipped
1295
1226
$exe_drizzle_client_test=
1296
dtr_exe_maybe_exists(
1227
mtr_exe_maybe_exists(
1297
1228
"$glob_basedir/tests/drizzle_client_test",
1298
1229
"$glob_basedir/bin/drizzle_client_test");
1341
1259
my $exe= $exe_drizzle_client_test;
1344
dtr_init_args(\$args);
1262
mtr_init_args(\$args);
1345
1263
if ( $opt_valgrind_drizzletest )
1347
1265
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'}");
1268
mtr_add_arg($args, "--no-defaults");
1269
mtr_add_arg($args, "--testcase");
1270
mtr_add_arg($args, "--user=root");
1271
mtr_add_arg($args, "--port=$master->[0]->{'port'}");
1355
if ( $opt_extern || $drizzle_version_id >= 50000 )
1273
if ( $opt_extern || $mysql_version_id >= 50000 )
1357
dtr_add_arg($args, "--vardir=$opt_vardir")
1275
mtr_add_arg($args, "--vardir=$opt_vardir")
1360
1278
if ( $opt_debug )
1363
1281
"--debug=d:t:A,$path_vardir_trace/log/drizzle_client_test.trace");
1416
1334
$ENV{'LD_LIBRARY_PATH'} ?
1417
1335
split(':', $ENV{'LD_LIBRARY_PATH'}) : (),
1418
1336
@ld_library_paths);
1419
dtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1337
mtr_debug("LD_LIBRARY_PATH: $ENV{'LD_LIBRARY_PATH'}");
1421
1339
$ENV{'DYLD_LIBRARY_PATH'}= join(":", @ld_library_paths,
1422
1340
$ENV{'DYLD_LIBRARY_PATH'} ?
1423
1341
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
1424
dtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1342
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
1426
1344
# The environment variable used for shared libs on AIX
1427
1345
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
1428
1346
$ENV{'SHLIB_PATH'} ?
1429
1347
split(':', $ENV{'SHLIB_PATH'}) : ());
1430
dtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1348
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
1432
1350
# The environment variable used for shared libs on hp-ux
1433
1351
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
1434
1352
$ENV{'LIBPATH'} ?
1435
1353
split(':', $ENV{'LIBPATH'}) : ());
1436
dtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1354
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
1438
1356
# --------------------------------------------------------------------------
1439
1357
# Also command lines in .opt files may contain env vars
1469
1385
$ENV{'SLAVE_MYPORT'}= $slave->[0]->{'port'};
1470
1386
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1471
1387
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
1472
$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;
1388
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'port'};
1390
$ENV{'MTR_BUILD_THREAD'}= $opt_mtr_build_thread;
1392
$ENV{'EXE_MYSQL'}= $exe_drizzle;
1394
# ----------------------------------------------------
1395
# Setup env so childs can execute mysqlcheck
1396
# ----------------------------------------------------
1397
my $cmdline_mysqlcheck=
1398
mtr_native_path($exe_drizzlecheck) .
1399
" --no-defaults --debug-check -uroot " .
1400
"--port=$master->[0]->{'port'} ";
1404
$cmdline_mysqlcheck .=
1405
" --debug=d:t:A,$path_vardir_trace/log/mysqlcheck.trace";
1407
$ENV{'DRIZZLE_CHECK'}= $cmdline_mysqlcheck;
1481
1409
# ----------------------------------------------------
1482
1410
# Setup env to childs can execute myqldump
1483
1411
# ----------------------------------------------------
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) .
1488
" --no-defaults -uroot " .
1489
" --port=$master->[0]->{'secondary_port'} ";
1412
my $cmdline_mysqldump= generate_cmdline_mysqldump($master->[0]);
1413
my $cmdline_mysqldumpslave= generate_cmdline_mysqldump($slave->[0]);
1491
1415
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";
1417
$cmdline_mysqldump .=
1418
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-master.trace";
1419
$cmdline_mysqldumpslave .=
1420
" --debug=d:t:A,$path_vardir_trace/log/mysqldump-slave.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
1422
$ENV{'DRIZZLE_DUMP'}= $cmdline_mysqldump;
1423
$ENV{'DRIZZLE_DUMP_SLAVE'}= $cmdline_mysqldumpslave;
1425
# ----------------------------------------------------
1426
# Setup env so childs can execute mysqlslap
1513
1427
# ----------------------------------------------------
1514
1428
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) .
1430
my $cmdline_drizzleslap=
1431
mtr_native_path($exe_drizzleslap) .
1525
1433
"--port=$master->[0]->{'port'} ";
1526
my $cmdline_drizzleslap_secondary=
1527
dtr_native_path($exe_drizzleslap) .
1529
" --port=$master->[0]->{'secondary_port'} ";
1531
1435
if ( $opt_debug )
1533
1437
$cmdline_drizzleslap .=
1534
1438
" --debug=d:t:A,$path_vardir_trace/log/drizzleslap.trace";
1535
$cmdline_drizzleslap_secondary .=
1536
" --debug=d:t:A,$path_vardir_trace/log/drizzleslap.trace";
1538
1440
$ENV{'DRIZZLE_SLAP'}= $cmdline_drizzleslap;
1539
$ENV{'DRIZZLE_SLAP_SECONDARY'}= $cmdline_drizzleslap_secondary;
1544
1445
# ----------------------------------------------------
1545
# Setup env so childs can execute drizzleimport
1446
# Setup env so childs can execute mysqlimport
1546
1447
# ----------------------------------------------------
1547
my $cmdline_drizzleimport=
1548
dtr_native_path($exe_drizzleimport) .
1448
my $cmdline_mysqlimport=
1449
mtr_native_path($exe_drizzleimport) .
1450
" -uroot --debug-check " .
1550
1451
"--port=$master->[0]->{'port'} ";
1552
1453
if ( $opt_debug )
1554
$cmdline_drizzleimport .=
1555
" --debug=d:t:A,$path_vardir_trace/log/drizzleimport.trace";
1455
$cmdline_mysqlimport .=
1456
" --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) .
1565
" --no-defaults --host=localhost --user=root --password= " .
1458
$ENV{'DRIZZLE_IMPORT'}= $cmdline_mysqlimport;
1461
# ----------------------------------------------------
1462
# Setup env so childs can execute mysql
1463
# ----------------------------------------------------
1465
mtr_native_path($exe_drizzle) .
1466
" --no-defaults --debug-check --host=localhost --user=root --password= " .
1566
1467
"--port=$master->[0]->{'port'} ";
1567
my $cmdline_drizzle_secondary=
1568
dtr_native_path($exe_drizzle) .
1569
" --no-defaults --host=localhost --user=root --password= " .
1570
" --port=$master->[0]->{'secondary_port'} ";
1572
$ENV{'DRIZZLE'}= $cmdline_drizzle;
1573
$ENV{'DRIZZLE_SECONDARY'}= $cmdline_drizzle_secondary;
1469
$ENV{'MYSQL'}= $cmdline_mysql;
1575
1471
# ----------------------------------------------------
1576
1472
# Setup env so childs can execute bug25714
1586
1482
# ----------------------------------------------------
1587
# Setup env so childs can execute drizzle_fix_system_tables
1483
# Setup env so childs can execute mysql_fix_system_tables
1588
1484
# ----------------------------------------------------
1589
1485
#if ( !$opt_extern)
1592
my $cmdline_drizzle_fix_system_tables=
1488
my $cmdline_mysql_fix_system_tables=
1593
1489
"$exe_drizzle_fix_system_tables --no-defaults --host=localhost " .
1594
1490
"--user=root --password= " .
1595
1491
"--basedir=$glob_basedir --bindir=$path_client_bindir --verbose " .
1596
1492
"--port=$master->[0]->{'port'} ";
1597
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_drizzle_fix_system_tables;
1493
$ENV{'DRIZZLE_FIX_SYSTEM_TABLES'}= $cmdline_mysql_fix_system_tables;
1601
1497
# ----------------------------------------------------
1498
# Setup env so childs can execute my_print_defaults
1499
# ----------------------------------------------------
1500
$ENV{'DRIZZLE_MY_PRINT_DEFAULTS'}= mtr_native_path($exe_my_print_defaults);
1502
# ----------------------------------------------------
1602
1503
# Setup env so childs can shutdown the server
1603
1504
# ----------------------------------------------------
1604
$ENV{'DRIZZLED_SHUTDOWN'}= dtr_native_path($exe_drizzle);
1505
$ENV{'DRIZZLED_SHUTDOWN'}= mtr_native_path($exe_drizzle);
1606
1507
# ----------------------------------------------------
1607
1508
# Setup env so childs can execute perror
1608
1509
# ----------------------------------------------------
1609
$ENV{'MY_PERROR'}= dtr_native_path($exe_perror);
1510
$ENV{'MY_PERROR'}= mtr_native_path($exe_perror);
1611
1512
# ----------------------------------------------------
1612
# Add the path where drizzled will find ha_example.so
1513
# Add the path where mysqld will find ha_example.so
1613
1514
# ----------------------------------------------------
1614
1515
$ENV{'EXAMPLE_PLUGIN'}=
1615
1516
($lib_example_plugin ? basename($lib_example_plugin) : "");
1617
1518
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
1619
1520
# ----------------------------------------------------
1521
# Setup env so childs can execute myisampack and myisamchk
1522
# ----------------------------------------------------
1523
# $ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
1524
# "$path_client_bindir/myisamchk",
1525
# "$glob_basedir/storage/myisam/myisamchk",
1526
# "$glob_basedir/myisam/myisamchk"));
1527
# $ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
1528
# "$path_client_bindir/myisampack",
1529
# "$glob_basedir/storage/myisam/myisampack",
1530
# "$glob_basedir/myisam/myisampack"));
1532
# ----------------------------------------------------
1620
1533
# We are nice and report a bit about our settings
1621
1534
# ----------------------------------------------------
1622
1535
if (!$opt_extern)
1624
print "Using DTR_BUILD_THREAD = $ENV{DTR_BUILD_THREAD}\n";
1537
print "Using MTR_BUILD_THREAD = $ENV{MTR_BUILD_THREAD}\n";
1625
1538
print "Using MASTER_MYPORT = $ENV{MASTER_MYPORT}\n";
1626
1539
print "Using MASTER_MYPORT1 = $ENV{MASTER_MYPORT1}\n";
1627
1540
print "Using SLAVE_MYPORT = $ENV{SLAVE_MYPORT}\n";
1628
1541
print "Using SLAVE_MYPORT1 = $ENV{SLAVE_MYPORT1}\n";
1629
1542
print "Using SLAVE_MYPORT2 = $ENV{SLAVE_MYPORT2}\n";
1630
print "Using MC_PORT = $ENV{MC_PORT}\n";
1631
print "Using PBMS_PORT = $ENV{PBMS_PORT}\n";
1634
1545
# Create an environment variable to make it possible
1699
1610
if ( $opt_mem and readlink($opt_vardir) eq $opt_mem )
1701
1612
# Remove the directory which the link points at
1702
dtr_verbose("Removing " . readlink($opt_vardir));
1703
dtr_rmtree(readlink($opt_vardir));
1613
mtr_verbose("Removing " . readlink($opt_vardir));
1614
mtr_rmtree(readlink($opt_vardir));
1705
1616
# Remove the "var" symlink
1706
dtr_verbose("unlink($opt_vardir)");
1617
mtr_verbose("unlink($opt_vardir)");
1707
1618
unlink($opt_vardir);
1709
1620
elsif ( $opt_mem )
1711
1622
# Just remove the "var" symlink
1712
dtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1623
mtr_report("WARNING: Removing '$opt_vardir' symlink it's wrong");
1714
dtr_verbose("unlink($opt_vardir)");
1625
mtr_verbose("unlink($opt_vardir)");
1715
1626
unlink($opt_vardir);
1719
# Some users creates a soft link in drizzle-test/var to another area
1630
# Some users creates a soft link in mysql-test/var to another area
1720
1631
# - allow it, but remove all files in it
1722
dtr_report("WARNING: Using the 'drizzle-test/var' symlink");
1633
mtr_report("WARNING: Using the 'mysql-test/var' symlink");
1724
1635
# Make sure the directory where it points exist
1725
dtr_error("The destination for symlink $opt_vardir does not exist")
1636
mtr_error("The destination for symlink $opt_vardir does not exist")
1726
1637
if ! -d readlink($opt_vardir);
1728
1639
foreach my $bin ( glob("$opt_vardir/*") )
1730
dtr_verbose("Removing bin $bin");
1641
mtr_verbose("Removing bin $bin");
1737
1648
# Remove the entire "var" dir
1738
dtr_verbose("Removing $opt_vardir/");
1739
dtr_rmtree("$opt_vardir/");
1649
mtr_verbose("Removing $opt_vardir/");
1650
mtr_rmtree("$opt_vardir/");
1742
1653
if ( $opt_mem )
1770
1681
# Create var and the directories needed in var
1772
1683
sub setup_vardir() {
1773
dtr_report("Creating Directories");
1684
mtr_report("Creating Directories");
1775
1686
if ( $opt_vardir eq $default_vardir )
1778
# Running with "var" in drizzle-test dir
1689
# Running with "var" in mysql-test dir
1780
1691
if ( -l $opt_vardir )
1782
1693
# it's a symlink
1784
1695
# Make sure the directory where it points exist
1785
dtr_error("The destination for symlink $opt_vardir does not exist")
1696
mtr_error("The destination for symlink $opt_vardir does not exist")
1786
1697
if ! -d readlink($opt_vardir);
1788
1699
elsif ( $opt_mem )
1790
1701
# Runinng with "var" as a link to some "memory" location, normally tmpfs
1791
dtr_verbose("Creating $opt_mem");
1702
mtr_verbose("Creating $opt_mem");
1792
1703
mkpath($opt_mem);
1794
dtr_report("Symlinking 'var' to '$opt_mem'");
1705
mtr_report("Symlinking 'var' to '$opt_mem'");
1795
1706
symlink($opt_mem, $opt_vardir);
1799
1710
if ( ! -d $opt_vardir )
1801
dtr_verbose("Creating $opt_vardir");
1712
mtr_verbose("Creating $opt_vardir");
1802
1713
mkpath($opt_vardir);
1805
1716
# Ensure a proper error message if vardir couldn't be created
1806
1717
unless ( -d $opt_vardir and -w $opt_vardir )
1808
dtr_error("Writable 'var' directory is needed, use the " .
1719
mtr_error("Writable 'var' directory is needed, use the " .
1809
1720
"'--vardir=<path>' option");
1911
drizzled_start($master->[0],[],[]);
1814
mysqld_start($master->[0],[],[]);
1912
1815
if ( ! $master->[0]->{'pid'} )
1914
dtr_error("Can't start the drizzled server");
1817
mtr_error("Can't start the mysqld server");
1918
dtr_init_args(\$args);
1821
mtr_init_args(\$args);
1920
dtr_add_arg($args, "--user=%s", $opt_user);
1823
mtr_add_arg($args, "--user=%s", $opt_user);
1922
1825
if ( $opt_small_bench )
1924
dtr_add_arg($args, "--small-test");
1925
dtr_add_arg($args, "--small-tables");
1827
mtr_add_arg($args, "--small-test");
1828
mtr_add_arg($args, "--small-tables");
1928
chdir($glob_drizzle_bench_dir)
1929
or dtr_error("Couldn't chdir to '$glob_drizzle_bench_dir': $!");
1831
chdir($glob_mysql_bench_dir)
1832
or mtr_error("Couldn't chdir to '$glob_mysql_bench_dir': $!");
1931
1834
if ( ! $benchmark )
1933
dtr_run("$glob_drizzle_bench_dir/run-all-tests", $args, "", "", "", "");
1836
mtr_add_arg($args, "--log");
1837
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
1934
1838
# FIXME check result code?!
1936
1840
elsif ( -x $benchmark )
1938
dtr_run("$glob_drizzle_bench_dir/$benchmark", $args, "", "", "", "");
1842
mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", "");
1939
1843
# FIXME check result code?!
1943
dtr_error("Benchmark $benchmark not found");
1847
mtr_error("Benchmark $benchmark not found");
1946
chdir($glob_drizzle_test_dir); # Go back
1850
chdir($glob_mysql_test_dir); # Go back
1949
1853
stop_masters();
2509
2413
my $prefix= ""; # If drizzletest server arg
2511
dtr_add_arg($args, "%s--no-defaults", $prefix);
2415
mtr_add_arg($args, "%s--no-defaults", $prefix);
2417
$path_my_basedir= collapse_path($path_my_basedir);
2418
mtr_add_arg($args, "%s--basedir=%s", $prefix, $path_my_basedir);
2513
2420
if ($opt_engine)
2515
dtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2422
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2518
if ( $drizzle_version_id >= 50036)
2425
if ( $mysql_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);
2427
# By default, prevent the started mysqld to access files outside of vardir
2428
mtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2524
dtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2431
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2526
2433
# Increase default connect_timeout to avoid intermittent
2527
2434
# disconnects when test servers are put under load
2528
2435
# 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
2436
mtr_add_arg($args, "%s--connect-timeout=60", $prefix);
2439
# When mysqld is run by a root user(euid is 0), it will fail
2533
2440
# 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);
2442
if (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt) == 0) {
2443
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'});
2446
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
2447
$mysqld->{'path_pid'});
2449
mtr_add_arg($args, "%s--port=%d", $prefix,
2452
mtr_add_arg($args, "%s--datadir=%s", $prefix,
2453
$mysqld->{'path_myddir'});
2455
my $log_base_path= "$opt_vardir/log/$mysqld->{'type'}$sidx";
2456
mtr_add_arg($args, "%s--log=%s.log", $prefix, $log_base_path);
2554
2458
# Check if "extra_opt" contains --skip-log-bin
2555
if ( $drizzled->{'type'} eq 'master' )
2459
if ( $mysqld->{'type'} eq 'master' )
2557
dtr_add_arg($args, "%s--server-id=%d", $prefix,
2461
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2558
2462
$idx > 0 ? $idx + 101 : 1);
2561
"%s--innodb.data-file-path=ibdata1:20M:autoextend", $prefix);
2464
mtr_add_arg($args, "%s--loose-innodb_data_file_path=ibdata1:10M:autoextend",
2467
mtr_add_arg($args, "%s--loose-innodb-lock-wait-timeout=5", $prefix);
2469
if ( $idx > 0 or !$use_innodb)
2471
mtr_add_arg($args, "%s--loose-skip-innodb", $prefix);
2566
dtr_error("unknown drizzled type")
2567
unless $drizzled->{'type'} eq 'slave';
2476
mtr_error("unknown mysqld type")
2477
unless $mysqld->{'type'} eq 'slave';
2569
2479
# Directory where slaves find the dumps generated by "load data"
2570
2480
# on the server. The path need to have constant length otherwise
2576
2486
foreach my $arg ( @$slave_master_info )
2578
dtr_add_arg($args, "%s%s", $prefix, $arg);
2488
mtr_add_arg($args, "%s%s", $prefix, $arg);
2583
2493
my $slave_server_id= 2 + $idx;
2584
2494
my $slave_rpl_rank= $slave_server_id;
2585
dtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2495
mtr_add_arg($args, "%s--server-id=%d", $prefix, $slave_server_id);
2589
2499
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);
2501
mtr_add_arg($args, "%s--debug=d:t:i:A,%s/log/%s%s.trace",
2502
$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);
2505
mtr_add_arg($args, "%s--key_buffer_size=1M", $prefix);
2506
mtr_add_arg($args, "%s--sort_buffer=256K", $prefix);
2507
mtr_add_arg($args, "%s--max_heap_table_size=1M", $prefix);
2598
2509
if ( $opt_warnings )
2600
dtr_add_arg($args, "%s--log-warnings", $prefix);
2511
mtr_add_arg($args, "%s--log-warnings", $prefix);
2603
# Indicate to "drizzled" it will be debugged in debugger
2514
# Indicate to "mysqld" it will be debugged in debugger
2604
2515
if ( $glob_debugger )
2606
dtr_add_arg($args, "%s--gdb", $prefix);
2517
mtr_add_arg($args, "%s--gdb", $prefix);
2609
2520
my $found_skip_core= 0;
2610
foreach my $arg ( @opt_extra_drizzled_opt, @$extra_opt )
2521
foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
2612
2523
# Allow --skip-core-file to be set in <testname>-[master|slave].opt file
2613
2524
if ($arg eq "--skip-core-file")
2645
2556
my $wait_for_pid_file= 1;
2647
my $type= $drizzled->{'type'};
2648
my $idx= $drizzled->{'idx'};
2558
my $type= $mysqld->{'type'};
2559
my $idx= $mysqld->{'idx'};
2650
2561
if ( $type eq 'master' )
2652
$exe= $exe_master_drizzled;
2563
$exe= $exe_master_mysqld;
2654
2565
elsif ( $type eq 'slave' )
2656
$exe= $exe_slave_drizzled;
2567
$exe= $exe_slave_mysqld;
2660
dtr_error("Unknown 'type' \"$type\" passed to drizzled_start");
2571
mtr_error("Unknown 'type' \"$type\" passed to mysqld_start");
2663
dtr_init_args(\$args);
2574
mtr_init_args(\$args);
2665
if ( $opt_valgrind_drizzled )
2576
if ( $opt_valgrind_mysqld )
2667
2578
valgrind_arguments($args, \$exe);
2670
drizzled_arguments($args,$drizzled,$extra_opt,$slave_master_info);
2581
mysqld_arguments($args,$mysqld,$extra_opt,$slave_master_info);
2672
2583
if ( $opt_gdb || $opt_manual_gdb)
2705
2612
# Remove the pidfile
2706
unlink($drizzled->{'path_pid'});
2613
unlink($mysqld->{'path_pid'});
2708
2615
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'},
2617
$pid= mtr_spawn($exe, $args, "",
2618
$mysqld->{'path_myerr'},
2619
$mysqld->{'path_myerr'},
2715
2621
{ append_log_file => 1 });
2719
if ( $wait_for_pid_file && !sleep_until_file_created($drizzled->{'path_pid'},
2720
$drizzled->{'start_timeout'},
2625
if ( $wait_for_pid_file && !sleep_until_file_created($mysqld->{'path_pid'},
2626
$mysqld->{'start_timeout'},
2724
dtr_error("Failed to start drizzled $drizzled->{'type'}");
2630
mtr_error("Failed to start mysqld $mysqld->{'type'}");
2728
2634
# Remember pid of the started process
2729
$drizzled->{'pid'}= $pid;
2635
$mysqld->{'pid'}= $pid;
2731
2637
# Remember options used when starting
2732
$drizzled->{'start_opts'}= $extra_opt;
2733
$drizzled->{'start_slave_master_info'}= $slave_master_info;
2638
$mysqld->{'start_opts'}= $extra_opt;
2639
$mysqld->{'start_slave_master_info'}= $slave_master_info;
2735
dtr_verbose("drizzled pid: $pid");
2641
mtr_verbose("mysqld pid: $pid");
2740
2646
sub stop_all_servers () {
2742
dtr_report("Stopping All Servers");
2648
mtr_report("Stopping All Servers");
2744
2650
my %admin_pids; # hash of admin processes that requests shutdown
2745
2651
my @kill_pids; # list of processes to shutdown/kill
2748
2654
# Start shutdown of all started masters
2749
foreach my $drizzled (@{$slave}, @{$master})
2655
foreach my $mysqld (@{$slave}, @{$master})
2751
if ( $drizzled->{'pid'} )
2657
if ( $mysqld->{'pid'} )
2753
$pid= dtr_server_shutdown($drizzled);
2659
$pid= mtr_server_shutdown($mysqld);
2754
2660
$admin_pids{$pid}= 1;
2756
2662
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'},
2663
pid => $mysqld->{'pid'},
2664
real_pid => $mysqld->{'real_pid'},
2665
pidfile => $mysqld->{'path_pid'},
2666
sockfile => $mysqld->{'path_sock'},
2667
port => $mysqld->{'port'},
2668
errfile => $mysqld->{'path_myerr'},
2765
$drizzled->{'pid'}= 0; # Assume we are done with it
2671
$mysqld->{'pid'}= 0; # Assume we are done with it
2769
2675
# Wait blocking until all shutdown processes has completed
2770
dtr_wait_blocking(\%admin_pids);
2676
mtr_wait_blocking(\%admin_pids);
2772
2678
# Make sure that process has shutdown else try to kill them
2773
dtr_check_stop_servers(\@kill_pids);
2679
mtr_check_stop_servers(\@kill_pids);
2784
2690
if ( $tinfo->{'master_sh'} )
2786
2692
$do_restart= 1; # Always restart if script to run
2787
dtr_verbose("Restart master: Always restart if script to run");
2693
mtr_verbose("Restart master: Always restart if script to run");
2789
2695
if ( $tinfo->{'force_restart'} )
2791
2697
$do_restart= 1; # Always restart if --force-restart in -opt file
2792
dtr_verbose("Restart master: Restart forced with --force-restart");
2698
mtr_verbose("Restart master: Restart forced with --force-restart");
2794
2700
elsif( $tinfo->{'component_id'} eq 'im' )
2796
2702
$do_restart= 1;
2797
dtr_verbose("Restart master: Always restart for im tests");
2703
mtr_verbose("Restart master: Always restart for im tests");
2799
2705
elsif ( $master->[0]->{'running_master_options'} and
2800
2706
$master->[0]->{'running_master_options'}->{'timezone'} ne
2801
2707
$tinfo->{'timezone'})
2803
2709
$do_restart= 1;
2804
dtr_verbose("Restart master: Different timezone");
2710
mtr_verbose("Restart master: Different timezone");
2806
2712
# Check that running master was started with same options
2807
2713
# as the current test requires
2808
elsif (! dtr_same_opts($master->[0]->{'start_opts'},
2714
elsif (! mtr_same_opts($master->[0]->{'start_opts'},
2809
2715
$tinfo->{'master_opt'}) )
2811
2717
# Chech that diff is binlog format only
2812
my $diff_opts= dtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2718
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
2813
2719
if (scalar(@$diff_opts) eq 2)
2815
2721
$do_restart= 1;
2904
2810
delete $master->[0]->{'running_master_options'}; # Forget history
2906
2812
# Start shutdown of all started masters
2907
foreach my $drizzled (@{$master})
2813
foreach my $mysqld (@{$master})
2909
if ( $drizzled->{'pid'} )
2815
if ( $mysqld->{'pid'} )
2911
$pid= dtr_server_shutdown($drizzled);
2817
$pid= mtr_server_shutdown($mysqld);
2913
2819
$admin_pids{$pid}= 1;
2915
2821
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'},
2822
pid => $mysqld->{'pid'},
2823
real_pid => $mysqld->{'real_pid'},
2824
pidfile => $mysqld->{'path_pid'},
2825
sockfile => $mysqld->{'path_sock'},
2826
port => $mysqld->{'port'},
2827
errfile => $mysqld->{'path_myerr'},
2924
$drizzled->{'pid'}= 0; # Assume we are done with it
2830
$mysqld->{'pid'}= 0; # Assume we are done with it
2932
2838
delete $slave->[0]->{'running_slave_options'}; # Forget history
2934
2840
# Start shutdown of all started slaves
2935
foreach my $drizzled (@{$slave})
2841
foreach my $mysqld (@{$slave})
2937
if ( $drizzled->{'pid'} )
2843
if ( $mysqld->{'pid'} )
2939
$pid= dtr_server_shutdown($drizzled);
2845
$pid= mtr_server_shutdown($mysqld);
2941
2847
$admin_pids{$pid}= 1;
2943
2849
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'},
2850
pid => $mysqld->{'pid'},
2851
real_pid => $mysqld->{'real_pid'},
2852
pidfile => $mysqld->{'path_pid'},
2853
sockfile => $mysqld->{'path_sock'},
2854
port => $mysqld->{'port'},
2855
errfile => $mysqld->{'path_myerr'},
2952
$drizzled->{'pid'}= 0; # Assume we are done with it
2858
$mysqld->{'pid'}= 0; # Assume we are done with it
3049
2955
sub run_check_testcase ($$) {
3051
2957
my $mode= shift;
3052
my $drizzled= shift;
3054
my $name= "check-" . $drizzled->{'type'} . $drizzled->{'idx'};
2960
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");
2963
mtr_init_args(\$args);
2965
mtr_add_arg($args, "--no-defaults");
2966
mtr_add_arg($args, "--silent");
2967
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
2969
mtr_add_arg($args, "--port=%d", $mysqld->{'port'});
2970
mtr_add_arg($args, "--database=test");
2971
mtr_add_arg($args, "--user=%s", $opt_user);
2972
mtr_add_arg($args, "--password=");
2974
mtr_add_arg($args, "-R");
2975
mtr_add_arg($args, "$opt_vardir/tmp/$name.result");
3071
2977
if ( $mode eq "before" )
3073
dtr_add_arg($args, "--record");
2979
mtr_add_arg($args, "--record");
3076
2982
if ( $opt_testdir )
3078
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
2984
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3081
my $res = dtr_run_test($exe_drizzletest,$args,
2987
my $res = mtr_run_test($exe_drizzletest,$args,
3082
2988
"include/check-testcase.test", "", "", "");
3084
2990
if ( $res == 1 and $mode eq "after")
3086
dtr_run("diff",["-u",
2992
mtr_run("diff",["-u",
3087
2993
"$opt_vardir/tmp/$name.result",
3088
2994
"$opt_vardir/tmp/$name.reject"],
3089
2995
"", "", "", "");
3093
dtr_error("Could not execute 'check-testcase' $mode testcase");
2999
mtr_error("Could not execute 'check-testcase' $mode testcase");
3137
3043
my $exe= $exe_drizzletest;
3140
dtr_init_args(\$args);
3046
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);
3048
mtr_add_arg($args, "--no-defaults");
3049
mtr_add_arg($args, "--silent");
3050
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
3051
mtr_add_arg($args, "--logdir=%s/log", $opt_vardir);
3147
3053
# Log line number and time for each line in .test file
3148
dtr_add_arg($args, "--mark-progress")
3054
mtr_add_arg($args, "--mark-progress")
3149
3055
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=");
3058
mtr_add_arg($args, "--port=%d", $master->[0]->{'port'});
3059
mtr_add_arg($args, "--database=test");
3060
mtr_add_arg($args, "--user=%s", $opt_user);
3061
mtr_add_arg($args, "--password=");
3158
3064
if ( $opt_strace_client )
3160
3066
$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");
3067
mtr_add_arg($args, "-o");
3068
mtr_add_arg($args, "%s/log/drizzletest.strace", $opt_vardir);
3069
mtr_add_arg($args, "$exe_drizzletest");
3166
3072
if ( $opt_timer )
3168
dtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3074
mtr_add_arg($args, "--timer-file=%s/log/timer", $opt_vardir);
3171
3077
if ( $opt_compress )
3173
dtr_add_arg($args, "--compress");
3079
mtr_add_arg($args, "--compress");
3176
3082
if ( $opt_sleep )
3178
dtr_add_arg($args, "--sleep=%d", $opt_sleep);
3084
mtr_add_arg($args, "--sleep=%d", $opt_sleep);
3181
3087
if ( $opt_debug )
3183
dtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3089
mtr_add_arg($args, "--debug=d:t:A,%s/log/drizzletest.trace",
3184
3090
$path_vardir_trace);
3187
3093
if ( $opt_testdir )
3189
dtr_add_arg($args, "--testdir=%s", $opt_testdir);
3095
mtr_add_arg($args, "--testdir=%s", $opt_testdir);
3206
3112
# We do this here, since we do not want to Valgrind the nested invocations
3207
3113
# of drizzletest; that would mess up the stderr output causing test failure.
3208
3114
my @args_saved = @$args;
3209
dtr_init_args(\$args);
3115
mtr_init_args(\$args);
3210
3116
valgrind_arguments($args, \$exe);
3211
dtr_add_arg($args, "%s", $_) for @args_saved;
3117
mtr_add_arg($args, "%s", $_) for @args_saved;
3214
dtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3120
mtr_add_arg($args, "--test-file=%s", $tinfo->{'path'});
3216
3122
# Number of lines of resut to include in failure report
3217
dtr_add_arg($args, "--tail-lines=20");
3123
mtr_add_arg($args, "--tail-lines=20");
3219
3125
if ( defined $tinfo->{'result_file'} ) {
3220
dtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3126
mtr_add_arg($args, "--result-file=%s", $tinfo->{'result_file'});
3223
3129
if ( $opt_record )
3225
dtr_add_arg($args, "--record");
3131
mtr_add_arg($args, "--record");
3228
3134
if ( $opt_client_gdb )
3241
3147
if ( $opt_check_testcases )
3243
foreach my $drizzled (@{$master}, @{$slave})
3149
foreach my $mysqld (@{$master}, @{$slave})
3245
if ($drizzled->{'pid'})
3151
if ($mysqld->{'pid'})
3247
run_check_testcase("before", $drizzled);
3153
run_check_testcase("before", $mysqld);
3252
my $res = dtr_run_test($exe,$args,"","",$path_timefile,"");
3158
my $res = mtr_run_test($exe,$args,"","",$path_timefile,"");
3254
3160
if ( $opt_check_testcases )
3256
foreach my $drizzled (@{$master}, @{$slave})
3162
foreach my $mysqld (@{$master}, @{$slave})
3258
if ($drizzled->{'pid'})
3164
if ($mysqld->{'pid'})
3260
if (run_check_testcase("after", $drizzled))
3166
if (run_check_testcase("after", $mysqld))
3262
3168
# Check failed, mark the test case with that info
3263
3169
$tinfo->{'check_testcase_failed'}= 1;
3274
# Modify the exe and args so that program is run in gdb in xterm
3281
# Write $args to gdb init file
3282
my $str= join(" ", @$$args);
3283
my $dbx_init_file= "$opt_tmpdir/dbxinit.$type";
3285
# Remove the old gdbinit file
3286
unlink($dbx_init_file);
3287
if ( $type eq "client" )
3289
# write init file for client
3290
dtr_tofile($dbx_init_file,
3296
# write init file for drizzled
3297
dtr_tofile($dbx_init_file,
3298
"stop in __1cIdrizzledLmysql_parse6Fpn0AHSession_pkcI_v_\n" .
3304
if ( $opt_manual_dbx )
3306
print "\nTo start dbx for $type, type in another window:\n";
3307
print "dbx -c 'source $dbx_init_file' $$exe\n";
3309
# Indicate the exe should not be started
3315
dtr_add_arg($$args, "-title");
3316
dtr_add_arg($$args, "$type");
3317
dtr_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");
3328
3181
# Modify the exe and args so that program is run in gdb in xterm
3388
dtr_add_arg($$args, "-title");
3389
dtr_add_arg($$args, "$type");
3390
dtr_add_arg($$args, "-e");
3225
mtr_add_arg($$args, "-title");
3226
mtr_add_arg($$args, "$type");
3227
mtr_add_arg($$args, "-e");
3392
3229
if ( $exe_libtool )
3394
dtr_add_arg($$args, $exe_libtool);
3395
dtr_add_arg($$args, "--mode=execute");
3231
mtr_add_arg($$args, $exe_libtool);
3232
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");
3235
mtr_add_arg($$args, "gdb");
3236
mtr_add_arg($$args, "-x");
3237
mtr_add_arg($$args, "$gdb_init_file");
3238
mtr_add_arg($$args, "$$exe");
3403
3240
$$exe= "xterm";
3514
3351
if ( $opt_callgrind)
3516
dtr_add_arg($args, "--tool=callgrind");
3520
dtr_add_arg($args, "--tool=massif");
3353
mtr_add_arg($args, "--tool=callgrind");
3354
mtr_add_arg($args, "--base=$opt_vardir/log");
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";
3358
mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option
3359
mtr_add_arg($args, "--alignment=8");
3360
mtr_add_arg($args, "--leak-check=yes");
3361
mtr_add_arg($args, "--num-callers=16");
3362
mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir)
3363
if -f "$glob_mysql_test_dir/valgrind.supp";
3531
3366
# Add valgrind options, can be overriden by user
3532
dtr_add_arg($args, '%s', $_) for (@valgrind_args);
3367
mtr_add_arg($args, '%s', $_) for (@valgrind_args);
3534
dtr_add_arg($args, $$exe);
3369
mtr_add_arg($args, $$exe);
3536
3371
$$exe= $opt_valgrind_path || "valgrind";
3676
3511
client-ddd Start drizzletest client in ddd
3677
3512
client-debugger=NAME Start drizzletest in the selected debugger
3678
3513
client-gdb Start drizzletest client in gdb
3679
ddd Start drizzled in ddd
3514
ddd Start mysqld in ddd
3680
3515
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
3516
debugger=NAME Start mysqld in the selected debugger
3517
gdb Start the mysqld(s) in gdb
3518
manual-debug Let user manually start mysqld in debugger, before
3684
3519
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
3520
manual-gdb Let user manually start mysqld in gdb, before running
3522
manual-ddd Let user manually start mysqld in ddd, before running
3524
master-binary=PATH Specify the master "mysqld" to use
3525
slave-binary=PATH Specify the slave "mysqld" to use
3691
3526
strace-client Create strace output for drizzletest client
3692
3527
max-save-core Limit the number of core files saved (to avoid filling
3693
3528
up disks for heavily crashing server). Defaults to