From 28894c3f1e61cdba430abb092b46bc2e751bc00b Mon Sep 17 00:00:00 2001 From: Brian Fraser Date: Thu, 19 Jul 2012 11:06:17 -0300 Subject: [PATCH] Processlist.pm: parse_event assumed that STATE couldn't be NULL. Probably an oversight, since the rest of the library already dealt with that by treating it as an empty string. --- bin/pt-kill | 4 ++-- bin/pt-query-digest | 4 ++-- lib/Processlist.pm | 4 ++-- t/lib/Processlist.t | 30 +++++++++++++++++++++++++++++- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/bin/pt-kill b/bin/pt-kill index b8e9c094..a7955824 100755 --- a/bin/pt-kill +++ b/bin/pt-kill @@ -2222,7 +2222,7 @@ sub parse_event { int($query_start), # START $etime, # ETIME $time, # FSEEN - { $curr->[STATE] => 0 }, # PROFILE + { ($curr->[STATE] || "") => 0 }, # PROFILE ]; } } @@ -2236,7 +2236,7 @@ sub parse_event { int($query_start), # START $etime, # ETIME $time, # FSEEN - { $curr->[STATE] => 0 }, # PROFILE + { ($curr->[STATE] || "") => 0 }, # PROFILE ]; } } diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 0ee91569..f5351b1c 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -2398,7 +2398,7 @@ sub parse_event { int($query_start), # START $etime, # ETIME $time, # FSEEN - { $curr->[STATE] => 0 }, # PROFILE + { ($curr->[STATE] || "") => 0 }, # PROFILE ]; } } @@ -2412,7 +2412,7 @@ sub parse_event { int($query_start), # START $etime, # ETIME $time, # FSEEN - { $curr->[STATE] => 0 }, # PROFILE + { ($curr->[STATE] || "") => 0 }, # PROFILE ]; } } diff --git a/lib/Processlist.pm b/lib/Processlist.pm index a4c40d3c..9b70f4bd 100644 --- a/lib/Processlist.pm +++ b/lib/Processlist.pm @@ -278,7 +278,7 @@ sub parse_event { int($query_start), # START $etime, # ETIME $time, # FSEEN - { $curr->[STATE] => 0 }, # PROFILE + { ($curr->[STATE] || "") => 0 }, # PROFILE ]; } } @@ -293,7 +293,7 @@ sub parse_event { int($query_start), # START $etime, # ETIME $time, # FSEEN - { $curr->[STATE] => 0 }, # PROFILE + { ($curr->[STATE] || "") => 0 }, # PROFILE ]; } } diff --git a/t/lib/Processlist.t b/t/lib/Processlist.t index 7114d807..ec81eff6 100644 --- a/t/lib/Processlist.t +++ b/t/lib/Processlist.t @@ -9,7 +9,7 @@ BEGIN { use strict; use warnings FATAL => 'all'; use English qw(-no_match_vars); -use Test::More tests => 34; +use Test::More tests => 35; use Processlist; use PerconaTest; @@ -860,6 +860,34 @@ eval { $pl->find([$proc], %find_spec) }; ok !$@, "Bug 923896: NULL Time in processlist doesn't fail for idle_time+Command=Sleep"; +# ############################################################################# +# NULL STATE doesn't generate warnings +# https://bugs.launchpad.net/percona-toolkit/+bug/821703 +# ############################################################################# + +$procs = [ + [ [1, 'unauthenticated user', 'localhost', undef, 'Connect', 7, + 'some state', 1] ], + [ [1, 'unauthenticated user', 'localhost', undef, 'Connect', 8, + undef, 2] ], +], + +eval { + parse_n_times( + 2, + code => sub { + return shift @$procs; + }, + time => Transformers::unix_timestamp('2001-01-01 00:05:00'), + ); +}; + +is( + $EVAL_ERROR, + '', + "NULL STATE shouldn't cause warnings" +); + # ############################################################################# # Done. # #############################################################################