mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-16 16:23:30 +00:00
Fix --progress.
This commit is contained in:
@@ -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 ) {
|
||||
|
@@ -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});
|
||||
}
|
||||
|
||||
|
@@ -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 });
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user