Fix --progress.

This commit is contained in:
Daniel Nichter
2013-03-11 17:38:42 -06:00
parent d66be7558a
commit 51af4bde2f
5 changed files with 126 additions and 35 deletions

View File

@@ -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 ) {

View File

@@ -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});
}

View File

@@ -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 });
}

View File

@@ -11,6 +11,7 @@ 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;
@@ -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;

View File

@@ -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;