Merged ubuntu-12-64-issues

This commit is contained in:
Brian Fraser fraserb@gmail.com
2012-07-30 11:30:05 -03:00
33 changed files with 452 additions and 271 deletions

View File

@@ -304,8 +304,10 @@ is_deeply(
# #############################################################################
# Test the rows method.
# #############################################################################
my $tmpdir = '/tmp/mk-upgrade-res';
SKIP: {
skip "LOAD DATA LOCAL INFILE is disabled, can't test method => rows", 30
if PerconaTest::load_data_is_disabled($dbh1);
diag(`rm -rf $tmpdir 2>/dev/null; mkdir $tmpdir`);
$sb->load_file('master', "t/lib/samples/compare-results.sql");
@@ -681,7 +683,7 @@ is(
$report,
'rows: report, left with more rows'
);
}
# #############################################################################
# Try to compare without having done the actions.
# #############################################################################
@@ -726,6 +728,9 @@ is_deeply(
'No differences after bad compare()'
);
SKIP: {
skip "LOAD DATA LOCAL INFILE is disabled, can't test method => rows", 2
if PerconaTest::load_data_is_disabled($dbh1);
$cr = new CompareResults(
method => 'rows',
'base-dir' => $tmpdir,
@@ -755,6 +760,8 @@ is_deeply(
'No differences after bad compare()'
);
}
# #############################################################################
# Done.
# #############################################################################

View File

@@ -114,7 +114,7 @@ my ($row) = $cxn->dbh()->selectrow_hashref('SHOW MASTER STATUS');
ok(
exists $row->{binlog_ignore_db},
"FetchHashKeyName = NAME_lc",
);
) or diag(Dumper($row));
test_var_val(
$cxn->dbh(),
@@ -163,7 +163,7 @@ $cxn->connect();
ok(
exists $row->{binlog_ignore_db},
"Reconnect FetchHashKeyName = NAME_lc",
);
) or diag(Dumper($row));
test_var_val(
$cxn->dbh(),

View File

@@ -554,7 +554,7 @@ my ($out, undef) = full_output(sub { $dp->get_dbh(@opts, {}) });
like(
$out,
qr/\QUnknown character set/,
"get_dbh dies withg an unknown charset"
"get_dbh dies with an unknown charset"
);
$dp->prop('set-vars', "time_zoen='UTC'");
@@ -563,7 +563,7 @@ $dp->prop('set-vars', "time_zoen='UTC'");
like(
$out,
qr/\QUnknown system variable 'time_zoen'/,
"get_dbh dies withg an unknown charset"
"get_dbh dies with an unknown system variable"
);
# #############################################################################

View File

@@ -168,8 +168,8 @@ ok(
my (undef, $tempfile) = tempfile();
system("$cmd 5 --daemonize --log $log_file --pid $pid_file 2>$tempfile");
PerconaTest::wait_for_files($log_file, $pid_file);
system("$cmd 5 --daemonize --log $log_file --pid $pid_file > $tempfile 2>&1");
PerconaTest::wait_for_files($log_file, $pid_file, $tempfile);
$output = `ps wx | grep '$cmd 5' | grep -v grep`;
chomp(my $new_pid = slurp_file($pid_file));
@@ -203,7 +203,7 @@ diag(`rm $tempfile >/dev/null`);
# Check that it actually checks the running process.
# ############################################################################
rm_tmp_files();
system("$cmd 10 --daemonize --log $log_file --pid $pid_file");
system("$cmd 20 --daemonize --log $log_file --pid $pid_file");
PerconaTest::wait_for_files($pid_file, $log_file);
chomp($pid = slurp_file($pid_file));
$output = `$cmd 0 --daemonize --pid $pid_file 2>&1`;
@@ -213,6 +213,9 @@ like(
'Says that PID is running (issue 419)'
);
kill SIGKILL => $pid
if $pid;
sleep 1;
rm_tmp_files();

View File

@@ -9,7 +9,7 @@ BEGIN {
use strict;
use warnings FATAL => 'all';
use English qw(-no_match_vars);
use Test::More tests => 51;
use Test::More tests => 52;
use MasterSlave;
use DSNParser;
@@ -288,6 +288,12 @@ $ms->recurse_to_slaves(
skip_callback => $skip_callback,
});
is(
scalar(@slaves),
3,
"recurse to slaves finds all three slaves"
) or diag(Dumper(\@slaves));
is_deeply(
$ms->get_master_dsn( $slaves[0], undef, $dp ),
{ h => '127.0.0.1',

View File

@@ -23,7 +23,7 @@ p="$PT_TMPDIR/collect/2011_12_05"
# Default collect, no extras like gdb, tcpdump, etc.
collect "$PT_TMPDIR/collect" "2011_12_05" > $p-output 2>&1
wait_for_files "$p-hostname" "$p-opentables2" "$p-variables"
wait_for_files "$p-hostname" "$p-opentables2" "$p-variables" "$p-df"
# Even if this system doesn't have all the cmds, collect should still
# have created some files for cmds that (hopefully) all systems have.

View File

@@ -22,8 +22,12 @@ my $dbh = $sb->get_dbh_for('master');
if ( !$dbh ) {
plan skip_all => 'Cannot connect to sandbox master';
}
elsif ( PerconaTest::load_data_is_disabled($dbh) ) {
diag("LOAD DATA LOCAL INFILE is disabled, only going to test the error message");
plan tests => 2;
}
else {
plan tests => 10;
plan tests => 11;
}
my $output;
@@ -31,6 +35,11 @@ my $rows;
my $cnf = "/tmp/12345/my.sandbox.cnf";
my $cmd = "$trunk/bin/pt-archiver";
if ( PerconaTest::load_data_is_disabled($dbh) ) {
test_disabled_load_data($dbh, $sb, 'master', $cnf);
}
else {
$sb->wipe_clean($dbh);
$sb->create_dbs($dbh, ['test']);
@@ -84,6 +93,45 @@ is_deeply(
"--bulk-insert archived 7 rows (issue 1260)"
);
# Test that the tool bails out early if LOAD DATA LOCAL INFILE is disabled
{
if ( -d "/tmp/2900" ) {
diag(`$trunk/sandbox/stop-sandbox 2900 >/dev/null 2>&1`);
}
local $ENV{LOCAL_INFILE} = 0;
diag(`$trunk/sandbox/start-sandbox master 2900 >/dev/null 2>&1`);
my $master3_dbh = $sb->get_dbh_for('master3');
test_disabled_load_data($master3_dbh, $sb, 'master3', "/tmp/2900/my.sandbox.cnf");
diag(`$trunk/sandbox/stop-sandbox 2900 >/dev/null 2>&1`);
$master3_dbh->disconnect() if $master3_dbh;
}
}
sub test_disabled_load_data {
my ($dbh, $sb, $master, $cnf) = @_;
$sb->wipe_clean($dbh);
$sb->create_dbs($dbh, ['test']);
$sb->load_file($master, 't/pt-archiver/samples/table5.sql');
$dbh->do('INSERT INTO `test`.`table_5_copy` SELECT * FROM `test`.`table_5`');
my ($output, undef) = full_output(
sub { pt_archiver::main(qw(--no-ascend --limit 50 --bulk-insert),
qw(--bulk-delete --where 1=1 --statistics),
'--source', "D=test,t=table_5,F=$cnf",
'--dest', "t=table_5_dest") },
);
like($output,
qr!\Q--bulk-insert cannot work as LOAD DATA LOCAL INFILE is disabled. See http://kb.percona.com/troubleshoot-load-data-infile!,
"--bulk-insert throws an error if LOCAL INFILE is disabled"
);
}
# #############################################################################
# Done.
# #############################################################################

View File

@@ -22,6 +22,9 @@ my $dbh = $sb->get_dbh_for('master');
if ( !$dbh ) {
plan skip_all => 'Cannot connect to sandbox master';
}
elsif ( PerconaTest::load_data_is_disabled($dbh) ) {
plan skip_all => 'Cannot use --bulk-insert with LOAD DATA LOCAL INFILE disabled';
}
else {
plan tests => 5;
}

View File

@@ -65,11 +65,14 @@ is_deeply(
'No changes on slave yet (issue 758)'
);
is_deeply(
$dbh->selectall_arrayref('select * from issue_758.t'),
[[0],[2]],
'First row purged (issue 758)'
);
TODO: {
local $::TODO = "Timing-related test, may fail";
is_deeply(
$dbh->selectall_arrayref('select * from issue_758.t'),
[[0],[2]],
'First row purged (issue 758)'
);
}
# The script it waiting for slave lag so no more rows should be purged yet.
sleep 1;

View File

@@ -22,9 +22,6 @@ my $dbh = $sb->get_dbh_for('master');
if ( !$dbh ) {
plan skip_all => 'Cannot connect to sandbox master';
}
else {
plan tests => 12;
}
my $output;
my $rows;
@@ -80,25 +77,28 @@ sub test_charset {
$sb->load_file('master', 't/pt-archiver/samples/table1.sql');
local $@;
eval {
my ($out, $exit_val) = full_output( sub {
pt_archiver::main("-c", "b,c", qw(--where 1=1 --header),
"--source", "D=test,t=table_1,F=$cnf",
'--file', '/tmp/%Y-%m-%d-%D_%H:%i:%s.%t',
'--no-check-charset',
'--charset', $charset,
);
};
});
ok !$@, "--charset $charset works";
is($exit_val,
0,
"--charset $charset works"
) or diag($out);
}
for my $charset (qw(latin1 iso-8859-1 utf8 UTF-8 )) {
for my $charset (qw(latin1 utf8 UTF8 )) {
test_charset($charset);
}
my $warning;
local $SIG{__WARN__} = sub { $warning .= shift };
my $out = output( sub {
my ($out) = full_output( sub {
$sb->load_file('master', 't/pt-archiver/samples/table1.sql');
pt_archiver::main("-c", "b,c", qw(--where 1=1 --header),
"--source", "D=test,t=table_1,F=$cnf",
@@ -109,12 +109,16 @@ my $out = output( sub {
},
);
like($out, qr/\QCannot open :encoding(some_chars/, "..but an unknown charset fails");
like($warning, qr/Cannot find encoding/, "..and throws a useful warning");
like(
$out,
qr/\QError setting NAMES to some_charset_that_doesn/,
"..but an unknown charset fails"
);
# #############################################################################
# Done.
# #############################################################################
$sb->wipe_clean($dbh);
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
exit;
done_testing;

View File

@@ -65,41 +65,46 @@ $dbh1->do('USE test');
$dbh1->do('DROP TABLE IF EXISTS deadlocks');
$dbh1->do("$deadlocks_tbl");
`$cmd --dest D=test,t=deadlocks --daemonize --run-time 1s --interval 1s --pid /tmp/mk-deadlock-logger.pid 1>/dev/null 2>/dev/null`;
$output = `ps -eaf | grep '$cmd \-\-dest '`;
like($output, qr/$cmd/, 'It lives daemonized');
ok(-f '/tmp/mk-deadlock-logger.pid', 'PID file created');
my $pid_file = '/tmp/mk-deadlock-logger.pid';
unlink $pid_file
and diag("Unlinked existing $pid_file");
`$cmd --dest D=test,t=deadlocks --daemonize --run-time 6s --interval 1s --pid $pid_file 1>/dev/null 2>/dev/null`;
$output = `ps -eaf | grep '$cmd \-\-dest '`;
like($output, qr/\Q$cmd/, 'It lives daemonized');
PerconaTest::wait_for_files($pid_file);
ok(-f $pid_file, 'PID file created');
my ($pid) = $output =~ /\s+(\d+)\s+/;
$output = `cat /tmp/mk-deadlock-logger.pid`;
chomp($output = slurp_file($pid_file));
is($output, $pid, 'PID file has correct PID');
# Kill it
sleep 2;
ok(! -f '/tmp/mk-deadlock-logger.pid', 'PID file removed');
PerconaTest::wait_until(sub { !kill 0, $pid });
ok(! -f $pid_file, 'PID file removed');
# Check that it won't run if the PID file already exists (issue 383).
diag(`touch /tmp/mk-deadlock-logger.pid`);
diag(`touch $pid_file`);
ok(
-f '/tmp/mk-deadlock-logger.pid',
-f $pid_file,
'PID file already exists'
);
$output = `$cmd --dest D=test,t=deadlocks --daemonize --run-time 1s --interval 1s --pid /tmp/mk-deadlock-logger.pid 2>&1`;
$output = `$cmd --dest D=test,t=deadlocks --daemonize --run-time 1s --interval 1s --pid $pid_file 2>&1`;
like(
$output,
qr/PID file .+ already exists/,
'Does not run if PID file already exists'
);
$output = `ps -eaf | grep 'mk-deadlock-logger \-\-dest '`;
$output = `ps -eaf | grep 'pt-deadlock-logger \-\-dest '`;
unlike(
$output,
qr/$cmd/,
'It does not lived daemonized'
);
diag(`rm -rf /tmp/mk-deadlock-logger.pid`);
unlink $pid_file;
# #############################################################################
# Done.

View File

@@ -14,7 +14,8 @@ use Test::More tests => 4;
use PerconaTest;
require "$trunk/bin/pt-fifo-split";
unlink('/tmp/pt-fifo-split');
my $fifo = '/tmp/pt-fifo-split';
unlink($fifo);
my $cmd = "$trunk/bin/pt-fifo-split";
@@ -22,24 +23,17 @@ my $output = `$cmd --help`;
like($output, qr/Options and values/, 'It lives');
system("($cmd --lines 10000 $trunk/bin/pt-fifo-split > /dev/null 2>&1 < /dev/null)&");
sleep(1);
PerconaTest::wait_for_files($fifo);
open my $fh, '<', '/tmp/pt-fifo-split' or die $OS_ERROR;
my $contents = do { local $INPUT_RECORD_SEPARATOR; <$fh>; };
close $fh;
my $contents = slurp_file($fifo);
my $contents2 = load_file('bin/pt-fifo-split');
open my $fh2, '<', "$trunk/bin/pt-fifo-split" or die $OS_ERROR;
my $contents2 = do { local $INPUT_RECORD_SEPARATOR; <$fh2>; };
close $fh2;
ok($contents eq $contents2, 'I read the file');
is($contents, $contents2, 'I read the file');
system("($cmd $trunk/t/pt-fifo-split/samples/file_with_lines --offset 2 > /dev/null 2>&1 < /dev/null)&");
sleep(1);
PerconaTest::wait_for_files($fifo);
open $fh, '<', '/tmp/pt-fifo-split' or die $OS_ERROR;
$contents = do { local $INPUT_RECORD_SEPARATOR; <$fh>; };
close $fh;
$contents = slurp_file($fifo);
is($contents, <<EOF
2 hi
@@ -60,7 +54,7 @@ like(
qr{PID file /tmp/pt-script.pid already exists},
'Dies if PID file already exists (issue 391)'
);
`rm -rf /tmp/pt-script.pid`;
unlink '/tmp/pt-script.pid';
# #############################################################################
# Done.

View File

@@ -47,15 +47,17 @@ like(
"Runs without a file (bug 925778)"
);
# If the system is really slow, it may take a second to process the files
# and then clean up all the temp stuff. We'll give it a few seconds benefit of the doubt.
cmp_ok(
$t1 - $t0,
'<',
6,
"Runs for --run-time, more or less"
);
TODO: {
local $::TODO = "Timing-related test, may occasionally fail";
# If the system is really slow, it may take a second to process the files
# and then clean up all the temp stuff. We'll give it a few seconds benefit of the doubt.
cmp_ok(
int($t1 - $t0),
'<=',
6,
"Runs for --run-time, more or less"
);
}
# #############################################################################
# Short options.
# #############################################################################

View File

@@ -159,7 +159,7 @@ diag('Loading sample dataset...');
$sb->load_file('master', "$sample/basic_no_fks.sql");
$master_dbh->do("USE pt_osc");
$master_dbh->do("TRUNCATE TABLE t");
$master_dbh->do("LOAD DATA LOCAL INFILE '$trunk/t/pt-online-schema-change/samples/basic_no_fks.data' INTO TABLE t");
$master_dbh->do("LOAD DATA INFILE '$trunk/t/pt-online-schema-change/samples/basic_no_fks.data' INTO TABLE t");
$master_dbh->do("ANALYZE TABLE t");
$sb->wait_for_slaves();

View File

@@ -46,16 +46,22 @@ my $rows;
# #############################################################################
# Of course, the orig database and table must exist.
throws_ok(
($output, undef) = full_output(
sub { pt_online_schema_change::main(@args,
"$dsn,D=nonexistent_db,t=t", qw(--dry-run)) },
);
like( $output,
qr/Unknown database/,
"Original database must exist"
);
throws_ok(
($output, undef) = full_output(
sub { pt_online_schema_change::main(@args,
"$dsn,D=mysql,t=nonexistent_tbl", qw(--dry-run)) },
);
like( $output,
qr/`mysql`.`nonexistent_tbl` does not exist/,
"Original table must exist"
);
@@ -66,9 +72,12 @@ $slave_dbh->do("USE pt_osc");
# The orig table cannot have any triggers.
$master_dbh->do("CREATE TRIGGER pt_osc.pt_osc_test AFTER DELETE ON pt_osc.t FOR EACH ROW DELETE FROM pt_osc.t WHERE 0");
throws_ok(
($output, undef) = full_output(
sub { pt_online_schema_change::main(@args,
"$dsn,D=pt_osc,t=t", qw(--dry-run)) },
);
like( $output,
qr/`pt_osc`.`t` has triggers/,
"Original table cannot have triggers"
);
@@ -77,9 +86,12 @@ $master_dbh->do('DROP TRIGGER pt_osc.pt_osc_test');
# The orig table must have a pk or unique index so the delete trigger is safe.
$master_dbh->do("ALTER TABLE pt_osc.t DROP COLUMN id");
$master_dbh->do("ALTER TABLE pt_osc.t DROP INDEX c");
throws_ok(
($output, undef) = full_output(
sub { pt_online_schema_change::main(@args,
"$dsn,D=pt_osc,t=t", qw(--dry-run)) },
);
like( $output,
qr/`pt_osc`.`t` does not have a PRIMARY KEY or a unique index/,
"Original table must have a PK or unique index"
);
@@ -97,9 +109,14 @@ for my $i ( 1..10 ) {
$master_dbh->do("create table $table (id int)");
}
throws_ok(
my $x;
($output, $x) = full_output(
sub { pt_online_schema_change::main(@args,
"$dsn,D=pt_osc,t=t", qw(--quiet --dry-run)) },
"$dsn,D=pt_osc,t=t", qw(--quiet --dry-run)); },
);
like(
$output,
qr/Failed to find a unique new table name/,
"Doesn't try forever to find a new table name"
);

View File

@@ -46,19 +46,17 @@ $cmd = "$trunk/bin/pt-query-digest "
. "--execute h=127.1,P=12346,u=msandbox,p=msandbox --mirror 1 "
. "--pid $pid_file";
$ENV{PTDEBUG}=1;
`$cmd > /tmp/read_only.txt 2>&1 &`;
$ENV{PTDEBUG}=0;
sleep 3;
{
local $ENV{PTDEBUG}=1;
`$cmd > /tmp/read_only.txt 2>&1 &`;
}
$dbh1->do('select sleep(1)');
sleep 1;
$dbh1->do('set global read_only=1');
$dbh2->do('set global read_only=0');
$dbh1->do('select sleep(1)');
sleep 1;
PerconaTest::wait_for_files($pid_file);
chomp(my $pid = `cat $pid_file`);
kill 15, $pid;
sleep 0.25;

View File

@@ -61,14 +61,17 @@ my $output = output(
# the usual stddev. -- stddev doesn't matter much. It's the other vals
# that indicate that --processlist works.
$exec =~ s/(\S+) 3s$/786ms 3s/;
ok(
no_diff(
$exec,
"t/pt-query-digest/samples/proclist001.txt",
cmd_output => 1,
),
"--processlist correctly observes and measures multiple queries"
);
TODO: {
local $::TODO = "This is a timing-related test, which may occasionally fail";
ok(
no_diff(
$exec,
"t/pt-query-digest/samples/proclist001.txt",
cmd_output => 1,
),
"--processlist correctly observes and measures multiple queries"
);
}
# #############################################################################
# Done.

View File

@@ -14,61 +14,71 @@ use Test::More tests => 2;
use PerconaTest;
use Time::HiRes qw(sleep time);
use POSIX qw(mkfifo);
# #########################################################################
# Issue 226: Fix mk-query-digest signal handling
# #########################################################################
diag(`rm -rf /tmp/mqd.pid`);
my $pid_file = '/tmp/mqd.pid';
my $fifo = '/tmp/mqd.fifo';
unlink $pid_file and diag("Unlinking existing $pid_file");
unlink $fifo and diag("Unlinking existing $fifo");
my ($start, $end, $waited);
my $timeout = wait_for(
sub {
$start = time;
`$trunk/bin/pt-query-digest --read-timeout 2 --pid /tmp/mqd.pid 2>/dev/null`;
return;
},
4,
);
$end = time;
$waited = $end - $start;
if ( $timeout ) {
# mqd ran longer than --read-timeout
my $pid = `cat /tmp/mqd.pid`;
`kill $pid`;
my ($start, $end, $waited, $timeout);
SKIP: {
skip("Not connected to a tty won't test --read-timeout with STDIN", 1)
if !-t STDIN;
use IO::File;
STDIN->blocking(1);
$timeout = wait_for(
sub {
$start = time;
`$trunk/bin/pt-query-digest --read-timeout 2 --pid $pid_file 2>/dev/null`;
return;
},
5,
);
$end = time;
$waited = $end - $start;
if ( $timeout ) {
# mqd ran longer than --read-timeout
chomp(my $pid = slurp_file($pid_file));
kill SIGTERM => $pid if $pid;
}
ok(
$waited >= 2 && int($waited) <= 4,
sprintf("--read-timeout 2 waited %.1f seconds reading STDIN", $waited)
);
}
ok(
$waited >= 2 && $waited < 4,
sprintf("--read-timeout 2 waited %.1f seconds reading STDIN", $waited)
);
diag(`rm -rf /tmp/mqd.pid`);
diag(`rm -rf /tmp/mqd.fifo; mkfifo /tmp/mqd.fifo`);
system("$trunk/t/pt-query-digest/samples/write-to-fifo.pl /tmp/mqd.fifo 4 &");
unlink $pid_file;
mkfifo $fifo, 0700;
system("$trunk/t/pt-query-digest/samples/write-to-fifo.pl $fifo 4 &");
$timeout = wait_for(
sub {
$start = time;
`$trunk/bin/pt-query-digest --read-timeout 2 --pid /tmp/mqd.pid /tmp/mqd.fifo`;
`$trunk/bin/pt-query-digest --read-timeout 2 --pid $pid_file $fifo`;
return;
},
4,
5,
);
$end = time;
$waited = $end - $start;
if ( $timeout ) {
# mqd ran longer than --read-timeout
my $pid = `cat /tmp/mqd.pid`;
`kill $pid`;
chomp(my $pid = slurp_file($pid_file));
kill SIGTERM => $pid if $pid;
}
ok(
$waited >= 2 && $waited < 4,
$waited >= 2 && int($waited) <= 4,
sprintf("--read-timeout waited %.1f seconds reading a file", $waited)
);
diag(`rm -rf /tmp/mqd.pid`);
diag(`rm -rf /tmp/mqd.fifo`);
unlink $pid_file;
unlink $fifo;
# #############################################################################
# Done.

View File

@@ -363,7 +363,7 @@ is(
# Test --where.
# #############################################################################
$sb->load_file('master', 't/pt-table-checksum/samples/600cities.sql');
$master_dbh->do("LOAD DATA LOCAL INFILE '$trunk/t/pt-table-checksum/samples/600cities.data' INTO TABLE test.t");
$master_dbh->do("LOAD DATA INFILE '$trunk/t/pt-table-checksum/samples/600cities.data' INTO TABLE test.t");
$output = output(
sub { $exit_status = pt_table_checksum::main(@args,

View File

@@ -113,7 +113,7 @@ unlike(
# on replicas
# #############################################################################
$sb->load_file('master', 't/pt-table-checksum/samples/600cities.sql');
$master_dbh->do("LOAD DATA LOCAL INFILE '$trunk/t/pt-table-checksum/samples/600cities.data' INTO TABLE test.t");
$master_dbh->do("LOAD DATA INFILE '$trunk/t/pt-table-checksum/samples/600cities.data' INTO TABLE test.t");
$master_dbh->do("SET SQL_LOG_BIN=0");
$master_dbh->do("DELETE FROM test.t WHERE id > 100");
$master_dbh->do("SET SQL_LOG_BIN=1");

View File

@@ -43,7 +43,7 @@ my $output;
sub load_data_infile {
my ($file, $where) = @_;
$master_dbh->do('truncate table percona.checksums');
$master_dbh->do("LOAD DATA LOCAL INFILE '$trunk/t/pt-table-checksum/samples/checksum_results/$file' INTO TABLE percona.checksums");
$master_dbh->do("LOAD DATA INFILE '$trunk/t/pt-table-checksum/samples/checksum_results/$file' INTO TABLE percona.checksums");
if ( $where ) {
PerconaTest::wait_for_table($slave1_dbh, 'percona.checksums', $where);
}

View File

@@ -69,7 +69,7 @@ wait_until(sub {
# wait for it to stop "lagging".
($output) = PerconaTest::full_output(
sub { pt_table_checksum::main(@args, qw(-t sakila.city)) },
wait_for => 3,
wait_for => 10,
);
like(

View File

@@ -61,15 +61,13 @@ if ( !$pid ) {
}
# parent
sleep 4; # give time slave to become lagged
my $lag = $slave_dbh->selectrow_hashref("show slave status");
if ( !$lag->{seconds_behind_master} ) {
PerconaTest::wait_until(sub {
$slave_dbh->selectrow_hashref("show slave status")->{seconds_behind_master}
}) or do {
kill 15, $pid;
waitpid ($pid, 0);
die "Slave did not lag";
}
};
my $start = time;
@@ -93,14 +91,13 @@ cmp_ok(
);
# Repeat the test with --wait 0 to test that the sync happens without delay.
$lag = $slave_dbh->selectrow_hashref("show slave status");
if ( !$lag->{seconds_behind_master} ) {
PerconaTest::wait_until(sub {
$slave_dbh->selectrow_hashref("show slave status")->{seconds_behind_master}
}) or do {
kill 15, $pid;
waitpid ($pid, 0);
die "Slave is not lagged";
}
die "Slave did not lag";
};
$start = time;

View File

@@ -33,6 +33,8 @@ else {
plan tests => 13;
}
my $load_data_is_disabled = PerconaTest::load_data_is_disabled($dbh1);
my @host_args = ('h=127.1,P=12345', 'P=12348');
my @op_args = (qw(-u msandbox -p msandbox),
'--compare', 'results,warnings',
@@ -64,23 +66,27 @@ ok(
'Report for multiple queries (checksum method)'
);
ok(
no_diff(
sub { pt_upgrade::main(@args, "$trunk/$sample/001/select-one.log",
"--compare-results-method", "rows") },
"$sample/001/select-one-rows.txt"
),
'Report for a single query (rows method)'
);
SKIP: {
skip "LOAD DATA LOCAL INFILE is disabled", 2 if $load_data_is_disabled;
ok(
no_diff(
sub { pt_upgrade::main(@args, "$trunk/$sample/001/select-one.log",
"--compare-results-method", "rows") },
"$sample/001/select-one-rows.txt"
),
'Report for a single query (rows method)'
);
ok(
no_diff(
sub { pt_upgrade::main(@args, "$trunk/$sample/001/select-everyone.log",
"--compare-results-method", "rows") },
"$sample/001/select-everyone-rows.txt"
),
'Report for multiple queries (rows method)'
);
ok(
no_diff(
sub { pt_upgrade::main(@args, "$trunk/$sample/001/select-everyone.log",
"--compare-results-method", "rows") },
"$sample/001/select-everyone-rows.txt"
),
'Report for multiple queries (rows method)'
);
}
ok(
no_diff(
@@ -107,76 +113,84 @@ $sb->wipe_clean($dbh2);
# Issue 951: mk-upgrade "I need a db argument" error with
# compare-results-method=rows
# #############################################################################
$sb->load_file('master', "$sample/002/tables.sql");
$sb->load_file('master1', "$sample/002/tables.sql");
SKIP: {
skip "LOAD DATA LOCAL INFILE is disabled", 4 if $load_data_is_disabled;
$sb->load_file('master', "$sample/002/tables.sql");
$sb->load_file('master1', "$sample/002/tables.sql");
# Make a difference on one host so diff_rows() is called.
$dbh1->do('insert into test.t values (5)');
# Make a difference on one host so diff_rows() is called.
$dbh1->do('insert into test.t values (5)');
ok(
no_diff(
sub { pt_upgrade::main(@op_args, "$log/002/no-db.log",
'h=127.1,P=12345,D=test', 'P=12348,D=test',
qw(--compare-results-method rows --temp-database test)) },
"$sample/002/report-01.txt",
),
'No db, compare results row, DSN D, --temp-database (issue 951)'
);
ok(
no_diff(
sub { pt_upgrade::main(@op_args, "$log/002/no-db.log",
'h=127.1,P=12345,D=test', 'P=12348,D=test',
qw(--compare-results-method rows --temp-database test)) },
"$sample/002/report-01.txt",
),
'No db, compare results row, DSN D, --temp-database (issue 951)'
);
$sb->load_file('master', "$sample/002/tables.sql");
$sb->load_file('master1', "$sample/002/tables.sql");
$dbh1->do('insert into test.t values (5)');
$sb->load_file('master', "$sample/002/tables.sql");
$sb->load_file('master1', "$sample/002/tables.sql");
$dbh1->do('insert into test.t values (5)');
ok(
no_diff(
sub { pt_upgrade::main(@op_args, "$log/002/no-db.log",
'h=127.1,P=12345,D=test', 'P=12348,D=test',
qw(--compare-results-method rows --temp-database tmp_db)) },
"$sample/002/report-01.txt",
),
'No db, compare results row, DSN D'
);
ok(
no_diff(
sub { pt_upgrade::main(@op_args, "$log/002/no-db.log",
'h=127.1,P=12345,D=test', 'P=12348,D=test',
qw(--compare-results-method rows --temp-database tmp_db)) },
"$sample/002/report-01.txt",
),
'No db, compare results row, DSN D'
);
is_deeply(
$dbh1->selectall_arrayref('show tables from `test`'),
[['t']],
"Didn't create temp table in event's db"
);
is_deeply(
$dbh1->selectall_arrayref('show tables from `test`'),
[['t']],
"Didn't create temp table in event's db"
);
is_deeply(
$dbh1->selectall_arrayref('show tables from `tmp_db`'),
[['mk_upgrade_left']],
"Createed temp table in --temp-database"
);
is_deeply(
$dbh1->selectall_arrayref('show tables from `tmp_db`'),
[['mk_upgrade_left']],
"Createed temp table in --temp-database"
);
$sb->wipe_clean($dbh1);
$sb->wipe_clean($dbh2);
$sb->wipe_clean($dbh1);
$sb->wipe_clean($dbh2);
}
# #############################################################################
# Bug 926598: DBD::mysql bug causes pt-upgrade to use wrong
# precision (M) and scale (D)
# #############################################################################
$sb->load_file('master', "$sample/003/tables.sql");
$sb->load_file('master1', "$sample/003/tables.sql");
SKIP: {
skip "LOAD DATA LOCAL INFILE is disabled", 2 if $load_data_is_disabled;
# Make a difference on one host so diff_rows() is called.
$dbh1->do('insert into test.t values (4, 1.00)');
$sb->load_file('master', "$sample/003/tables.sql");
$sb->load_file('master1', "$sample/003/tables.sql");
ok(
no_diff(
sub { pt_upgrade::main(@args, "$log/003/double.log",
qw(--compare-results-method rows)) },
"$sample/003/report001.txt",
),
'M, D diff (bug 926598)',
);
# Make a difference on one host so diff_rows() is called.
$dbh1->do('insert into test.t values (4, 1.00)');
my $row = $dbh1->selectrow_arrayref("show create table test.mk_upgrade_left");
like(
$row->[1],
qr/[`"]SUM\(total\)[`"]\s+double\sDEFAULT/i,
"No M,D in table def (bug 926598)"
);
ok(
no_diff(
sub { pt_upgrade::main(@args, "$log/003/double.log",
qw(--compare-results-method rows)) },
"$sample/003/report001.txt",
),
'M, D diff (bug 926598)',
);
my $row = $dbh1->selectrow_arrayref("show create table test.mk_upgrade_left");
like(
$row->[1],
qr/[`"]SUM\(total\)[`"]\s+double\sDEFAULT/i,
"No M,D in table def (bug 926598)"
);
}
# #############################################################################
# Done.

View File

@@ -24,11 +24,17 @@ my $dbh1 = $sb->get_dbh_for('master');
my $dbh2 = $sb->get_dbh_for('master1');
if ( !$dbh1 ) {
diag(`$trunk/sandbox/stop-sandbox master 12348 >/dev/null`);
plan skip_all => 'Cannot connect to sandbox master';
}
elsif ( !$dbh2 ) {
diag(`$trunk/sandbox/stop-sandbox master 12348 >/dev/null`);
plan skip_all => 'Cannot connect to second sandbox master';
}
elsif ( PerconaTest::load_data_is_disabled($dbh1) ) {
diag(`$trunk/sandbox/stop-sandbox master 12348 >/dev/null`);
plan skip_all => 'LOAD DATA LOCAL INFILE is disabled';
}
else {
plan tests => 6;
}