Fix for 1099845: pt-table-checksum pxc same_node function incorrectly uses wsrep_sst_receive_address

This commit is contained in:
Brian Fraser
2013-04-02 05:37:38 -03:00
parent 79c36ca77c
commit e2612a08aa
2 changed files with 49 additions and 14 deletions

View File

@@ -2803,6 +2803,7 @@ if ( PTDEBUG ) {
# ########################################################################### # ###########################################################################
{ {
package Lmo::Utils; package Lmo::Utils;
use strict; use strict;
use warnings qw( FATAL all ); use warnings qw( FATAL all );
require Exporter; require Exporter;
@@ -2810,7 +2811,12 @@ our (@ISA, @EXPORT, @EXPORT_OK);
BEGIN { BEGIN {
@ISA = qw(Exporter); @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); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -3658,13 +3663,25 @@ sub is_cluster_node {
sub same_node { sub same_node {
my ($self, $cxn1, $cxn2) = @_; my ($self, $cxn1, $cxn2) = @_;
my $sql = "SHOW VARIABLES LIKE 'wsrep\_sst\_receive\_address'"; my $sub = sub {
PTDEBUG && _d($cxn1->name, $sql); my $sql = shift;
my (undef, $val1) = $cxn1->dbh->selectrow_array($sql); my @temp;
PTDEBUG && _d($cxn2->name, $sql); PTDEBUG && _d($cxn1->name, $cxn2->name, $sql);
my (undef, $val2) = $cxn2->dbh->selectrow_array($sql); for ($cxn1->dbh, $cxn2->dbh) {
my (undef, $v) = $_->selectrow_array($sql);
push @temp, $v;
}
return @temp
};
for my $val ('wsrep\_sst\_receive\_address', 'wsrep\_node\_name', 'wsrep\_node\_address') {
my $sql = "SHOW VARIABLES LIKE '$val'";
my ($val1, $val2) = $sub->($sql);
return unless ($val1 || '') eq ($val2 || '');
}
return 1;
return ($val1 || '') eq ($val2 || '');
} }
sub same_cluster { sub same_cluster {
@@ -7403,6 +7420,8 @@ use warnings FATAL => 'all';
use English qw(-no_match_vars); use English qw(-no_match_vars);
use constant PTDEBUG => $ENV{PTDEBUG} || 0; use constant PTDEBUG => $ENV{PTDEBUG} || 0;
use Time::HiRes qw(sleep);
sub new { sub new {
my ( $class, %args ) = @_; my ( $class, %args ) = @_;
my $self = { my $self = {

View File

@@ -54,13 +54,29 @@ sub is_cluster_node {
sub same_node { sub same_node {
my ($self, $cxn1, $cxn2) = @_; my ($self, $cxn1, $cxn2) = @_;
my $sql = "SHOW VARIABLES LIKE 'wsrep\_sst\_receive\_address'"; my $sub = sub {
PTDEBUG && _d($cxn1->name, $sql); my $sql = shift;
my (undef, $val1) = $cxn1->dbh->selectrow_array($sql); my @temp;
PTDEBUG && _d($cxn2->name, $sql); PTDEBUG && _d($cxn1->name, $cxn2->name, $sql);
my (undef, $val2) = $cxn2->dbh->selectrow_array($sql); for ($cxn1->dbh, $cxn2->dbh) {
my (undef, $v) = $_->selectrow_array($sql);
push @temp, $v;
}
return @temp
};
# 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
for my $val ('wsrep\_sst\_receive\_address', 'wsrep\_node\_name', 'wsrep\_node\_address') {
my $sql = "SHOW VARIABLES LIKE '$val'";
my ($val1, $val2) = $sub->($sql);
return unless ($val1 || '') eq ($val2 || '');
}
return 1;
return ($val1 || '') eq ($val2 || '');
} }
sub same_cluster { sub same_cluster {