From 51af4bde2f0cf759536e9840bae2cdc11901960c Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Mon, 11 Mar 2013 17:38:42 -0600 Subject: [PATCH] Fix --progress. --- bin/pt-upgrade | 62 +++++++++++++++++++++++-------------- lib/QueryIterator.pm | 21 +++++++++++-- lib/ResultIterator.pm | 19 +++++++++++- t/pt-upgrade/run_time.t | 58 +++++++++++++++++++++++++++++----- t/pt-upgrade/save_results.t | 1 + 5 files changed, 126 insertions(+), 35 deletions(-) diff --git a/bin/pt-upgrade b/bin/pt-upgrade index 9e43d4a1..9ba4214e 100755 --- a/bin/pt-upgrade +++ b/bin/pt-upgrade @@ -5145,12 +5145,19 @@ has 'read_timeout' => ( has 'progress' => ( is => 'ro', - isa => 'Maybe[Object]', + isa => 'Maybe[Str]', required => 0, default => sub { return }, ); +has '_progress' => ( + is => 'rw', + isa => 'Maybe[Object]', + required => 0, + default => sub { return }, +); + has 'stats' => ( is => 'ro', isa => 'HashRef', @@ -5252,6 +5259,16 @@ sub next { return $offset; # legacy: return global $offset }; + my $_progress; + if ( my $spec = $self->progress ) { + $_progress = new Progress( + jobsize => $file_size, + spec => $spec, + name => $file_name, + ); + } + $self->_progress($_progress); + $self->_parser_args($parser_args); } @@ -5262,7 +5279,7 @@ sub next { ) { $self->stats->{queries_read}++; - if ( my $pr = $self->progress ) { + if ( my $pr = $self->_progress ) { $pr->update($self->_parser_args->{tell}); } @@ -6183,6 +6200,13 @@ has 'dir' => ( has 'progress' => ( is => 'ro', + isa => 'Maybe[Str]', + required => 0, + default => sub { return }, +); + +has '_progress' => ( + is => 'rw', isa => 'Maybe[Object]', required => 0, default => sub { return }, @@ -6228,11 +6252,21 @@ sub BUILDARGS { open my $_rows_fh, '<', $rows_file or die "Cannot open $rows_file for writing: $OS_ERROR"; + my $_progress; + if ( my $spec = $args->{progress} ) { + $_progress = new Progress( + jobsize => -s $query_file, + spec => $spec, + name => $query_file, + ); + } + my $self = { %$args, _query_fh => $_query_fh, _results_fh => $_results_fh, _rows_fh => $_rows_fh, + _progress => $_progress, }; return $self; @@ -6280,7 +6314,7 @@ sub next { $results->{query} = $query; $results->{rows} = $rows; - if ( my $pr = $self->progress ) { + if ( my $pr = $self->_progress ) { $pr->update(sub { tell $_query_fh }); } @@ -9267,26 +9301,6 @@ sub main { now => sub { return time }, ); - my $progress; - if ( my $spec = $o->get('progress') ) { - my $jobsize = 0; - if ( scalar @logs ) { - foreach my $file ( @logs ) { - $jobsize += -s $file if -f $file; - } - } - elsif ( $results_dir ) { - $jobsize = -s "$results_dir/query"; - } - PTDEBUG && _d('Job size:', $jobsize); - $progress = new Progress( - jobsize => $jobsize, - spec => $spec, - name => (@logs && $results_dir ? 'Saving results' - : 'Executing queries'), - ); - } - my %optional_args = ( dry_run => $o->get('dry-run'), database => $o->get('database'), @@ -9295,7 +9309,7 @@ sub main { read_only => $o->get('read-only') ? 1 : 0, read_timeout => $o->get('read-timeout'), allowed_errors => $o->get('continue-on-error') ? 100 : 0, - progress => $progress, + progress => $o->get('progress'), ); if ( $host1 && $host2 ) { diff --git a/lib/QueryIterator.pm b/lib/QueryIterator.pm index 33fd396f..34a4c2d5 100644 --- a/lib/QueryIterator.pm +++ b/lib/QueryIterator.pm @@ -84,7 +84,7 @@ has 'read_timeout' => ( has 'progress' => ( is => 'ro', - isa => 'Maybe[Object]', + isa => 'Maybe[Str]', required => 0, default => sub { return }, ); @@ -93,6 +93,13 @@ has 'progress' => ( # Private ## +has '_progress' => ( + is => 'rw', + isa => 'Maybe[Object]', + required => 0, + default => sub { return }, +); + has 'stats' => ( is => 'ro', isa => 'HashRef', @@ -194,6 +201,16 @@ sub next { return $offset; # legacy: return global $offset }; + my $_progress; + if ( my $spec = $self->progress ) { + $_progress = new Progress( + jobsize => $file_size, + spec => $spec, + name => $file_name, + ); + } + $self->_progress($_progress); + $self->_parser_args($parser_args); } @@ -204,7 +221,7 @@ sub next { ) { $self->stats->{queries_read}++; - if ( my $pr = $self->progress ) { + if ( my $pr = $self->_progress ) { $pr->update($self->_parser_args->{tell}); } diff --git a/lib/ResultIterator.pm b/lib/ResultIterator.pm index 68d3ea0f..b30e211b 100644 --- a/lib/ResultIterator.pm +++ b/lib/ResultIterator.pm @@ -37,6 +37,13 @@ has 'dir' => ( has 'progress' => ( is => 'ro', + isa => 'Maybe[Str]', + required => 0, + default => sub { return }, +); + +has '_progress' => ( + is => 'rw', isa => 'Maybe[Object]', required => 0, default => sub { return }, @@ -82,11 +89,21 @@ sub BUILDARGS { open my $_rows_fh, '<', $rows_file or die "Cannot open $rows_file for writing: $OS_ERROR"; + my $_progress; + if ( my $spec = $args->{progress} ) { + $_progress = new Progress( + jobsize => -s $query_file, + spec => $spec, + name => $query_file, + ); + } + my $self = { %$args, _query_fh => $_query_fh, _results_fh => $_results_fh, _rows_fh => $_rows_fh, + _progress => $_progress, }; return $self; @@ -134,7 +151,7 @@ sub next { $results->{query} = $query; $results->{rows} = $rows; - if ( my $pr = $self->progress ) { + if ( my $pr = $self->_progress ) { $pr->update(sub { tell $_query_fh }); } diff --git a/t/pt-upgrade/run_time.t b/t/pt-upgrade/run_time.t index 9a68c21c..8d1e65f5 100644 --- a/t/pt-upgrade/run_time.t +++ b/t/pt-upgrade/run_time.t @@ -11,7 +11,8 @@ use warnings FATAL => 'all'; use English qw(-no_match_vars); use Test::More; use Time::HiRes qw(time); - +use File::Temp qw(tempdir); + $ENV{PERCONA_TOOLKIT_TEST_USE_DSN_NAMES} = 1; use PerconaTest; @@ -19,7 +20,7 @@ use Sandbox; require "$trunk/bin/pt-upgrade"; # This runs immediately if the server is already running, else it starts it. -#diag(`$trunk/sandbox/start-sandbox master 12348 >/dev/null`); +diag(`$trunk/sandbox/start-sandbox master 12348 >/dev/null`); my $dp = new DSNParser(opts=>$dsn_opts); my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp); @@ -35,10 +36,15 @@ elsif ( !$dbh2 ) { my $host1_dsn = $sb->dsn_for('host1'); my $host2_dsn = $sb->dsn_for('host2'); +my $tmpdir = tempdir("/tmp/pt-upgrade.$PID.XXXXXX", CLEANUP => 1); my $samples = "$trunk/t/pt-upgrade/samples"; my $exit_status = 0; my $output; +# ############################################################################# +# Executing queries +# ############################################################################# + my $t0 = time; $output = output( @@ -54,20 +60,56 @@ my $t = time - $t0; ok( $t >= 3 && $t <= 6, - "Ran for roughly --run-time seconds" + "Exec queries: ran for roughly --run-time seconds" ) or diag($output, 'Actual run time:', $t); # Exit status 8 = --run-time expired (an no other errors/problems) is( $exit_status, 8, - "Exit status 8" + "Exec queries: exit status 8" ) or diag($output); like( $output, - qr/Executing queries.+?remain/, - "--progress while executing queries" + qr/slow_slow.log.+?remain/, + "Exec queries: --progress" +); + +# ############################################################################# +# Saving results +# ############################################################################# + +$t0 = time; + +$output = output( + sub { + $exit_status = pt_upgrade::main($host1_dsn, + '--save-results', $tmpdir, + "$samples/slow_slow.log", qw(--run-time 3), + '--progress', 'time,1', + )}, + stderr => 1, +); + +$t = time - $t0; + +ok( + $t >= 3 && $t <= 6, + "Save results: ran for roughly --run-time seconds" +) or diag($output, 'Actual run time:', $t); + +# Exit status 8 = --run-time expired (an no other errors/problems) +is( + $exit_status, + 8, + "Save results: exit status 8" +) or diag($output); + +like( + $output, + qr/slow_slow.log.+?remain/, + "Save results: --progress" ); # ############################################################################# @@ -75,6 +117,6 @@ like( # ############################################################################# #$sb->wipe_clean($dbh2); $sb->wipe_clean($dbh1); -#diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`); -#ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox"); +diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`); +ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox"); done_testing; diff --git a/t/pt-upgrade/save_results.t b/t/pt-upgrade/save_results.t index 73cc597e..b855d977 100644 --- a/t/pt-upgrade/save_results.t +++ b/t/pt-upgrade/save_results.t @@ -105,5 +105,6 @@ close $dh; # Done. # ############################################################################# $sb->wipe_clean($dbh1); +diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`); ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox"); done_testing;