mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-10-20 09:40:38 +00:00
Don't crash if group by attrib is empty string.
This commit is contained in:
@@ -5453,7 +5453,7 @@ sub _calc_metrics {
|
|||||||
sub metrics {
|
sub metrics {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(attrib where) ) {
|
foreach my $arg ( qw(attrib where) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $attrib = $args{attrib};
|
my $attrib = $args{attrib};
|
||||||
my $where = $args{where};
|
my $where = $args{where};
|
||||||
@@ -6365,7 +6365,7 @@ sub files {
|
|||||||
sub header {
|
sub header {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(ea orderby) ) {
|
foreach my $arg ( qw(ea orderby) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $ea = $args{ea};
|
my $ea = $args{ea};
|
||||||
my $orderby = $args{orderby};
|
my $orderby = $args{orderby};
|
||||||
@@ -6594,7 +6594,7 @@ sub query_report {
|
|||||||
sub event_report {
|
sub event_report {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(ea item orderby) ) {
|
foreach my $arg ( qw(ea item orderby) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $ea = $args{ea};
|
my $ea = $args{ea};
|
||||||
my $item = $args{item};
|
my $item = $args{item};
|
||||||
@@ -6765,7 +6765,7 @@ sub event_report {
|
|||||||
sub chart_distro {
|
sub chart_distro {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(ea item attrib) ) {
|
foreach my $arg ( qw(ea item attrib) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $ea = $args{ea};
|
my $ea = $args{ea};
|
||||||
my $item = $args{item};
|
my $item = $args{item};
|
||||||
@@ -6814,7 +6814,7 @@ sub chart_distro {
|
|||||||
sub distro_sparkline {
|
sub distro_sparkline {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(ea item attrib) ) {
|
foreach my $arg ( qw(ea item attrib) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $ea = $args{ea};
|
my $ea = $args{ea};
|
||||||
my $item = $args{item};
|
my $item = $args{item};
|
||||||
|
@@ -764,7 +764,7 @@ sub _calc_metrics {
|
|||||||
sub metrics {
|
sub metrics {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(attrib where) ) {
|
foreach my $arg ( qw(attrib where) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $attrib = $args{attrib};
|
my $attrib = $args{attrib};
|
||||||
my $where = $args{where};
|
my $where = $args{where};
|
||||||
|
@@ -209,7 +209,7 @@ sub files {
|
|||||||
sub header {
|
sub header {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(ea orderby) ) {
|
foreach my $arg ( qw(ea orderby) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $ea = $args{ea};
|
my $ea = $args{ea};
|
||||||
my $orderby = $args{orderby};
|
my $orderby = $args{orderby};
|
||||||
@@ -489,7 +489,7 @@ sub query_report {
|
|||||||
sub event_report {
|
sub event_report {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(ea item orderby) ) {
|
foreach my $arg ( qw(ea item orderby) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $ea = $args{ea};
|
my $ea = $args{ea};
|
||||||
my $item = $args{item};
|
my $item = $args{item};
|
||||||
@@ -686,7 +686,7 @@ sub event_report {
|
|||||||
sub chart_distro {
|
sub chart_distro {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(ea item attrib) ) {
|
foreach my $arg ( qw(ea item attrib) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $ea = $args{ea};
|
my $ea = $args{ea};
|
||||||
my $item = $args{item};
|
my $item = $args{item};
|
||||||
@@ -765,7 +765,7 @@ sub chart_distro {
|
|||||||
sub distro_sparkline {
|
sub distro_sparkline {
|
||||||
my ( $self, %args ) = @_;
|
my ( $self, %args ) = @_;
|
||||||
foreach my $arg ( qw(ea item attrib) ) {
|
foreach my $arg ( qw(ea item attrib) ) {
|
||||||
die "I need a $arg argument" unless $args{$arg};
|
die "I need a $arg argument" unless defined $args{$arg};
|
||||||
}
|
}
|
||||||
my $ea = $args{ea};
|
my $ea = $args{ea};
|
||||||
my $item = $args{item};
|
my $item = $args{item};
|
||||||
|
@@ -9,7 +9,7 @@ BEGIN {
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings FATAL => 'all';
|
use warnings FATAL => 'all';
|
||||||
use English qw(-no_match_vars);
|
use English qw(-no_match_vars);
|
||||||
use Test::More tests => 81;
|
use Test::More tests => 82;
|
||||||
|
|
||||||
use QueryRewriter;
|
use QueryRewriter;
|
||||||
use EventAggregator;
|
use EventAggregator;
|
||||||
@@ -1924,6 +1924,21 @@ is(
|
|||||||
"Parse InnoDB_trx_id as string"
|
"Parse InnoDB_trx_id as string"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
# #############################################################################
|
||||||
|
# Bug 924950: pt-query-digest --group-by db may crash profile report
|
||||||
|
# #############################################################################
|
||||||
|
$ea = new EventAggregator(
|
||||||
|
groupby => 'Schema',
|
||||||
|
worst => 'Query_time',
|
||||||
|
);
|
||||||
|
parse_file('t/lib/samples/slowlogs/slow055.txt', $p, $ea);
|
||||||
|
my $m = $ea->metrics(where => '', attrib => 'Query_time');
|
||||||
|
is(
|
||||||
|
$m->{cnt},
|
||||||
|
3,
|
||||||
|
"Metrics for '' attrib (bug 924950)"
|
||||||
|
);
|
||||||
|
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
# Done.
|
# Done.
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
|
15
t/lib/samples/slowlogs/slow055.txt
Normal file
15
t/lib/samples/slowlogs/slow055.txt
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# User@Host: meow[meow] @ [1.2.3.8]
|
||||||
|
# Thread_id: 5 Schema:
|
||||||
|
# Query_time: 0.000002 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
|
||||||
|
# No InnoDB statistics available for this query
|
||||||
|
# administrator command: Quit;
|
||||||
|
# User@Host: meow[meow] @ [1.2.3.8]
|
||||||
|
# Thread_id: 6 Schema:
|
||||||
|
# Query_time: 0.000899 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
|
||||||
|
# No InnoDB statistics available for this query
|
||||||
|
SET NAMES utf8;
|
||||||
|
# User@Host: meow[meow] @ [1.2.3.8]
|
||||||
|
# Thread_id: 6 Schema:
|
||||||
|
# Query_time: 0.018799 Lock_time: 0.009453 Rows_sent: 0 Rows_examined: 0
|
||||||
|
# No InnoDB statistics available for this query
|
||||||
|
SELECT MIN(id),MAX(id) FROM tbl;
|
30
t/pt-query-digest/samples/slow055.txt
Normal file
30
t/pt-query-digest/samples/slow055.txt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
|
||||||
|
# ########################################################################
|
||||||
|
# Report grouped by db
|
||||||
|
# ########################################################################
|
||||||
|
|
||||||
|
# Item 1: 0 QPS, 0x concurrency, ID 0xE9800998ECF8427E at byte 420 _______
|
||||||
|
# This item is included in the report because it matches --limit.
|
||||||
|
# Scores: Apdex = 1.00 [1.0]*, V/M = 0.01
|
||||||
|
# Query_time sparkline: |^ ^ ^ |
|
||||||
|
# Attribute pct total min max avg 95% stddev median
|
||||||
|
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||||
|
# Count 100 3
|
||||||
|
# Exec time 100 20ms 2us 19ms 7ms 18ms 8ms 881us
|
||||||
|
# Lock time 100 9ms 0 9ms 3ms 9ms 4ms 0
|
||||||
|
# Rows sent 0 0 0 0 0 0 0 0
|
||||||
|
# Rows examine 0 0 0 0 0 0 0 0
|
||||||
|
# Query size 100 72 14 31 24 30.19 6.95 26.08
|
||||||
|
# String:
|
||||||
|
# Hosts
|
||||||
|
# Users meow
|
||||||
|
# Query_time distribution
|
||||||
|
# 1us ################################################################
|
||||||
|
# 10us
|
||||||
|
# 100us ################################################################
|
||||||
|
# 1ms
|
||||||
|
# 10ms ################################################################
|
||||||
|
# 100ms
|
||||||
|
# 1s
|
||||||
|
# 10s+
|
||||||
|
|
@@ -9,7 +9,7 @@ BEGIN {
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings FATAL => 'all';
|
use warnings FATAL => 'all';
|
||||||
use English qw(-no_match_vars);
|
use English qw(-no_match_vars);
|
||||||
use Test::More tests => 43;
|
use Test::More tests => 44;
|
||||||
|
|
||||||
use PerconaTest;
|
use PerconaTest;
|
||||||
|
|
||||||
@@ -433,6 +433,18 @@ ok(
|
|||||||
'Analysis for slow054 (InnoDB_trx_id bug 821694)'
|
'Analysis for slow054 (InnoDB_trx_id bug 821694)'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
# #############################################################################
|
||||||
|
# Bug 924950: pt-query-digest --group-by db may crash profile report
|
||||||
|
# #############################################################################
|
||||||
|
ok(
|
||||||
|
no_diff(
|
||||||
|
sub { pt_query_digest::main(@args, $sample.'slow055.txt',
|
||||||
|
qw(--group-by db)) },
|
||||||
|
"t/pt-query-digest/samples/slow055.txt",
|
||||||
|
),
|
||||||
|
'Analysis for slow055 (group by blank db bug 924950)'
|
||||||
|
);
|
||||||
|
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
# Done.
|
# Done.
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
|
Reference in New Issue
Block a user