diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index 985a49c0..f25719f1 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -2803,6 +2803,7 @@ if ( PTDEBUG ) { # ########################################################################### { package Lmo::Utils; + use strict; use warnings qw( FATAL all ); require Exporter; @@ -2810,7 +2811,12 @@ our (@ISA, @EXPORT, @EXPORT_OK); BEGIN { @ISA = qw(Exporter); - @EXPORT = @EXPORT_OK = qw(_install_coderef _unimport_coderefs _glob_for _stash_for); + @EXPORT = @EXPORT_OK = qw( + _install_coderef + _unimport_coderefs + _glob_for + _stash_for + ); } { @@ -2994,7 +3000,6 @@ sub meta { return Lmo::Meta->new(class => $class); } - 1; } # ########################################################################### @@ -3658,13 +3663,16 @@ sub is_cluster_node { sub same_node { my ($self, $cxn1, $cxn2) = @_; - my $sql = "SHOW VARIABLES LIKE 'wsrep\_sst\_receive\_address'"; - PTDEBUG && _d($cxn1->name, $sql); - my (undef, $val1) = $cxn1->dbh->selectrow_array($sql); - PTDEBUG && _d($cxn2->name, $sql); - my (undef, $val2) = $cxn2->dbh->selectrow_array($sql); + foreach my $val ('wsrep\_sst\_receive\_address', 'wsrep\_node\_name', 'wsrep\_node\_address') { + my $sql = "SHOW VARIABLES LIKE '$val'"; + PTDEBUG && _d($cxn1->name, $cxn2->name, $sql); + my (undef, $val1) = $cxn1->dbh->selectrow_array($sql); + my (undef, $val2) = $cxn2->dbh->selectrow_array($sql); - return ($val1 || '') eq ($val2 || ''); + return unless ($val1 || '') eq ($val2 || ''); + } + + return 1; } sub same_cluster { @@ -7403,6 +7411,8 @@ use warnings FATAL => 'all'; use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; +use Time::HiRes qw(sleep); + sub new { my ( $class, %args ) = @_; my $self = { diff --git a/lib/Percona/XtraDB/Cluster.pm b/lib/Percona/XtraDB/Cluster.pm index a0d2d13d..8d53d897 100644 --- a/lib/Percona/XtraDB/Cluster.pm +++ b/lib/Percona/XtraDB/Cluster.pm @@ -54,13 +54,20 @@ sub is_cluster_node { sub same_node { my ($self, $cxn1, $cxn2) = @_; - my $sql = "SHOW VARIABLES LIKE 'wsrep\_sst\_receive\_address'"; - PTDEBUG && _d($cxn1->name, $sql); - my (undef, $val1) = $cxn1->dbh->selectrow_array($sql); - PTDEBUG && _d($cxn2->name, $sql); - my (undef, $val2) = $cxn2->dbh->selectrow_array($sql); + # We check several variables because, if these aren't the same, + # we have our answer, but if they are, it doesn't necessarily + # mean that we have the same node; See: + # https://bugs.launchpad.net/percona-toolkit/+bug/1099845 + foreach my $val ('wsrep\_sst\_receive\_address', 'wsrep\_node\_name', 'wsrep\_node\_address') { + my $sql = "SHOW VARIABLES LIKE '$val'"; + PTDEBUG && _d($cxn1->name, $cxn2->name, $sql); + my (undef, $val1) = $cxn1->dbh->selectrow_array($sql); + my (undef, $val2) = $cxn2->dbh->selectrow_array($sql); - return ($val1 || '') eq ($val2 || ''); + return unless ($val1 || '') eq ($val2 || ''); + } + + return 1; } sub same_cluster {