mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-04 03:26:19 +00:00
PT-2340 - Support MySQL 8.4
- Created pt-replica-find. pt-slave-find kept as symbolic link
This commit is contained in:
4787
bin/pt-replica-find
Executable file
4787
bin/pt-replica-find
Executable file
File diff suppressed because it is too large
Load Diff
4782
bin/pt-slave-find
4782
bin/pt-slave-find
File diff suppressed because it is too large
Load Diff
1
bin/pt-slave-find
Symbolic link
1
bin/pt-slave-find
Symbolic link
@@ -0,0 +1 @@
|
||||
pt-replica-find
|
37
t/pt-replica-find/deprecation.t
Normal file
37
t/pt-replica-find/deprecation.t
Normal file
@@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More ;
|
||||
|
||||
use PerconaTest;
|
||||
require "$trunk/bin/pt-replica-find";
|
||||
|
||||
my $output;
|
||||
my $cnf = '/tmp/12346/my.sandbox.cnf';
|
||||
my $cmd = "$trunk/bin/pt-replica-find -F $cnf h=127.1";
|
||||
my $legacy_cmd = "$trunk/bin/pt-slave-find -F $cnf h=127.1";
|
||||
|
||||
$output = `$cmd --help 2>&1`;
|
||||
unlike(
|
||||
$output,
|
||||
qr/pt-slave-find is a link to pt-replica-find/,
|
||||
'Deprecation warning not printed for pt-replica-find'
|
||||
);
|
||||
|
||||
$output = `$legacy_cmd --help 2>&1`;
|
||||
like(
|
||||
$output,
|
||||
qr/pt-slave-find is a link to pt-replica-find/,
|
||||
'Deprecation warning printed for pt-slave-find'
|
||||
);
|
||||
|
||||
done_testing();
|
||||
exit;
|
170
t/pt-replica-find/pt-replica-find.t
Normal file
170
t/pt-replica-find/pt-replica-find.t
Normal file
@@ -0,0 +1,170 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
use Data::Dumper;
|
||||
|
||||
use PerconaTest;
|
||||
use Sandbox;
|
||||
|
||||
require "$trunk/bin/pt-replica-find";
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
my $replica1_dbh = $sb->get_dbh_for('replica1');
|
||||
my $replica2_dbh = $sb->get_dbh_for('replica2');
|
||||
|
||||
# This test is sensitive to ghost/old replicas created/destroyed by other
|
||||
# tests. So we stop the replicas, restart the source, and start everything
|
||||
# again. Hopefully this will return the env to its original state.
|
||||
$replica2_dbh->do("STOP ${replica_name}");
|
||||
$replica1_dbh->do("STOP ${replica_name}");
|
||||
diag(`/tmp/12345/stop >/dev/null`);
|
||||
diag(`/tmp/12345/start >/dev/null`);
|
||||
$replica1_dbh->do("START ${replica_name}");
|
||||
$replica2_dbh->do("START ${replica_name}");
|
||||
|
||||
my $source_dbh = $sb->get_dbh_for('source');
|
||||
|
||||
if ( !$source_dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox source';
|
||||
}
|
||||
elsif ( !$replica1_dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox replica';
|
||||
}
|
||||
elsif ( !$replica2_dbh ) {
|
||||
plan skip_all => 'Cannot connect to second sandbox replica';
|
||||
}
|
||||
else {
|
||||
plan tests => 10;
|
||||
}
|
||||
|
||||
my @args = ('h=127.0.0.1,P=12345,u=msandbox,p=msandbox,s=1');
|
||||
|
||||
my $output = `$trunk/bin/pt-replica-find --help`;
|
||||
like($output, qr/Prompt for a password/, 'It compiles');
|
||||
|
||||
# Double check that we're setup correctly.
|
||||
my $row = $replica2_dbh->selectall_arrayref("SHOW ${replica_name} STATUS", {Slice => {}});
|
||||
is(
|
||||
$row->[0]->{"${source_name}_port"},
|
||||
'12346',
|
||||
'replica2 is replica of replica1'
|
||||
) or diag(Dumper($row));
|
||||
|
||||
$output = `$trunk/bin/pt-replica-find -h 127.0.0.1 -P 12345 -u msandbox -p msandbox s=1 --report-format hostname`;
|
||||
my $expected = <<EOF;
|
||||
127.0.0.1:12345
|
||||
+- 127.0.0.1:12346
|
||||
+- 127.0.0.1:12347
|
||||
EOF
|
||||
is($output, $expected, 'Source with replica and replica of replica');
|
||||
|
||||
###############################################################################
|
||||
# Test --resolve-hostname option (we don't know the hostname of the test
|
||||
# machine so we settle for any non null string)
|
||||
###############################################################################
|
||||
$output = `$trunk/bin/pt-replica-find -h 127.0.0.1 -P 12345 -u msandbox -p msandbox --report-format hostname --resolve-address`;
|
||||
like (
|
||||
$output,
|
||||
qr/127\.0\.0\.1:12345\s+\(\w+\)/s,
|
||||
"--resolve-address option"
|
||||
) or diag($output);
|
||||
|
||||
# #############################################################################
|
||||
# Until MasterSlave::find_replica_hosts() is improved to overcome the problems
|
||||
# with SHOW REPLICA HOSTS, this test won't work.
|
||||
# #############################################################################
|
||||
# Make replica2 replica of source.
|
||||
#diag(`../../mk-slave-move/mk-slave-move --sibling-of-master h=127.1,P=12347`);
|
||||
#$output = `perl ../mk-slave-find -h 127.0.0.1 -P 12345 -u msandbox -p msandbox`;
|
||||
#$expected = <<EOF;
|
||||
#127.0.0.1:12345
|
||||
#+- 127.0.0.1:12346
|
||||
#+- 127.0.0.1:12347
|
||||
#EOF
|
||||
#is($output, $expected, 'Source with two replicas');
|
||||
|
||||
# #########################################################################
|
||||
# Issue 391: Add --pid option to all scripts
|
||||
# #########################################################################
|
||||
`touch /tmp/mk-script.pid`;
|
||||
$output = `$trunk/bin/pt-replica-find -h 127.0.0.1 -P 12345 -u msandbox -p msandbox --pid /tmp/mk-script.pid 2>&1`;
|
||||
like(
|
||||
$output,
|
||||
qr{PID file /tmp/mk-script.pid exists},
|
||||
'Dies if PID file already exists (issue 391)'
|
||||
);
|
||||
`rm -rf /tmp/mk-script.pid`;
|
||||
|
||||
|
||||
# #############################################################################
|
||||
# Summary report format.
|
||||
# #############################################################################
|
||||
my $outfile = "/tmp/mk-replica-find-output.txt";
|
||||
#diag(`rm -rf $outfile >/dev/null`);
|
||||
diag(`rm -rf $outfile`);
|
||||
|
||||
$output = output(
|
||||
sub { pt_slave_find::main(@args) },
|
||||
file => $outfile,
|
||||
);
|
||||
|
||||
open my $fh, "<", $outfile or die $!;
|
||||
|
||||
my $result = do { local $/; <$fh> }; #"
|
||||
|
||||
$result =~ s/Version.*/Version/g;
|
||||
$result =~ s/Uptime.*/Uptime/g;
|
||||
$result =~ s/[0-9]* seconds/0 seconds/g;
|
||||
$result =~ s/Binary logging.*/Binary logging/g;
|
||||
$result =~ s/Replication Is a slave, has 1 slaves connected, is.*/Replication Is a slave, has 1 slaves connected, is/g;
|
||||
$result =~ s/Replication Is a replica, has 1 replicas connected, is.*/Replication Is a replica, has 1 replicas connected, is/g;
|
||||
|
||||
my $innodb_re = qr/InnoDB version\s+(.*)/;
|
||||
my (@innodb_versions) = $result =~ /$innodb_re/g;
|
||||
$result =~ s/$innodb_re/InnoDB version BUILTIN/g;
|
||||
|
||||
my $source_version = VersionParser->new($source_dbh);
|
||||
my $replica_version = VersionParser->new($replica1_dbh);
|
||||
my $replica2_version = VersionParser->new($replica2_dbh);
|
||||
|
||||
is(
|
||||
$innodb_versions[0],
|
||||
$source_version->innodb_version(),
|
||||
"pt-replica-find gets the right InnoDB version for the source"
|
||||
);
|
||||
|
||||
is(
|
||||
$innodb_versions[1],
|
||||
$replica_version->innodb_version(),
|
||||
"...and for the first replica"
|
||||
) or diag($output);
|
||||
|
||||
is(
|
||||
$innodb_versions[2],
|
||||
$replica2_version->innodb_version(),
|
||||
"...and for the second replica"
|
||||
);
|
||||
|
||||
ok(
|
||||
no_diff($result, ($sandbox_version ge '5.1'
|
||||
? "t/pt-replica-find/samples/summary001.txt"
|
||||
: "t/pt-replica-find/samples/summary001-5.0.txt"), cmd_output => 1, keep_output => 1, update_samples => 1),
|
||||
"Summary report format",
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
diag(`rm -rf $outfile >/dev/null`);
|
||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||
exit;
|
@@ -157,8 +157,8 @@ is(
|
||||
|
||||
ok(
|
||||
no_diff($result, ($sandbox_version ge '5.1'
|
||||
? "t/pt-slave-find/samples/summary001.txt"
|
||||
: "t/pt-slave-find/samples/summary001-5.0.txt"), cmd_output => 1, keep_output => 1, update_samples => 1),
|
||||
? "t/pt-replica-find/samples/summary001.txt"
|
||||
: "t/pt-replica-find/samples/summary001-5.0.txt"), cmd_output => 1, keep_output => 1, update_samples => 1),
|
||||
"Summary report format",
|
||||
);
|
||||
|
Reference in New Issue
Block a user