475
464
# Control what test suites or cases to run
476
465
'force' => \$opt_force,
466
'skip-master-binlog' => \$opt_skip_master_binlog,
467
'skip-slave-binlog' => \$opt_skip_slave_binlog,
477
468
'do-test=s' => \$opt_do_test,
478
469
'start-from=s' => \$opt_start_from,
479
470
'suite|suites=s' => \$opt_suites,
480
471
'skip-rpl' => \$opt_skip_rpl,
481
472
'skip-test=s' => \$opt_skip_test,
473
'big-test' => \$opt_big_test,
482
474
'combination=s' => \@opt_combinations,
483
475
'skip-combination' => \$opt_skip_combination,
486
478
'master_port=i' => \$opt_master_myport,
487
479
'slave_port=i' => \$opt_slave_myport,
488
'memc_port=i' => \$opt_memc_myport,
489
480
'mtr-build-thread=i' => \$opt_mtr_build_thread,
491
482
# Test case authoring
605
581
$opt_mtr_build_thread= $ENV{'MTR_BUILD_THREAD'};
584
# We require that we are in the "mysql-test" directory
585
# to run drizzle-test-run
586
if (! -f $glob_scriptname)
588
mtr_error("Can't find the location for the drizzle-test-run script\n" .
589
"Go to to the mysql-test directory and execute the script " .
590
"as follows:\n./$glob_scriptname");
608
593
if ( -d "../drizzled" )
613
598
# Find the absolute path to the test directory
614
if ( ! $opt_testdir )
616
$glob_mysql_test_dir= cwd();
620
$glob_mysql_test_dir= $opt_testdir;
599
$glob_mysql_test_dir= cwd();
622
600
$default_vardir= "$glob_mysql_test_dir/var";
624
if ( ! $opt_suitepath )
626
$glob_suite_path= "$glob_mysql_test_dir/../plugin";
630
$glob_suite_path= $opt_suitepath;
632
602
# In most cases, the base directory we find everything relative to,
633
603
# is the parent directory of the "mysql-test" directory. For source
634
604
# distributions, TAR binary distributions and some other packages.
776
751
$opt_vardir= $default_vardir;
753
elsif ( $mysql_version_id < 50000 and
754
$opt_vardir ne $default_vardir)
756
# Version 4.1 and --vardir was specified
757
# Only supported as a symlink from var/
758
# by setting up $opt_mem that symlink will be created
760
# Only platforms that have native symlinks can use the vardir trick
761
$opt_mem= $opt_vardir;
762
mtr_report("Using 4.1 vardir trick");
765
$opt_vardir= $default_vardir;
779
768
$path_vardir_trace= $opt_vardir;
780
769
# Chop off any "c:", DBUG likes a unix path ex: c:/src/... => /src/...
781
770
$path_vardir_trace=~ s/^\w://;
783
$opt_vardir= collapse_path($opt_vardir);
772
# We make the path absolute, as the server will do a chdir() before usage
773
unless ( $opt_vardir =~ m,^/,)
775
# Make absolute path, relative test dir
776
$opt_vardir= "$glob_mysql_test_dir/$opt_vardir";
785
779
# --------------------------------------------------------------------------
930
path_myddir => "$opt_vardir/master-data",
931
path_myerr => "$opt_vardir/log/master.err",
932
path_pid => "$opt_vardir/run/master.pid",
933
path_sock => "$sockdir/master.sock",
934
port => $opt_master_myport,
935
secondary_port => $opt_master_myport + $secondary_port_offset,
936
start_timeout => 400, # enough time create innodb tables
937
cluster => 0, # index in clusters list
925
path_myddir => "$opt_vardir/master-data",
926
path_myerr => "$opt_vardir/log/master.err",
927
path_pid => "$opt_vardir/run/master.pid",
928
path_sock => "$sockdir/master.sock",
929
port => $opt_master_myport,
930
start_timeout => 400, # enough time create innodb tables
931
cluster => 0, # index in clusters list
946
path_myddir => "$opt_vardir/master1-data",
947
path_myerr => "$opt_vardir/log/master1.err",
948
path_pid => "$opt_vardir/run/master1.pid",
949
path_sock => "$sockdir/master1.sock",
950
port => $opt_master_myport + 1,
951
secondary_port => $opt_master_myport + 1 + $secondary_port_offset,
952
start_timeout => 400, # enough time create innodb tables
953
cluster => 0, # index in clusters list
940
path_myddir => "$opt_vardir/master1-data",
941
path_myerr => "$opt_vardir/log/master1.err",
942
path_pid => "$opt_vardir/run/master1.pid",
943
path_sock => "$sockdir/master1.sock",
944
port => $opt_master_myport + 1,
945
start_timeout => 400, # enough time create innodb tables
946
cluster => 0, # index in clusters list
962
path_myddir => "$opt_vardir/slave-data",
963
path_myerr => "$opt_vardir/log/slave.err",
964
path_pid => "$opt_vardir/run/slave.pid",
965
path_sock => "$sockdir/slave.sock",
966
port => $opt_slave_myport,
967
secondary_port => $opt_slave_myport + $secondary_port_offset,
968
start_timeout => 400,
969
cluster => 1, # index in clusters list
955
path_myddir => "$opt_vardir/slave-data",
956
path_myerr => "$opt_vardir/log/slave.err",
957
path_pid => "$opt_vardir/run/slave.pid",
958
path_sock => "$sockdir/slave.sock",
959
port => $opt_slave_myport,
960
start_timeout => 400,
962
cluster => 1, # index in clusters list
978
path_myddir => "$opt_vardir/slave1-data",
979
path_myerr => "$opt_vardir/log/slave1.err",
980
path_pid => "$opt_vardir/run/slave1.pid",
981
path_sock => "$sockdir/slave1.sock",
982
port => $opt_slave_myport + 1,
983
secondary_port => $opt_slave_myport + 1 + $secondary_port_offset,
984
start_timeout => 300,
985
cluster => -1, # index in clusters list
971
path_myddir => "$opt_vardir/slave1-data",
972
path_myerr => "$opt_vardir/log/slave1.err",
973
path_pid => "$opt_vardir/run/slave1.pid",
974
path_sock => "$sockdir/slave1.sock",
975
port => $opt_slave_myport + 1,
976
start_timeout => 300,
977
cluster => -1, # index in clusters list
994
path_myddir => "$opt_vardir/slave2-data",
995
path_myerr => "$opt_vardir/log/slave2.err",
996
path_pid => "$opt_vardir/run/slave2.pid",
997
path_sock => "$sockdir/slave2.sock",
998
port => $opt_slave_myport + 2,
999
secondary_port => $opt_slave_myport + 2 + $secondary_port_offset,
1000
start_timeout => 300,
1001
cluster => -1, # index in clusters list
986
path_myddir => "$opt_vardir/slave2-data",
987
path_myerr => "$opt_vardir/log/slave2.err",
988
path_pid => "$opt_vardir/run/slave2.pid",
989
path_sock => "$sockdir/slave2.sock",
990
port => $opt_slave_myport + 2,
991
start_timeout => 300,
992
cluster => -1, # index in clusters list
1261
1224
$exe_my_print_defaults=
1262
1225
mtr_exe_exists(
1263
1226
"$path_client_bindir/my_print_defaults",
1264
"$glob_basedir/extra/my_print_defaults",
1265
"$glob_builddir/extra/my_print_defaults");
1227
"$glob_basedir/extra/my_print_defaults");
1267
1229
# Look for perror
1268
1230
$exe_perror= "perror";
1270
1232
# Look for the client binaries
1233
$exe_drizzlecheck= mtr_exe_exists("$path_client_bindir/drizzlecheck");
1271
1234
$exe_drizzledump= mtr_exe_exists("$path_client_bindir/drizzledump");
1272
1235
$exe_drizzleimport= mtr_exe_exists("$path_client_bindir/drizzleimport");
1236
$exe_drizzlebinlog= mtr_exe_exists("$path_client_bindir/drizzlebinlog");
1237
$exe_drizzleadmin= mtr_exe_exists("$path_client_bindir/drizzleadmin");
1273
1238
$exe_drizzle= mtr_exe_exists("$path_client_bindir/drizzle");
1275
1240
if (!$opt_extern)
1277
1242
# Look for SQL scripts directory
1278
if ( $drizzle_version_id >= 50100 )
1243
if ( $mysql_version_id >= 50100 )
1280
1245
$exe_drizzleslap= mtr_exe_exists("$path_client_bindir/drizzleslap");
1284
# Look for schema_writer
1286
$exe_schemawriter= mtr_exe_exists("$glob_basedir/drizzled/message/schema_writer",
1287
"$glob_builddir/drizzled/message/schema_writer");
1290
1249
# Look for drizzletest executable
1292
1251
$exe_drizzletest= mtr_exe_exists("$path_client_bindir/drizzletest");
1457
1413
$ENV{'SLAVE_MYPORT'}= $slave->[0]->{'port'};
1458
1414
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
1459
1415
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
1460
$ENV{'MC_PORT'}= $opt_memc_myport;
1461
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'drizzle-protocol-port'};
1416
$ENV{'DRIZZLE_TCP_PORT'}= $mysqld_variables{'port'};
1463
$ENV{'MTR_BUILD_THREAD'}= $opt_mtr_build_thread;
1418
$ENV{MTR_BUILD_THREAD}= $opt_mtr_build_thread;
1465
1420
$ENV{'EXE_MYSQL'}= $exe_drizzle;
1422
# ----------------------------------------------------
1423
# Setup env so childs can execute mysqlcheck
1424
# ----------------------------------------------------
1425
my $cmdline_mysqlcheck=
1426
mtr_native_path($exe_drizzlecheck) .
1427
" --no-defaults --debug-check -uroot " .
1428
"--port=$master->[0]->{'port'} ";
1432
$cmdline_mysqlcheck .=
1433
" --debug=d:t:A,$path_vardir_trace/log/mysqlcheck.trace";
1435
$ENV{'DRIZZLE_CHECK'}= $cmdline_mysqlcheck;
1468
1437
# ----------------------------------------------------
1469
1438
# Setup env to childs can execute myqldump
1470
1439
# ----------------------------------------------------
1471
1440
my $cmdline_mysqldump= generate_cmdline_mysqldump($master->[0]);
1472
1441
my $cmdline_mysqldumpslave= generate_cmdline_mysqldump($slave->[0]);
1473
my $cmdline_mysqldump_secondary= mtr_native_path($exe_drizzledump) .
1474
" --no-defaults -uroot " .
1475
" --port=$master->[0]->{'secondary_port'} ";
1477
1443
if ( $opt_debug )
1533
1489
# ----------------------------------------------------
1490
# Setup env so childs can execute mysqlbinlog
1491
# ----------------------------------------------------
1492
my $cmdline_mysqlbinlog=
1493
mtr_native_path($exe_drizzlebinlog) .
1494
" --no-defaults --disable-force-if-open --debug-check";
1498
$cmdline_mysqlbinlog .=
1499
" --debug=d:t:A,$path_vardir_trace/log/mysqlbinlog.trace";
1501
$ENV{'DRIZZLE_BINLOG'}= $cmdline_mysqlbinlog;
1503
# ----------------------------------------------------
1534
1504
# Setup env so childs can execute mysql
1535
1505
# ----------------------------------------------------
1536
1506
my $cmdline_mysql=
1537
1507
mtr_native_path($exe_drizzle) .
1538
" --no-defaults --host=localhost --user=root --password= " .
1508
" --no-defaults --debug-check --host=localhost --user=root --password= " .
1539
1509
"--port=$master->[0]->{'port'} ";
1540
my $cmdline_drizzle_secondary=
1541
mtr_native_path($exe_drizzle) .
1542
" --no-defaults --host=localhost --user=root --password= " .
1543
" --port=$master->[0]->{'secondary_port'} ";
1545
1511
$ENV{'MYSQL'}= $cmdline_mysql;
1546
$ENV{'DRIZZLE_SECONDARY'}= $cmdline_drizzle_secondary;
1548
1513
# ----------------------------------------------------
1549
1514
# Setup env so childs can execute bug25714
2122
2078
unlink("$base_file.log");
2123
2079
unlink("$base_file.warnings");
2083
if (defined $tinfo->{binlog_format} and $mysql_version_id > 50100 )
2085
# Dynamically switch binlog format of
2086
# master, slave is always restarted
2087
foreach my $server ( @$master )
2089
next unless ($server->{'pid'});
2091
mtr_init_args(\$args);
2092
mtr_add_arg($args, "--no-defaults");
2093
mtr_add_arg($args, "--user=root");
2094
mtr_add_arg($args, "--port=$server->{'port'}");
2096
my $sql= "include/set_binlog_format_".$tinfo->{binlog_format}.".sql";
2097
mtr_verbose("Setting binlog format:", $tinfo->{binlog_format});
2098
if (mtr_run($exe_drizzle, $args, $sql, "", "", "") != 0)
2100
mtr_error("Failed to switch binlog format");
2127
2107
sub do_after_run_drizzletest($)
2495
2475
mtr_add_arg($args, "%s--no-defaults", $prefix);
2497
$path_my_basedir= collapse_path($path_my_basedir);
2498
2477
mtr_add_arg($args, "%s--basedir=%s", $prefix, $path_my_basedir);
2502
mtr_add_arg($args, "%s--default-storage-engine=%s", $prefix, $opt_engine);
2505
if ( $drizzle_version_id >= 50036)
2479
if ( $mysql_version_id >= 50036)
2507
2481
# By default, prevent the started mysqld to access files outside of vardir
2508
2482
mtr_add_arg($args, "%s--secure-file-priv=%s", $prefix, $opt_vardir);
2485
if ( $mysql_version_id >= 50000 )
2487
mtr_add_arg($args, "%s--log-bin-trust-function-creators", $prefix);
2490
mtr_add_arg($args, "%s--default-character-set=utf8", $prefix);
2511
2491
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
2513
2493
# Increase default connect_timeout to avoid intermittent
2514
2494
# disconnects when test servers are put under load
2515
2495
# see BUG#28359
2516
mtr_add_arg($args, "%s--mysql-protocol-connect-timeout=60", $prefix);
2496
mtr_add_arg($args, "%s--connect-timeout=60", $prefix);
2519
2499
# When mysqld is run by a root user(euid is 0), it will fail
2526
2506
mtr_add_arg($args, "%s--pid-file=%s", $prefix,
2527
2507
$mysqld->{'path_pid'});
2529
mtr_add_arg($args, "%s--mysql-protocol-port=%d", $prefix,
2532
mtr_add_arg($args, "%s--drizzle-protocol-port=%d", $prefix,
2533
$mysqld->{'secondary_port'});
2509
mtr_add_arg($args, "%s--port=%d", $prefix,
2535
2512
mtr_add_arg($args, "%s--datadir=%s", $prefix,
2536
2513
$mysqld->{'path_myddir'});
2515
my $log_base_path= "$opt_vardir/log/$mysqld->{'type'}$sidx";
2516
mtr_add_arg($args, "%s--log=%s.log", $prefix, $log_base_path);
2518
"%s--log-slow-queries=%s-slow.log", $prefix, $log_base_path);
2538
2520
# Check if "extra_opt" contains --skip-log-bin
2521
my $skip_binlog= grep(/^--skip-log-bin/, @$extra_opt, @opt_extra_mysqld_opt);
2539
2522
if ( $mysqld->{'type'} eq 'master' )
2524
if (! ($opt_skip_master_binlog || $skip_binlog) )
2526
mtr_add_arg($args, "%s--log-bin=%s/log/master-bin%s", $prefix,
2527
$opt_vardir, $sidx);
2541
2530
mtr_add_arg($args, "%s--server-id=%d", $prefix,
2542
2531
$idx > 0 ? $idx + 101 : 1);
2544
2533
mtr_add_arg($args, "%s--loose-innodb_data_file_path=ibdata1:10M:autoextend",
2547
mtr_add_arg($args, "%s--loose-innodb-lock-wait-timeout=5", $prefix);
2536
mtr_add_arg($args, "%s--local-infile", $prefix);
2538
if ( $idx > 0 or !$use_innodb)
2540
mtr_add_arg($args, "%s--loose-skip-innodb", $prefix);
2552
2545
mtr_error("unknown mysqld type")
2553
2546
unless $mysqld->{'type'} eq 'slave';
2548
#mtr_add_arg($args, "%s--init-rpl-role=slave", $prefix);
2549
if (! ( $opt_skip_slave_binlog || $skip_binlog ))
2551
mtr_add_arg($args, "%s--log-bin=%s/log/slave%s-bin", $prefix,
2552
$opt_vardir, $sidx); # FIXME use own dir for binlogs
2553
mtr_add_arg($args, "%s--log-slave-updates", $prefix);
2556
mtr_add_arg($args, "%s--master-retry-count=10", $prefix);
2558
mtr_add_arg($args, "%s--relay-log=%s/log/slave%s-relay-bin", $prefix,
2559
$opt_vardir, $sidx);
2560
mtr_add_arg($args, "%s--report-host=127.0.0.1", $prefix);
2561
mtr_add_arg($args, "%s--report-port=%d", $prefix,
2563
# mtr_add_arg($args, "%s--report-user=root", $prefix);
2564
mtr_add_arg($args, "%s--loose-skip-innodb", $prefix);
2565
mtr_add_arg($args, "%s--skip-slave-start", $prefix);
2555
2567
# Directory where slaves find the dumps generated by "load data"
2556
2568
# on the server. The path need to have constant length otherwise
2557
2569
# test results will vary, thus a relative path is used.
2558
2570
my $slave_load_path= "../tmp";
2571
mtr_add_arg($args, "%s--slave-load-tmpdir=%s", $prefix,
2573
mtr_add_arg($args, "%s--set-variable=slave_net_timeout=120", $prefix);
2560
2575
if ( @$slave_master_info )
2895
2921
if ( $mysqld->{'pid'} )
2897
$pid= mtr_server_shutdown($mysqld);
2899
$admin_pids{$pid}= 1;
2902
pid => $mysqld->{'pid'},
2903
real_pid => $mysqld->{'real_pid'},
2904
pidfile => $mysqld->{'path_pid'},
2905
sockfile => $mysqld->{'path_sock'},
2906
port => $mysqld->{'port'},
2907
errfile => $mysqld->{'path_myerr'},
2910
$mysqld->{'pid'}= 0; # Assume we are done with it
2923
$pid= mtr_mysqladmin_start($mysqld, "shutdown", 20);
2925
$admin_pids{$pid}= 1;
2928
pid => $mysqld->{'pid'},
2929
real_pid => $mysqld->{'real_pid'},
2930
pidfile => $mysqld->{'path_pid'},
2931
sockfile => $mysqld->{'path_sock'},
2932
port => $mysqld->{'port'},
2933
errfile => $mysqld->{'path_myerr'},
2936
$mysqld->{'pid'}= 0; # Assume we are done with it
2923
2949
if ( $mysqld->{'pid'} )
2925
$pid= mtr_server_shutdown($mysqld);
2927
$admin_pids{$pid}= 1;
2930
pid => $mysqld->{'pid'},
2931
real_pid => $mysqld->{'real_pid'},
2932
pidfile => $mysqld->{'path_pid'},
2933
sockfile => $mysqld->{'path_sock'},
2934
port => $mysqld->{'port'},
2935
errfile => $mysqld->{'path_myerr'},
2938
$mysqld->{'pid'}= 0; # Assume we are done with it
2951
$pid= mtr_mysqladmin_start($mysqld, "shutdown", 20);
2953
$admin_pids{$pid}= 1;
2956
pid => $mysqld->{'pid'},
2957
real_pid => $mysqld->{'real_pid'},
2958
pidfile => $mysqld->{'path_pid'},
2959
sockfile => $mysqld->{'path_sock'},
2960
port => $mysqld->{'port'},
2961
errfile => $mysqld->{'path_myerr'},
2965
$mysqld->{'pid'}= 0; # Assume we are done with it
3260
# Modify the exe and args so that program is run in gdb in xterm
3267
# Write $args to gdb init file
3268
my $str= join(" ", @$$args);
3269
my $dbx_init_file= "$opt_tmpdir/dbxinit.$type";
3271
# Remove the old gdbinit file
3272
unlink($dbx_init_file);
3273
if ( $type eq "client" )
3275
# write init file for client
3276
mtr_tofile($dbx_init_file,
3282
# write init file for drizzled
3283
mtr_tofile($dbx_init_file,
3284
"stop in __1cIdrizzledLmysql_parse6Fpn0AHSession_pkcI_v_\n" .
3290
if ( $opt_manual_dbx )
3292
print "\nTo start dbx for $type, type in another window:\n";
3293
print "dbx -c 'source $dbx_init_file' $$exe\n";
3295
# Indicate the exe should not be started
3301
mtr_add_arg($$args, "-title");
3302
mtr_add_arg($$args, "$type");
3303
mtr_add_arg($$args, "-e");
3305
mtr_add_arg($$args, "dbx");
3306
mtr_add_arg($$args, "-c");
3307
mtr_add_arg($$args, "source $dbx_init_file");
3308
mtr_add_arg($$args, "$$exe");
3314
3277
# Modify the exe and args so that program is run in gdb in xterm
3537
sub collapse_path ($) {
3539
my $c_path= rel2abs(shift);
3540
my $updir = updir($c_path);
3541
my $curdir = curdir($c_path);
3543
my($vol, $dirs, $file) = splitpath($c_path);
3544
my @dirs = splitdir($dirs);
3547
foreach my $dir (@dirs) {
3548
if( $dir eq $updir and # if we have an updir
3549
@collapsed and # and something to collapse
3550
length $collapsed[-1] and # and its not the rootdir
3551
$collapsed[-1] ne $updir and # nor another updir
3552
$collapsed[-1] ne $curdir # nor the curdir
3555
pop @collapsed; # collapse
3558
push @collapsed, $dir; # just hang onto it
3562
return catpath($vol, catdir(@collapsed), $file);
3565
3498
##############################################################################