mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-17 00:47:44 +00:00
Fix --progress.
This commit is contained in:
@@ -5145,12 +5145,19 @@ has 'read_timeout' => (
|
|||||||
|
|
||||||
has 'progress' => (
|
has 'progress' => (
|
||||||
is => 'ro',
|
is => 'ro',
|
||||||
isa => 'Maybe[Object]',
|
isa => 'Maybe[Str]',
|
||||||
required => 0,
|
required => 0,
|
||||||
default => sub { return },
|
default => sub { return },
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
has '_progress' => (
|
||||||
|
is => 'rw',
|
||||||
|
isa => 'Maybe[Object]',
|
||||||
|
required => 0,
|
||||||
|
default => sub { return },
|
||||||
|
);
|
||||||
|
|
||||||
has 'stats' => (
|
has 'stats' => (
|
||||||
is => 'ro',
|
is => 'ro',
|
||||||
isa => 'HashRef',
|
isa => 'HashRef',
|
||||||
@@ -5252,6 +5259,16 @@ sub next {
|
|||||||
return $offset; # legacy: return global $offset
|
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);
|
$self->_parser_args($parser_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5262,7 +5279,7 @@ sub next {
|
|||||||
) {
|
) {
|
||||||
$self->stats->{queries_read}++;
|
$self->stats->{queries_read}++;
|
||||||
|
|
||||||
if ( my $pr = $self->progress ) {
|
if ( my $pr = $self->_progress ) {
|
||||||
$pr->update($self->_parser_args->{tell});
|
$pr->update($self->_parser_args->{tell});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6183,6 +6200,13 @@ has 'dir' => (
|
|||||||
|
|
||||||
has 'progress' => (
|
has 'progress' => (
|
||||||
is => 'ro',
|
is => 'ro',
|
||||||
|
isa => 'Maybe[Str]',
|
||||||
|
required => 0,
|
||||||
|
default => sub { return },
|
||||||
|
);
|
||||||
|
|
||||||
|
has '_progress' => (
|
||||||
|
is => 'rw',
|
||||||
isa => 'Maybe[Object]',
|
isa => 'Maybe[Object]',
|
||||||
required => 0,
|
required => 0,
|
||||||
default => sub { return },
|
default => sub { return },
|
||||||
@@ -6228,11 +6252,21 @@ sub BUILDARGS {
|
|||||||
open my $_rows_fh, '<', $rows_file
|
open my $_rows_fh, '<', $rows_file
|
||||||
or die "Cannot open $rows_file for writing: $OS_ERROR";
|
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 = {
|
my $self = {
|
||||||
%$args,
|
%$args,
|
||||||
_query_fh => $_query_fh,
|
_query_fh => $_query_fh,
|
||||||
_results_fh => $_results_fh,
|
_results_fh => $_results_fh,
|
||||||
_rows_fh => $_rows_fh,
|
_rows_fh => $_rows_fh,
|
||||||
|
_progress => $_progress,
|
||||||
};
|
};
|
||||||
|
|
||||||
return $self;
|
return $self;
|
||||||
@@ -6280,7 +6314,7 @@ sub next {
|
|||||||
$results->{query} = $query;
|
$results->{query} = $query;
|
||||||
$results->{rows} = $rows;
|
$results->{rows} = $rows;
|
||||||
|
|
||||||
if ( my $pr = $self->progress ) {
|
if ( my $pr = $self->_progress ) {
|
||||||
$pr->update(sub { tell $_query_fh });
|
$pr->update(sub { tell $_query_fh });
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9267,26 +9301,6 @@ sub main {
|
|||||||
now => sub { return time },
|
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 = (
|
my %optional_args = (
|
||||||
dry_run => $o->get('dry-run'),
|
dry_run => $o->get('dry-run'),
|
||||||
database => $o->get('database'),
|
database => $o->get('database'),
|
||||||
@@ -9295,7 +9309,7 @@ sub main {
|
|||||||
read_only => $o->get('read-only') ? 1 : 0,
|
read_only => $o->get('read-only') ? 1 : 0,
|
||||||
read_timeout => $o->get('read-timeout'),
|
read_timeout => $o->get('read-timeout'),
|
||||||
allowed_errors => $o->get('continue-on-error') ? 100 : 0,
|
allowed_errors => $o->get('continue-on-error') ? 100 : 0,
|
||||||
progress => $progress,
|
progress => $o->get('progress'),
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( $host1 && $host2 ) {
|
if ( $host1 && $host2 ) {
|
||||||
|
@@ -84,7 +84,7 @@ has 'read_timeout' => (
|
|||||||
|
|
||||||
has 'progress' => (
|
has 'progress' => (
|
||||||
is => 'ro',
|
is => 'ro',
|
||||||
isa => 'Maybe[Object]',
|
isa => 'Maybe[Str]',
|
||||||
required => 0,
|
required => 0,
|
||||||
default => sub { return },
|
default => sub { return },
|
||||||
);
|
);
|
||||||
@@ -93,6 +93,13 @@ has 'progress' => (
|
|||||||
# Private
|
# Private
|
||||||
##
|
##
|
||||||
|
|
||||||
|
has '_progress' => (
|
||||||
|
is => 'rw',
|
||||||
|
isa => 'Maybe[Object]',
|
||||||
|
required => 0,
|
||||||
|
default => sub { return },
|
||||||
|
);
|
||||||
|
|
||||||
has 'stats' => (
|
has 'stats' => (
|
||||||
is => 'ro',
|
is => 'ro',
|
||||||
isa => 'HashRef',
|
isa => 'HashRef',
|
||||||
@@ -194,6 +201,16 @@ sub next {
|
|||||||
return $offset; # legacy: return global $offset
|
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);
|
$self->_parser_args($parser_args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +221,7 @@ sub next {
|
|||||||
) {
|
) {
|
||||||
$self->stats->{queries_read}++;
|
$self->stats->{queries_read}++;
|
||||||
|
|
||||||
if ( my $pr = $self->progress ) {
|
if ( my $pr = $self->_progress ) {
|
||||||
$pr->update($self->_parser_args->{tell});
|
$pr->update($self->_parser_args->{tell});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -37,6 +37,13 @@ has 'dir' => (
|
|||||||
|
|
||||||
has 'progress' => (
|
has 'progress' => (
|
||||||
is => 'ro',
|
is => 'ro',
|
||||||
|
isa => 'Maybe[Str]',
|
||||||
|
required => 0,
|
||||||
|
default => sub { return },
|
||||||
|
);
|
||||||
|
|
||||||
|
has '_progress' => (
|
||||||
|
is => 'rw',
|
||||||
isa => 'Maybe[Object]',
|
isa => 'Maybe[Object]',
|
||||||
required => 0,
|
required => 0,
|
||||||
default => sub { return },
|
default => sub { return },
|
||||||
@@ -82,11 +89,21 @@ sub BUILDARGS {
|
|||||||
open my $_rows_fh, '<', $rows_file
|
open my $_rows_fh, '<', $rows_file
|
||||||
or die "Cannot open $rows_file for writing: $OS_ERROR";
|
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 = {
|
my $self = {
|
||||||
%$args,
|
%$args,
|
||||||
_query_fh => $_query_fh,
|
_query_fh => $_query_fh,
|
||||||
_results_fh => $_results_fh,
|
_results_fh => $_results_fh,
|
||||||
_rows_fh => $_rows_fh,
|
_rows_fh => $_rows_fh,
|
||||||
|
_progress => $_progress,
|
||||||
};
|
};
|
||||||
|
|
||||||
return $self;
|
return $self;
|
||||||
@@ -134,7 +151,7 @@ sub next {
|
|||||||
$results->{query} = $query;
|
$results->{query} = $query;
|
||||||
$results->{rows} = $rows;
|
$results->{rows} = $rows;
|
||||||
|
|
||||||
if ( my $pr = $self->progress ) {
|
if ( my $pr = $self->_progress ) {
|
||||||
$pr->update(sub { tell $_query_fh });
|
$pr->update(sub { tell $_query_fh });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -11,6 +11,7 @@ use warnings FATAL => 'all';
|
|||||||
use English qw(-no_match_vars);
|
use English qw(-no_match_vars);
|
||||||
use Test::More;
|
use Test::More;
|
||||||
use Time::HiRes qw(time);
|
use Time::HiRes qw(time);
|
||||||
|
use File::Temp qw(tempdir);
|
||||||
|
|
||||||
$ENV{PERCONA_TOOLKIT_TEST_USE_DSN_NAMES} = 1;
|
$ENV{PERCONA_TOOLKIT_TEST_USE_DSN_NAMES} = 1;
|
||||||
|
|
||||||
@@ -19,7 +20,7 @@ use Sandbox;
|
|||||||
require "$trunk/bin/pt-upgrade";
|
require "$trunk/bin/pt-upgrade";
|
||||||
|
|
||||||
# This runs immediately if the server is already running, else it starts it.
|
# 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 $dp = new DSNParser(opts=>$dsn_opts);
|
||||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||||
@@ -35,10 +36,15 @@ elsif ( !$dbh2 ) {
|
|||||||
|
|
||||||
my $host1_dsn = $sb->dsn_for('host1');
|
my $host1_dsn = $sb->dsn_for('host1');
|
||||||
my $host2_dsn = $sb->dsn_for('host2');
|
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 $samples = "$trunk/t/pt-upgrade/samples";
|
||||||
my $exit_status = 0;
|
my $exit_status = 0;
|
||||||
my $output;
|
my $output;
|
||||||
|
|
||||||
|
# #############################################################################
|
||||||
|
# Executing queries
|
||||||
|
# #############################################################################
|
||||||
|
|
||||||
my $t0 = time;
|
my $t0 = time;
|
||||||
|
|
||||||
$output = output(
|
$output = output(
|
||||||
@@ -54,20 +60,56 @@ my $t = time - $t0;
|
|||||||
|
|
||||||
ok(
|
ok(
|
||||||
$t >= 3 && $t <= 6,
|
$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);
|
) or diag($output, 'Actual run time:', $t);
|
||||||
|
|
||||||
# Exit status 8 = --run-time expired (an no other errors/problems)
|
# Exit status 8 = --run-time expired (an no other errors/problems)
|
||||||
is(
|
is(
|
||||||
$exit_status,
|
$exit_status,
|
||||||
8,
|
8,
|
||||||
"Exit status 8"
|
"Exec queries: exit status 8"
|
||||||
) or diag($output);
|
) or diag($output);
|
||||||
|
|
||||||
like(
|
like(
|
||||||
$output,
|
$output,
|
||||||
qr/Executing queries.+?remain/,
|
qr/slow_slow.log.+?remain/,
|
||||||
"--progress while executing queries"
|
"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($dbh2);
|
||||||
$sb->wipe_clean($dbh1);
|
$sb->wipe_clean($dbh1);
|
||||||
#diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`);
|
diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`);
|
||||||
#ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||||
done_testing;
|
done_testing;
|
||||||
|
@@ -105,5 +105,6 @@ close $dh;
|
|||||||
# Done.
|
# Done.
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
$sb->wipe_clean($dbh1);
|
$sb->wipe_clean($dbh1);
|
||||||
|
diag(`$trunk/sandbox/stop-sandbox 12348 >/dev/null`);
|
||||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||||
done_testing;
|
done_testing;
|
||||||
|
Reference in New Issue
Block a user