Build percona-toolkit-2.2.2

This commit is contained in:
Brian Fraser
2013-04-19 20:26:48 -03:00
parent 2e8ad61453
commit 871e217f3b
39 changed files with 606 additions and 81 deletions

View File

@@ -1,5 +1,7 @@
Changelog for Percona Toolkit Changelog for Percona Toolkit
v2.2.2 released 2013-04-19
* Restored --show-all in pt-query-digest * Restored --show-all in pt-query-digest
* Cluster nodes can now be autodiscovered in pt-table-checksum * Cluster nodes can now be autodiscovered in pt-table-checksum
* Fixed bug 1127450: pt-archiver --charset and --bulk-insert fail, may corrupt data * Fixed bug 1127450: pt-archiver --charset and --bulk-insert fail, may corrupt data

View File

@@ -2,7 +2,7 @@ use ExtUtils::MakeMaker;
WriteMakefile( WriteMakefile(
NAME => 'percona-toolkit', NAME => 'percona-toolkit',
VERSION => '2.2.1', VERSION => '2.2.2',
EXE_FILES => [ <bin/*> ], EXE_FILES => [ <bin/*> ],
MAN1PODS => { MAN1PODS => {
'docs/percona-toolkit.pod' => 'blib/man1/percona-toolkit.1p', 'docs/percona-toolkit.pod' => 'blib/man1/percona-toolkit.1p',

View File

@@ -1313,6 +1313,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-align 2.2.1 pt-align 2.2.2
=cut =cut

View File

@@ -42,7 +42,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -60,6 +60,7 @@ our $VERSION = '2.2.1';
# ########################################################################### # ###########################################################################
{ {
package Lmo::Utils; package Lmo::Utils;
use strict; use strict;
use warnings qw( FATAL all ); use warnings qw( FATAL all );
require Exporter; require Exporter;
@@ -67,7 +68,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
);
} }
{ {
@@ -251,7 +257,6 @@ sub meta {
return Lmo::Meta->new(class => $class); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -3462,6 +3467,8 @@ sub get_slaves {
my $dp = $self->{DSNParser}; my $dp = $self->{DSNParser};
my $methods = $self->_resolve_recursion_methods($args{dsn}); my $methods = $self->_resolve_recursion_methods($args{dsn});
return $slaves unless @$methods;
if ( grep { m/processlist|hosts/i } @$methods ) { if ( grep { m/processlist|hosts/i } @$methods ) {
my @required_args = qw(dbh dsn); my @required_args = qw(dbh dsn);
foreach my $arg ( @required_args ) { foreach my $arg ( @required_args ) {
@@ -7847,6 +7854,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-archiver 2.2.1 pt-archiver 2.2.2
=cut =cut

View File

@@ -42,7 +42,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -60,6 +60,7 @@ our $VERSION = '2.2.1';
# ########################################################################### # ###########################################################################
{ {
package Lmo::Utils; package Lmo::Utils;
use strict; use strict;
use warnings qw( FATAL all ); use warnings qw( FATAL all );
require Exporter; require Exporter;
@@ -67,7 +68,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
);
} }
{ {
@@ -251,7 +257,6 @@ sub meta {
return Lmo::Meta->new(class => $class); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -2326,6 +2331,32 @@ sub name {
return $self->{hostname} || $self->{dsn_name} || 'unknown host'; return $self->{hostname} || $self->{dsn_name} || 'unknown host';
} }
sub remove_duplicate_cxns {
my ($self, %args) = @_;
my @cxns = @{$args{cxns}};
my $seen_ids = $args{seen_ids} || {};
PTDEBUG && _d("Removing duplicates from ", join(" ", map { $_->name } @cxns));
my @trimmed_cxns;
for my $cxn ( @cxns ) {
my $dbh = $cxn->dbh();
my $sql = q{SELECT @@server_id};
PTDEBUG && _d($sql);
my ($id) = $dbh->selectrow_array($sql);
PTDEBUG && _d('Server ID for ', $cxn->name, ': ', $id);
if ( ! $seen_ids->{$id}++ ) {
push @trimmed_cxns, $cxn
}
else {
PTDEBUG && _d("Removing ", $cxn->name,
", ID ", $id, ", because we've already seen it");
}
}
return \@trimmed_cxns;
}
sub DESTROY { sub DESTROY {
my ($self) = @_; my ($self) = @_;
@@ -5664,6 +5695,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-config-diff 2.2.1 pt-config-diff 2.2.2
=cut =cut

View File

@@ -41,7 +41,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -1124,6 +1124,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;
@@ -1131,7 +1132,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
);
} }
{ {
@@ -1315,7 +1321,6 @@ sub meta {
return Lmo::Meta->new(class => $class); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -2670,6 +2675,32 @@ sub name {
return $self->{hostname} || $self->{dsn_name} || 'unknown host'; return $self->{hostname} || $self->{dsn_name} || 'unknown host';
} }
sub remove_duplicate_cxns {
my ($self, %args) = @_;
my @cxns = @{$args{cxns}};
my $seen_ids = $args{seen_ids} || {};
PTDEBUG && _d("Removing duplicates from ", join(" ", map { $_->name } @cxns));
my @trimmed_cxns;
for my $cxn ( @cxns ) {
my $dbh = $cxn->dbh();
my $sql = q{SELECT @@server_id};
PTDEBUG && _d($sql);
my ($id) = $dbh->selectrow_array($sql);
PTDEBUG && _d('Server ID for ', $cxn->name, ': ', $id);
if ( ! $seen_ids->{$id}++ ) {
push @trimmed_cxns, $cxn
}
else {
PTDEBUG && _d("Removing ", $cxn->name,
", ID ", $id, ", because we've already seen it");
}
}
return \@trimmed_cxns;
}
sub DESTROY { sub DESTROY {
my ($self) = @_; my ($self) = @_;
@@ -5437,6 +5468,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-deadlock-logger 2.2.1 pt-deadlock-logger 2.2.2
=cut =cut

View File

@@ -37,7 +37,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -63,6 +63,7 @@ use constant PTDEBUG => $ENV{PTDEBUG} || 0;
use List::Util qw(max); use List::Util qw(max);
use Getopt::Long; use Getopt::Long;
use Data::Dumper;
my $POD_link_re = '[LC]<"?([^">]+)"?>'; my $POD_link_re = '[LC]<"?([^">]+)"?>';
@@ -1046,6 +1047,45 @@ sub _parse_synopsis {
); );
}; };
sub set_vars {
my ($self, $file) = @_;
$file ||= $self->{file} || __FILE__;
my %user_vars;
my $user_vars = $self->has('set-vars') ? $self->get('set-vars') : undef;
if ( $user_vars ) {
foreach my $var_val ( @$user_vars ) {
my ($var, $val) = $var_val =~ m/([^\s=]+)=(\S+)/;
die "Invalid --set-vars value: $var_val\n" unless $var && $val;
$user_vars{$var} = {
val => $val,
default => 0,
};
}
}
my %default_vars;
my $default_vars = $self->read_para_after($file, qr/MAGIC_set_vars/);
if ( $default_vars ) {
%default_vars = map {
my $var_val = $_;
my ($var, $val) = $var_val =~ m/([^\s=]+)=(\S+)/;
die "Invalid --set-vars value: $var_val\n" unless $var && $val;
$var => {
val => $val,
default => 1,
};
} split("\n", $default_vars);
}
my %vars = (
%default_vars, # first the tool's defaults
%user_vars, # then the user's which overwrite the defaults
);
PTDEBUG && _d('--set-vars:', Dumper(\%vars));
return \%vars;
}
sub _d { sub _d {
my ($package, undef, $line) = caller 0; my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; } @_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }
@@ -5501,6 +5541,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-diskstats 2.2.1 pt-diskstats 2.2.2
=cut =cut

View File

@@ -38,7 +38,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -5480,6 +5480,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-duplicate-key-checker 2.2.1 pt-duplicate-key-checker 2.2.2
=cut =cut

View File

@@ -36,6 +36,7 @@ use constant PTDEBUG => $ENV{PTDEBUG} || 0;
use List::Util qw(max); use List::Util qw(max);
use Getopt::Long; use Getopt::Long;
use Data::Dumper;
my $POD_link_re = '[LC]<"?([^">]+)"?>'; my $POD_link_re = '[LC]<"?([^">]+)"?>';
@@ -1019,6 +1020,45 @@ sub _parse_synopsis {
); );
}; };
sub set_vars {
my ($self, $file) = @_;
$file ||= $self->{file} || __FILE__;
my %user_vars;
my $user_vars = $self->has('set-vars') ? $self->get('set-vars') : undef;
if ( $user_vars ) {
foreach my $var_val ( @$user_vars ) {
my ($var, $val) = $var_val =~ m/([^\s=]+)=(\S+)/;
die "Invalid --set-vars value: $var_val\n" unless $var && $val;
$user_vars{$var} = {
val => $val,
default => 0,
};
}
}
my %default_vars;
my $default_vars = $self->read_para_after($file, qr/MAGIC_set_vars/);
if ( $default_vars ) {
%default_vars = map {
my $var_val = $_;
my ($var, $val) = $var_val =~ m/([^\s=]+)=(\S+)/;
die "Invalid --set-vars value: $var_val\n" unless $var && $val;
$var => {
val => $val,
default => 1,
};
} split("\n", $default_vars);
}
my %vars = (
%default_vars, # first the tool's defaults
%user_vars, # then the user's which overwrite the defaults
);
PTDEBUG && _d('--set-vars:', Dumper(\%vars));
return \%vars;
}
sub _d { sub _d {
my ($package, undef, $line) = caller 0; my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; } @_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }
@@ -1562,6 +1602,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-fifo-split 2.2.1 pt-fifo-split 2.2.2
=cut =cut

View File

@@ -34,7 +34,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -4946,6 +4946,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-find 2.2.1 pt-find 2.2.2
=cut =cut

View File

@@ -37,6 +37,7 @@ use constant PTDEBUG => $ENV{PTDEBUG} || 0;
use List::Util qw(max); use List::Util qw(max);
use Getopt::Long; use Getopt::Long;
use Data::Dumper;
my $POD_link_re = '[LC]<"?([^">]+)"?>'; my $POD_link_re = '[LC]<"?([^">]+)"?>';
@@ -1020,6 +1021,45 @@ sub _parse_synopsis {
); );
}; };
sub set_vars {
my ($self, $file) = @_;
$file ||= $self->{file} || __FILE__;
my %user_vars;
my $user_vars = $self->has('set-vars') ? $self->get('set-vars') : undef;
if ( $user_vars ) {
foreach my $var_val ( @$user_vars ) {
my ($var, $val) = $var_val =~ m/([^\s=]+)=(\S+)/;
die "Invalid --set-vars value: $var_val\n" unless $var && $val;
$user_vars{$var} = {
val => $val,
default => 0,
};
}
}
my %default_vars;
my $default_vars = $self->read_para_after($file, qr/MAGIC_set_vars/);
if ( $default_vars ) {
%default_vars = map {
my $var_val = $_;
my ($var, $val) = $var_val =~ m/([^\s=]+)=(\S+)/;
die "Invalid --set-vars value: $var_val\n" unless $var && $val;
$var => {
val => $val,
default => 1,
};
} split("\n", $default_vars);
}
my %vars = (
%default_vars, # first the tool's defaults
%user_vars, # then the user's which overwrite the defaults
);
PTDEBUG && _d('--set-vars:', Dumper(\%vars));
return \%vars;
}
sub _d { sub _d {
my ($package, undef, $line) = caller 0; my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; } @_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }
@@ -2153,6 +2193,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-fingerprint 2.2.1 pt-fingerprint 2.2.2
=cut =cut

View File

@@ -36,7 +36,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -1827,6 +1827,32 @@ sub name {
return $self->{hostname} || $self->{dsn_name} || 'unknown host'; return $self->{hostname} || $self->{dsn_name} || 'unknown host';
} }
sub remove_duplicate_cxns {
my ($self, %args) = @_;
my @cxns = @{$args{cxns}};
my $seen_ids = $args{seen_ids} || {};
PTDEBUG && _d("Removing duplicates from ", join(" ", map { $_->name } @cxns));
my @trimmed_cxns;
for my $cxn ( @cxns ) {
my $dbh = $cxn->dbh();
my $sql = q{SELECT @@server_id};
PTDEBUG && _d($sql);
my ($id) = $dbh->selectrow_array($sql);
PTDEBUG && _d('Server ID for ', $cxn->name, ': ', $id);
if ( ! $seen_ids->{$id}++ ) {
push @trimmed_cxns, $cxn
}
else {
PTDEBUG && _d("Removing ", $cxn->name,
", ID ", $id, ", because we've already seen it");
}
}
return \@trimmed_cxns;
}
sub DESTROY { sub DESTROY {
my ($self) = @_; my ($self) = @_;
@@ -4445,6 +4471,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-fk-error-logger 2.2.1 pt-fk-error-logger 2.2.2
=cut =cut

View File

@@ -37,7 +37,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -105,6 +105,8 @@ sub get_slaves {
my $dp = $self->{DSNParser}; my $dp = $self->{DSNParser};
my $methods = $self->_resolve_recursion_methods($args{dsn}); my $methods = $self->_resolve_recursion_methods($args{dsn});
return $slaves unless @$methods;
if ( grep { m/processlist|hosts/i } @$methods ) { if ( grep { m/processlist|hosts/i } @$methods ) {
my @required_args = qw(dbh dsn); my @required_args = qw(dbh dsn);
foreach my $arg ( @required_args ) { foreach my $arg ( @required_args ) {
@@ -3047,6 +3049,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 = {
@@ -5955,7 +5959,7 @@ not check or adjust for different system or MySQL time zones which can
cause the tool to compute the lag incorrectly. Specifying this option is cause the tool to compute the lag incorrectly. Specifying this option is
a good idea because it ensures that the tool works correctly regardless of a good idea because it ensures that the tool works correctly regardless of
time zones, but it also makes the tool backwards-incompatible with time zones, but it also makes the tool backwards-incompatible with
pt-heartbeat 2.2.1 and older (unless the older version of pt-heartbeat pt-heartbeat 2.2.2 and older (unless the older version of pt-heartbeat
is running on a system that uses UTC). is running on a system that uses UTC).
=item --version =item --version
@@ -6137,6 +6141,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-heartbeat 2.2.1 pt-heartbeat 2.2.2
=cut =cut

View File

@@ -44,7 +44,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -7476,6 +7476,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-index-usage 2.2.1 pt-index-usage 2.2.2
=cut =cut

View File

@@ -345,14 +345,14 @@ _parse_command_line() {
if [ "$next_opt_is_val" ]; then if [ "$next_opt_is_val" ]; then
next_opt_is_val="" next_opt_is_val=""
if [ $# -eq 0 ] || [ $(expr "$opt" : "-") -eq 1 ]; then if [ $# -eq 0 ] || [ $(expr "$opt" : "\-") -eq 1 ]; then
option_error "$real_opt requires a $required_arg argument" option_error "$real_opt requires a $required_arg argument"
continue continue
fi fi
val="$opt" val="$opt"
opt_is_ok=1 opt_is_ok=1
else else
if [ $(expr "$opt" : "-") -eq 0 ]; then if [ $(expr "$opt" : "\-") -eq 0 ]; then
if [ -z "$ARGV" ]; then if [ -z "$ARGV" ]; then
ARGV="$opt" ARGV="$opt"
else else
@@ -1115,7 +1115,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-ioprofile 2.2.1 pt-ioprofile 2.2.2
=cut =cut

View File

@@ -46,7 +46,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -3738,6 +3738,8 @@ sub get_slaves {
my $dp = $self->{DSNParser}; my $dp = $self->{DSNParser};
my $methods = $self->_resolve_recursion_methods($args{dsn}); my $methods = $self->_resolve_recursion_methods($args{dsn});
return $slaves unless @$methods;
if ( grep { m/processlist|hosts/i } @$methods ) { if ( grep { m/processlist|hosts/i } @$methods ) {
my @required_args = qw(dbh dsn); my @required_args = qw(dbh dsn);
foreach my $arg ( @required_args ) { foreach my $arg ( @required_args ) {
@@ -5178,6 +5180,32 @@ sub name {
return $self->{hostname} || $self->{dsn_name} || 'unknown host'; return $self->{hostname} || $self->{dsn_name} || 'unknown host';
} }
sub remove_duplicate_cxns {
my ($self, %args) = @_;
my @cxns = @{$args{cxns}};
my $seen_ids = $args{seen_ids} || {};
PTDEBUG && _d("Removing duplicates from ", join(" ", map { $_->name } @cxns));
my @trimmed_cxns;
for my $cxn ( @cxns ) {
my $dbh = $cxn->dbh();
my $sql = q{SELECT @@server_id};
PTDEBUG && _d($sql);
my ($id) = $dbh->selectrow_array($sql);
PTDEBUG && _d('Server ID for ', $cxn->name, ': ', $id);
if ( ! $seen_ids->{$id}++ ) {
push @trimmed_cxns, $cxn
}
else {
PTDEBUG && _d("Removing ", $cxn->name,
", ID ", $id, ", because we've already seen it");
}
}
return \@trimmed_cxns;
}
sub DESTROY { sub DESTROY {
my ($self) = @_; my ($self) = @_;
@@ -8098,6 +8126,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-kill 2.2.1 pt-kill 2.2.2
=cut =cut

View File

@@ -791,7 +791,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-mext 2.2.1 pt-mext 2.2.2
=cut =cut

View File

@@ -3111,7 +3111,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-mysql-summary 2.2.1 pt-mysql-summary 2.2.2
=cut =cut

View File

@@ -53,7 +53,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -1137,6 +1137,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;
@@ -1144,7 +1145,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
);
} }
{ {
@@ -1328,7 +1334,6 @@ sub meta {
return Lmo::Meta->new(class => $class); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -3786,6 +3791,32 @@ sub name {
return $self->{hostname} || $self->{dsn_name} || 'unknown host'; return $self->{hostname} || $self->{dsn_name} || 'unknown host';
} }
sub remove_duplicate_cxns {
my ($self, %args) = @_;
my @cxns = @{$args{cxns}};
my $seen_ids = $args{seen_ids} || {};
PTDEBUG && _d("Removing duplicates from ", join(" ", map { $_->name } @cxns));
my @trimmed_cxns;
for my $cxn ( @cxns ) {
my $dbh = $cxn->dbh();
my $sql = q{SELECT @@server_id};
PTDEBUG && _d($sql);
my ($id) = $dbh->selectrow_array($sql);
PTDEBUG && _d('Server ID for ', $cxn->name, ': ', $id);
if ( ! $seen_ids->{$id}++ ) {
push @trimmed_cxns, $cxn
}
else {
PTDEBUG && _d("Removing ", $cxn->name,
", ID ", $id, ", because we've already seen it");
}
}
return \@trimmed_cxns;
}
sub DESTROY { sub DESTROY {
my ($self) = @_; my ($self) = @_;
@@ -3880,6 +3911,8 @@ sub get_slaves {
my $dp = $self->{DSNParser}; my $dp = $self->{DSNParser};
my $methods = $self->_resolve_recursion_methods($args{dsn}); my $methods = $self->_resolve_recursion_methods($args{dsn});
return $slaves unless @$methods;
if ( grep { m/processlist|hosts/i } @$methods ) { if ( grep { m/processlist|hosts/i } @$methods ) {
my @required_args = qw(dbh dsn); my @required_args = qw(dbh dsn);
foreach my $arg ( @required_args ) { foreach my $arg ( @required_args ) {
@@ -7481,6 +7514,8 @@ use constant PTDEBUG => $ENV{PTDEBUG} || 0;
use Lmo; use Lmo;
use Data::Dumper; use Data::Dumper;
{ local $EVAL_ERROR; eval { require Cxn } };
sub get_cluster_name { sub get_cluster_name {
my ($self, $cxn) = @_; my ($self, $cxn) = @_;
my $sql = "SHOW VARIABLES LIKE 'wsrep\_cluster\_name'"; my $sql = "SHOW VARIABLES LIKE 'wsrep\_cluster\_name'";
@@ -7505,13 +7540,67 @@ 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'"; foreach my $val ('wsrep\_sst\_receive\_address', 'wsrep\_node\_name', 'wsrep\_node\_address') {
PTDEBUG && _d($cxn1->name, $sql); my $sql = "SHOW VARIABLES LIKE '$val'";
my (undef, $val1) = $cxn1->dbh->selectrow_array($sql); PTDEBUG && _d($cxn1->name, $cxn2->name, $sql);
PTDEBUG && _d($cxn2->name, $sql); my (undef, $val1) = $cxn1->dbh->selectrow_array($sql);
my (undef, $val2) = $cxn2->dbh->selectrow_array($sql); my (undef, $val2) = $cxn2->dbh->selectrow_array($sql);
return ($val1 || '') eq ($val2 || ''); return unless ($val1 || '') eq ($val2 || '');
}
return 1;
}
sub find_cluster_nodes {
my ($self, %args) = @_;
my $dbh = $args{dbh};
my $dsn = $args{dsn};
my $dp = $args{DSNParser};
my $make_cxn = $args{make_cxn};
my $sql = q{SHOW STATUS LIKE 'wsrep\_incoming\_addresses'};
PTDEBUG && _d($sql);
my (undef, $addresses) = $dbh->selectrow_array($sql);
PTDEBUG && _d("Cluster nodes found: ", $addresses);
return unless $addresses;
my @addresses = grep { !/\Aunspecified\z/i }
split /,\s*/, $addresses;
my @nodes;
foreach my $address ( @addresses ) {
my ($host, $port) = split /:/, $address;
my $spec = "h=$host"
. ($port ? ",P=$port" : "");
my $node_dsn = $dp->parse($spec, $dsn);
my $node_dbh = eval { $dp->get_dbh(
$dp->get_cxn_params($node_dsn), { AutoCommit => 1 }) };
if ( $EVAL_ERROR ) {
print STDERR "Cannot connect to ", $dp->as_string($node_dsn),
", discovered through $sql: $EVAL_ERROR\n";
if ( !$port && $dsn->{P} != 3306 ) {
$address .= ":3306";
redo;
}
next;
}
PTDEBUG && _d('Connected to', $dp->as_string($node_dsn));
$node_dbh->disconnect();
push @nodes, $make_cxn->(dsn => $node_dsn);
}
return \@nodes;
}
sub remove_duplicate_cxns {
my ($self, %args) = @_;
my @cxns = @{$args{cxns}};
my $seen_ids = $args{seen_ids};
return Cxn->remove_duplicate_cxns(%args);
} }
sub same_cluster { sub same_cluster {
@@ -7525,6 +7614,59 @@ sub same_cluster {
return ($cluster1 || '') eq ($cluster2 || ''); return ($cluster1 || '') eq ($cluster2 || '');
} }
sub autodetect_nodes {
my ($self, %args) = @_;
my $ms = $args{MasterSlave};
my $dp = $args{DSNParser};
my $make_cxn = $args{make_cxn};
my $nodes = $args{nodes};
my $seen_ids = $args{seen_ids};
my $new_nodes = [];
return $new_nodes unless @$nodes;
for my $node ( @$nodes ) {
my $nodes_found = $self->find_cluster_nodes(
dbh => $node->dbh(),
dsn => $node->dsn(),
make_cxn => $make_cxn,
DSNParser => $dp,
);
push @$new_nodes, @$nodes_found;
}
$new_nodes = $self->remove_duplicate_cxns(
cxns => $new_nodes,
seen_ids => $seen_ids
);
my $new_slaves = [];
foreach my $node (@$new_nodes) {
my $node_slaves = $ms->get_slaves(
dbh => $node->dbh(),
dsn => $node->dsn(),
make_cxn => $make_cxn,
);
push @$new_slaves, @$node_slaves;
}
$new_slaves = $self->remove_duplicate_cxns(
cxns => $new_slaves,
seen_ids => $seen_ids
);
my @new_slave_nodes = grep { $self->is_cluster_node($_) } @$new_slaves;
my $slaves_of_slaves = $self->autodetect_nodes(
%args,
nodes => \@new_slave_nodes,
);
my @autodetected_nodes = ( @$new_nodes, @$new_slaves, @$slaves_of_slaves );
return \@autodetected_nodes;
}
sub _d { sub _d {
my ($package, undef, $line) = caller 0; my ($package, undef, $line) = caller 0;
@_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; } @_ = map { (my $temp = $_) =~ s/\n/\n# /g; $temp; }
@@ -11255,6 +11397,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-online-schema-change 2.2.1 pt-online-schema-change 2.2.2
=cut =cut

View File

@@ -885,7 +885,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-pmp 2.2.1 pt-pmp 2.2.2
=cut =cut

View File

@@ -63,7 +63,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -10011,6 +10011,8 @@ sub get_slaves {
my $dp = $self->{DSNParser}; my $dp = $self->{DSNParser};
my $methods = $self->_resolve_recursion_methods($args{dsn}); my $methods = $self->_resolve_recursion_methods($args{dsn});
return $slaves unless @$methods;
if ( grep { m/processlist|hosts/i } @$methods ) { if ( grep { m/processlist|hosts/i } @$methods ) {
my @required_args = qw(dbh dsn); my @required_args = qw(dbh dsn);
foreach my $arg ( @required_args ) { foreach my $arg ( @required_args ) {
@@ -16082,6 +16084,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-query-digest 2.2.1 pt-query-digest 2.2.2
=cut =cut

View File

@@ -2396,6 +2396,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-show-grants 2.2.1 pt-show-grants 2.2.2
=cut =cut

View File

@@ -1233,7 +1233,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-sift 2.2.1 pt-sift 2.2.2
=cut =cut

View File

@@ -39,7 +39,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -1122,6 +1122,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;
@@ -1129,7 +1130,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
);
} }
{ {
@@ -1313,7 +1319,6 @@ sub meta {
return Lmo::Meta->new(class => $class); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -2750,6 +2755,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 = {
@@ -4824,6 +4831,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-slave-delay 2.2.1 pt-slave-delay 2.2.2
=cut =cut

View File

@@ -1102,6 +1102,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;
@@ -1109,7 +1110,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
);
} }
{ {
@@ -1293,7 +1299,6 @@ sub meta {
return Lmo::Meta->new(class => $class); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -2219,6 +2224,8 @@ sub get_slaves {
my $dp = $self->{DSNParser}; my $dp = $self->{DSNParser};
my $methods = $self->_resolve_recursion_methods($args{dsn}); my $methods = $self->_resolve_recursion_methods($args{dsn});
return $slaves unless @$methods;
if ( grep { m/processlist|hosts/i } @$methods ) { if ( grep { m/processlist|hosts/i } @$methods ) {
my @required_args = qw(dbh dsn); my @required_args = qw(dbh dsn);
foreach my $arg ( @required_args ) { foreach my $arg ( @required_args ) {
@@ -4317,6 +4324,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-slave-find 2.2.1 pt-slave-find 2.2.2
=cut =cut

View File

@@ -40,7 +40,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -1274,6 +1274,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;
@@ -1281,7 +1282,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
);
} }
{ {
@@ -1465,7 +1471,6 @@ sub meta {
return Lmo::Meta->new(class => $class); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -2585,6 +2590,8 @@ sub get_slaves {
my $dp = $self->{DSNParser}; my $dp = $self->{DSNParser};
my $methods = $self->_resolve_recursion_methods($args{dsn}); my $methods = $self->_resolve_recursion_methods($args{dsn});
return $slaves unless @$methods;
if ( grep { m/processlist|hosts/i } @$methods ) { if ( grep { m/processlist|hosts/i } @$methods ) {
my @required_args = qw(dbh dsn); my @required_args = qw(dbh dsn);
foreach my $arg ( @required_args ) { foreach my $arg ( @required_args ) {
@@ -5766,6 +5773,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-slave-restart 2.2.1 pt-slave-restart 2.2.2
=cut =cut

View File

@@ -2201,7 +2201,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-stalk 2.2.1 pt-stalk 2.2.2
=cut =cut

View File

@@ -2682,7 +2682,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-summary 2.2.1 pt-summary 2.2.2
=cut =cut

View File

@@ -56,7 +56,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -12385,6 +12385,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-table-checksum 2.2.1 pt-table-checksum 2.2.2
=cut =cut

View File

@@ -54,7 +54,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -1137,6 +1137,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;
@@ -1144,7 +1145,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
);
} }
{ {
@@ -1328,7 +1334,6 @@ sub meta {
return Lmo::Meta->new(class => $class); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -6526,6 +6531,8 @@ sub get_slaves {
my $dp = $self->{DSNParser}; my $dp = $self->{DSNParser};
my $methods = $self->_resolve_recursion_methods($args{dsn}); my $methods = $self->_resolve_recursion_methods($args{dsn});
return $slaves unless @$methods;
if ( grep { m/processlist|hosts/i } @$methods ) { if ( grep { m/processlist|hosts/i } @$methods ) {
my @required_args = qw(dbh dsn); my @required_args = qw(dbh dsn);
foreach my $arg ( @required_args ) { foreach my $arg ( @required_args ) {
@@ -8237,6 +8244,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 = {
@@ -12616,6 +12625,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-table-sync 2.2.1 pt-table-sync 2.2.2
=cut =cut

View File

@@ -7512,6 +7512,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-table-usage 2.2.1 pt-table-usage 2.2.2
=cut =cut

View File

@@ -60,7 +60,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -2500,6 +2500,32 @@ sub name {
return $self->{hostname} || $self->{dsn_name} || 'unknown host'; return $self->{hostname} || $self->{dsn_name} || 'unknown host';
} }
sub remove_duplicate_cxns {
my ($self, %args) = @_;
my @cxns = @{$args{cxns}};
my $seen_ids = $args{seen_ids} || {};
PTDEBUG && _d("Removing duplicates from ", join(" ", map { $_->name } @cxns));
my @trimmed_cxns;
for my $cxn ( @cxns ) {
my $dbh = $cxn->dbh();
my $sql = q{SELECT @@server_id};
PTDEBUG && _d($sql);
my ($id) = $dbh->selectrow_array($sql);
PTDEBUG && _d('Server ID for ', $cxn->name, ': ', $id);
if ( ! $seen_ids->{$id}++ ) {
push @trimmed_cxns, $cxn
}
else {
PTDEBUG && _d("Removing ", $cxn->name,
", ID ", $id, ", because we've already seen it");
}
}
return \@trimmed_cxns;
}
sub DESTROY { sub DESTROY {
my ($self) = @_; my ($self) = @_;
@@ -11142,6 +11168,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-upgrade 2.2.1 pt-upgrade 2.2.2
=cut =cut

View File

@@ -43,7 +43,7 @@ BEGIN {
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }
@@ -1126,6 +1126,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;
@@ -1133,7 +1134,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
);
} }
{ {
@@ -1317,7 +1323,6 @@ sub meta {
return Lmo::Meta->new(class => $class); return Lmo::Meta->new(class => $class);
} }
1; 1;
} }
# ########################################################################### # ###########################################################################
@@ -6094,6 +6099,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-variable-advisor 2.2.1 pt-variable-advisor 2.2.2
=cut =cut

View File

@@ -3233,6 +3233,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
pt-visual-explain 2.2.1 pt-visual-explain 2.2.2
=cut =cut

View File

@@ -1,3 +1,20 @@
percona-toolkit (2.2.2) unstable; urgency=low
* Restored --show-all in pt-query-digest
* Cluster nodes can now be autodiscovered in pt-table-checksum
* Fixed bug 1127450: pt-archiver --charset and --bulk-insert fail, may corrupt data
* Fixed bug 1082406: An explicitly set wsrep_node_incoming_address may make SHOW STATUS LIKE 'wsrep_incoming_addresses' return a portless address
* Fixed bug 1099845: pt-table-checksum pxc same_node function incorrectly uses wsrep_sst_receive_address
* Fixed bug 1156901: pt-query-digest --processlist: Duplicate entries for replication thread
* Fixed bug 1160338: pt-query-digest 2.2 prints unwanted debug info on tcpdump parsing errors
* Fixed bug 1160918: pt-query-digest 2.2 prints too many string values
* Fixed bug 1163372: pt-heartbeat --utc --check always returns 0
* Fixed bug 821502: Some tools don't have --help or --version
* Fixed bug 947893: Tools use @@hostname without /*!50038*/
* Fixed bug 1156867: pt-stalk prints the wrong variable name in verbose mode when --function is used
-- Percona Toolkit Developers <toolkit-dev@percona.com> Fri, 19 Apr 2013 23:23:00 +0000
percona-toolkit (2.2.1) unstable; urgency=low percona-toolkit (2.2.1) unstable; urgency=low
* Official support for MySQL 5.6 * Official support for MySQL 5.6

View File

@@ -50,7 +50,7 @@ copyright = u'2013, Percona Ireland Ltd'
# The short X.Y version. # The short X.Y version.
version = '2.2' version = '2.2'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = '2.2.1' release = '2.2.2'
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.

View File

@@ -558,6 +558,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
=head1 VERSION =head1 VERSION
Percona Toolkit v2.2.1 released 2013-03-14 Percona Toolkit v2.2.2 released 2013-04-19
=cut =cut

View File

@@ -1,6 +1,60 @@
Release Notes Release Notes
************* *************
v2.2.2 released 2013-04-19
==========================
Percona Toolkit 2.2.2 has been released. This is the second release
of the 2.2 series, and aims to fix bugs in the previous release and
provide usability enhacements to the toolkit.
Users may note the revival of the --show-all option in
pt-query-digest. This had been removed in 2.2.1, but resulted in
the tool's output bloating considerably.
Meanwhile, pt-table-checksum got a usability enhancement, in the form
of --recursion-method=cluster, which will attempt to autodiscover
cluster nodes, alleviating the need to specify a dsns table.
The following highlights some of the more interesting and "hot" bugs
in this release:
* Bug #1127450: pt-archiver --charset and --bulk-insert fail, may corrupt data
pt-archiver --bulk-insert didn't work with --charset UTF-8. This
revealed a case where the toolkit could corrupt data. This should
now be fixed, but like other UTF-8-related operations, remains
relatively dangerous if using DBD::mysql 3.0007.
* Bug #1163372: pt-heartbeat --utc --check always returns 0
This makes --check and --utc useful. Older releases may be able to
work around this issue by calling the tool with --set-vars "time_zone='+0:00'"
* Bug #821502: Some tools don't have --help or --version
pt-align, pt-mext, pt-pmp and pt-sift now have both options.
This is another solid bug fix release, and all users are encouraged to upgrade.
Percona Toolkit packages can be downloaded from http://www.percona.com/downloads/percona-toolkit/ or the Percona Software Repositories (http://www.percona.com/software/repositories/).
Changelog
---------
* Restored --show-all in pt-query-digest
* Cluster nodes can now be autodiscovered in pt-table-checksum
* Fixed bug 1127450: pt-archiver --charset and --bulk-insert fail, may corrupt data
* Fixed bug 1082406: An explicitly set wsrep_node_incoming_address may make SHOW STATUS LIKE 'wsrep_incoming_addresses' return a portless address
* Fixed bug 1099845: pt-table-checksum pxc same_node function incorrectly uses wsrep_sst_receive_address
* Fixed bug 1156901: pt-query-digest --processlist: Duplicate entries for replication thread
* Fixed bug 1160338: pt-query-digest 2.2 prints unwanted debug info on tcpdump parsing errors
* Fixed bug 1160918: pt-query-digest 2.2 prints too many string values
* Fixed bug 1163372: pt-heartbeat --utc --check always returns 0
* Fixed bug 821502: Some tools don't have --help or --version
* Fixed bug 947893: Tools use @@hostname without /*!50038*/
* Fixed bug 1156867: pt-stalk prints the wrong variable name in verbose mode when --function is used
v2.2.1 released 2013-03-14 v2.2.1 released 2013-03-14
========================== ==========================

View File

@@ -19,7 +19,7 @@
# ########################################################################### # ###########################################################################
{ {
package Percona::Toolkit; package Percona::Toolkit;
our $VERSION = '2.2.1'; our $VERSION = '2.2.2';
1; 1;
} }