mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-09 05:31:07 +00:00
Compare commits
36 Commits
release-v3
...
pt-github-
Author | SHA1 | Date | |
---|---|---|---|
![]() |
efb402a335 | ||
![]() |
b70977e64d | ||
![]() |
a2f69927c7 | ||
![]() |
b980c6e149 | ||
![]() |
25c969542b | ||
![]() |
8ef28f7cf8 | ||
![]() |
833b1fd4f6 | ||
![]() |
62673114f2 | ||
![]() |
0e654e102a | ||
![]() |
46501bed74 | ||
![]() |
fc53c3a46b | ||
![]() |
3ad5fb3016 | ||
![]() |
332a29a205 | ||
![]() |
f269dc712c | ||
![]() |
404cdb0f54 | ||
![]() |
28d43ac0ec | ||
![]() |
577b5dedcb | ||
![]() |
d1ebb122b4 | ||
![]() |
cfd5da41bc | ||
![]() |
47d2af6cf7 | ||
![]() |
0a42bc6485 | ||
![]() |
ec237548ef | ||
![]() |
9780a01942 | ||
![]() |
01e7b1819e | ||
![]() |
05e9672f33 | ||
![]() |
e998bd5b55 | ||
![]() |
b566350b64 | ||
![]() |
7606312a40 | ||
![]() |
832c928020 | ||
![]() |
f7c8c5223c | ||
![]() |
249b5b61e9 | ||
![]() |
dd7b001a9c | ||
![]() |
501e4cd568 | ||
![]() |
85eb1411d1 | ||
![]() |
af686fe186 | ||
![]() |
a85b7aa32c |
4
.github/CODEOWNERS
vendored
Normal file
4
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
# https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners
|
||||
# Order is important; the last matching pattern takes the most precedence.
|
||||
|
||||
* @svetasmirnova
|
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "gomod"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
8
.github/workflows/toolkit.yml
vendored
8
.github/workflows/toolkit.yml
vendored
@@ -14,18 +14,16 @@ jobs:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v3
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: 1.19
|
||||
- name: Install make
|
||||
run: sudo apt-get update && sudo apt-get -y install make
|
||||
go-version: '1.20'
|
||||
- name: Build
|
||||
run: cd src/go; make linux-amd64; cd ../../
|
||||
|
||||
- name: Build the Docker image
|
||||
run: echo "FROM oraclelinux:9-slim" > Dockerfile; echo "COPY bin/* /usr/bin/" >> Dockerfile; docker build . --file Dockerfile --tag percona-toolkit:${{ github.sha }}
|
||||
- name: Run Trivy vulnerability scanner
|
||||
uses: aquasecurity/trivy-action@0.8.0
|
||||
uses: aquasecurity/trivy-action@0.11.2
|
||||
with:
|
||||
image-ref: 'percona-toolkit:${{ github.sha }}'
|
||||
format: 'table'
|
||||
|
@@ -1,5 +1,13 @@
|
||||
Changelog for Percona Toolkit
|
||||
|
||||
v3.5.3 release 2023-06-05
|
||||
|
||||
* Fixed bug PT-1583: Skipping chunks when using pt-online-schema-change (Thanks to monty solomon for reporting this issue)
|
||||
* Fixed bug PT-2048: pt-osc spans excessive connections to the replica when executing in the source
|
||||
* Fixed bug PT-2169: pt-k8s-debug-collector integration of pg_gather requires croping first line of the output file
|
||||
* Fixed bug PT-2203: CVEs reported in Percona Toolkit version 5.3.2 related to GO (Thanks to Kushal Haldar for reporting this issue)
|
||||
* Fixed bug PT-2196: Bug in pt-secure-collect --output-file (Thanks to Michael Patrick for reporting and fixing this issue)
|
||||
|
||||
v3.5.2 release 2023-03-28
|
||||
|
||||
* Improvement PT-188: Use percona.checksums in examples
|
||||
|
@@ -2,14 +2,14 @@ use ExtUtils::MakeMaker;
|
||||
|
||||
WriteMakefile(
|
||||
NAME => 'Percona::Toolkit',
|
||||
VERSION => '3.5.2',
|
||||
VERSION => '3.5.3',
|
||||
EXE_FILES => [ <bin/*> ],
|
||||
MAN1PODS => {
|
||||
'docs/percona-toolkit.pod' => 'blib/man1/percona-toolkit.1p',
|
||||
map {
|
||||
(my $name = $_) =~ s/^bin.//;
|
||||
my $file_name = $_;
|
||||
if ( ( $file_name !~ m/mongo/ ) || ( $file_name !~ m/pg/ ) ) {
|
||||
if ( ( $file_name !~ m/mongo/ ) || ( $file_name !~ m/pg/ ) || ( $file_name !~ m/pt-stalk/ ) ) {
|
||||
$_ => "blib/man1/$name.1p";
|
||||
}
|
||||
} <bin/*>
|
||||
|
@@ -1364,6 +1364,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-align 3.5.2
|
||||
pt-align 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -8778,6 +8778,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-archiver 3.5.2
|
||||
pt-archiver 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -6011,6 +6011,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-config-diff 3.5.2
|
||||
pt-config-diff 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -5788,6 +5788,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-deadlock-logger 3.5.2
|
||||
pt-deadlock-logger 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -1430,7 +1430,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -5692,6 +5692,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-diskstats 3.5.2
|
||||
pt-diskstats 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -5786,6 +5786,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-duplicate-key-checker 3.5.2
|
||||
pt-duplicate-key-checker 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -1708,6 +1708,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-fifo-split 3.5.2
|
||||
pt-fifo-split 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -5201,6 +5201,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-find 3.5.2
|
||||
pt-find 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -2271,6 +2271,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-fingerprint 3.5.2
|
||||
pt-fingerprint 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -2557,7 +2557,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -4775,6 +4775,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-fk-error-logger 3.5.2
|
||||
pt-fk-error-logger 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -4278,7 +4278,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -7473,6 +7473,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-heartbeat 3.5.2
|
||||
pt-heartbeat 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -3709,7 +3709,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -4919,7 +4919,7 @@ sub save_results {
|
||||
PTDEBUG && _d("Save query data");
|
||||
my $insert_query_sth = $dbh->prepare(
|
||||
"INSERT IGNORE INTO `$db`.`queries` (query_id, fingerprint, sample) "
|
||||
. " VALUES (CONV(?, 16, 10), ?, ?)");
|
||||
. " VALUES (?, ?, ?)");
|
||||
foreach my $query_id ( keys %{$self->{queries}} ) {
|
||||
my $query = $self->{queries}->{$query_id};
|
||||
$insert_query_sth->execute(
|
||||
@@ -4929,7 +4929,7 @@ sub save_results {
|
||||
PTDEBUG && _d("Saving index usage data");
|
||||
my $insert_index_usage_sth = $dbh->prepare(
|
||||
"INSERT INTO `$db`.`index_usage` (query_id, db, tbl, idx, cnt) "
|
||||
. "VALUES (CONV(?, 16, 10), ?, ?, ?, ?) "
|
||||
. "VALUES (?, ?, ?, ?, ?) "
|
||||
. "ON DUPLICATE KEY UPDATE cnt = cnt + ?");
|
||||
foreach my $query_id ( keys %{$self->{index_usage}} ) {
|
||||
foreach my $db ( keys %{$self->{index_usage}->{$query_id}} ) {
|
||||
@@ -4948,7 +4948,7 @@ sub save_results {
|
||||
my $insert_index_alt_sth = $dbh->prepare(
|
||||
"INSERT INTO `$db`.`index_alternatives` "
|
||||
. "(query_id, db, tbl, idx, alt_idx, cnt) "
|
||||
. "VALUES (CONV(?, 16, 10), ?, ?, ?, ?, ?) "
|
||||
. "VALUES (?, ?, ?, ?, ?, ?) "
|
||||
. "ON DUPLICATE KEY UPDATE cnt = cnt + ?");
|
||||
foreach my $query_id ( keys %{$self->{alt_index_usage}} ) {
|
||||
foreach my $db ( keys %{$self->{alt_index_usage}->{$query_id}} ) {
|
||||
@@ -7366,7 +7366,7 @@ MAGIC_create_indexes:
|
||||
MAGIC_create_queries:
|
||||
|
||||
CREATE TABLE IF NOT EXISTS queries (
|
||||
query_id BIGINT UNSIGNED NOT NULL,
|
||||
query_id CHAR(32) NOT NULL,
|
||||
fingerprint TEXT NOT NULL,
|
||||
sample TEXT NOT NULL,
|
||||
PRIMARY KEY (query_id)
|
||||
@@ -7384,7 +7384,7 @@ MAGIC_create_tables:
|
||||
MAGIC_create_index_usage:
|
||||
|
||||
CREATE TABLE IF NOT EXISTS index_usage (
|
||||
query_id BIGINT UNSIGNED NOT NULL,
|
||||
query_id CHAR(32) NOT NULL,
|
||||
db VARCHAR(64) NOT NULL,
|
||||
tbl VARCHAR(64) NOT NULL,
|
||||
idx VARCHAR(64) NOT NULL,
|
||||
@@ -7395,7 +7395,7 @@ MAGIC_create_index_usage:
|
||||
MAGIC_create_index_alternatives:
|
||||
|
||||
CREATE TABLE IF NOT EXISTS index_alternatives (
|
||||
query_id BIGINT UNSIGNED NOT NULL, -- This query used
|
||||
query_id CHAR(32) NOT NULL, -- This query used
|
||||
db VARCHAR(64) NOT NULL, -- this index, but...
|
||||
tbl VARCHAR(64) NOT NULL, --
|
||||
idx VARCHAR(64) NOT NULL, --
|
||||
@@ -7731,6 +7731,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-index-usage 3.5.2
|
||||
pt-index-usage 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -1132,7 +1132,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-ioprofile 3.5.2
|
||||
pt-ioprofile 3.5.3
|
||||
|
||||
=cut
|
||||
|
||||
|
20
bin/pt-kill
20
bin/pt-kill
@@ -2787,7 +2787,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -3501,10 +3501,10 @@ sub parse_event {
|
||||
else {
|
||||
PTDEBUG && _d('Saving new query, state', $curr->[STATE]);
|
||||
push @new_cxn, [
|
||||
@{$curr}[0..7], # proc info
|
||||
int($query_start), # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
@{$curr}[0..7], # proc info
|
||||
$query_start, # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
{ ($curr->[STATE] || "") => 0 }, # PROFILE
|
||||
];
|
||||
}
|
||||
@@ -3515,10 +3515,10 @@ sub parse_event {
|
||||
if ( $curr->[INFO] && defined $curr->[TIME] ) {
|
||||
PTDEBUG && _d('Saving query of new cxn, state', $curr->[STATE]);
|
||||
push @new_cxn, [
|
||||
@{$curr}[0..7], # proc info
|
||||
int($query_start), # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
@{$curr}[0..7], # proc info
|
||||
$query_start, # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
{ ($curr->[STATE] || "") => 0 }, # PROFILE
|
||||
];
|
||||
}
|
||||
@@ -8759,6 +8759,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-kill 3.5.2
|
||||
pt-kill 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -808,7 +808,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-mext 3.5.2
|
||||
pt-mext 3.5.3
|
||||
|
||||
=cut
|
||||
|
||||
|
@@ -3325,7 +3325,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-mysql-summary 3.5.2
|
||||
pt-mysql-summary 3.5.3
|
||||
|
||||
=cut
|
||||
|
||||
|
@@ -6559,7 +6559,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -9149,13 +9149,6 @@ sub main {
|
||||
# ########################################################################
|
||||
my $child_tables;
|
||||
|
||||
my $have_child_tables = find_child_tables(
|
||||
tbl => $orig_tbl,
|
||||
Cxn => $cxn,
|
||||
Quoter => $q,
|
||||
only_same_schema_fks => $o->get('only-same-schema-fks'),
|
||||
);
|
||||
|
||||
my $vp = VersionParser->new($cxn->dbh());
|
||||
if (($vp->cmp('8.0.14') >= 0 && $vp->cmp('8.0.17') <= 0) && $vp->flavor() !~ m/maria/i) {
|
||||
my $msg = "There is an error in MySQL that makes the server to die when trying to ".
|
||||
@@ -12368,7 +12361,7 @@ the tool to run EXPLAIN before running queries that are meant to access
|
||||
a small amount of data, but which could access many rows if MySQL chooses a bad
|
||||
execution plan. These include the queries to determine chunk boundaries and the
|
||||
chunk queries themselves. If it appears that MySQL will use a bad query
|
||||
execution plan, the tool will skip the chunk of the table.
|
||||
execution plan, the tool will stop copying rows and die.
|
||||
|
||||
The tool uses several heuristics to determine whether an execution plan is bad.
|
||||
The first is whether EXPLAIN reports that MySQL intends to use the desired index
|
||||
@@ -12377,14 +12370,8 @@ query unsafe.
|
||||
|
||||
The tool also checks how much of the index MySQL reports that it will use for
|
||||
the query. The EXPLAIN output shows this in the key_len column. The tool
|
||||
remembers the largest key_len seen, and skips chunks where MySQL reports that it
|
||||
will use a smaller prefix of the index. This heuristic can be understood as
|
||||
skipping chunks that have a worse execution plan than other chunks.
|
||||
|
||||
The tool prints a warning the first time a chunk is skipped due to
|
||||
a bad execution plan in each table. Subsequent chunks are skipped silently,
|
||||
although you can see the count of skipped chunks in the SKIPPED column in
|
||||
the tool's output.
|
||||
remembers the largest key_len seen, and terminates if MySQL reports that it
|
||||
will use a smaller prefix of the index.
|
||||
|
||||
This option adds some setup work to each table and chunk. Although the work is
|
||||
not intrusive for MySQL, it results in more round-trips to the server, which
|
||||
@@ -12455,13 +12442,6 @@ point, but after that, the tool ignores this option's value. If you set this
|
||||
option explicitly, however, then it disables the dynamic adjustment behavior and
|
||||
tries to make all chunks exactly the specified number of rows.
|
||||
|
||||
There is a subtlety: if the chunk index is not unique, then it's possible that
|
||||
chunks will be larger than desired. For example, if a table is chunked by an
|
||||
index that contains 10,000 of a given value, there is no way to write a WHERE
|
||||
clause that matches only 1,000 of the values, and that chunk will be at least
|
||||
10,000 rows large. Such a chunk will probably be skipped because of
|
||||
L<"--chunk-size-limit">.
|
||||
|
||||
=item --chunk-size-limit
|
||||
|
||||
type: float; default: 4.0
|
||||
@@ -12471,7 +12451,7 @@ Do not copy chunks this much larger than the desired chunk size.
|
||||
When a table has no unique indexes, chunk sizes can be inaccurate. This option
|
||||
specifies a maximum tolerable limit to the inaccuracy. The tool uses <EXPLAIN>
|
||||
to estimate how many rows are in the chunk. If that estimate exceeds the
|
||||
desired chunk size times the limit, then the tool skips the chunk.
|
||||
desired chunk size times the limit, then the tool will stop copying rows and die.
|
||||
|
||||
The minimum value for this option is 1, which means that no chunk can be larger
|
||||
than L<"--chunk-size">. You probably don't want to specify 1, because rows
|
||||
@@ -13493,6 +13473,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-online-schema-change 3.5.2
|
||||
pt-online-schema-change 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -901,7 +901,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-pmp 3.5.2
|
||||
pt-pmp 3.5.3
|
||||
|
||||
=cut
|
||||
|
||||
|
@@ -2703,7 +2703,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -3394,10 +3394,10 @@ sub parse_event {
|
||||
else {
|
||||
PTDEBUG && _d('Saving new query, state', $curr->[STATE]);
|
||||
push @new_cxn, [
|
||||
@{$curr}[0..7], # proc info
|
||||
int($query_start), # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
@{$curr}[0..7], # proc info
|
||||
$query_start, # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
{ ($curr->[STATE] || "") => 0 }, # PROFILE
|
||||
];
|
||||
}
|
||||
@@ -3408,10 +3408,10 @@ sub parse_event {
|
||||
if ( $curr->[INFO] && defined $curr->[TIME] ) {
|
||||
PTDEBUG && _d('Saving query of new cxn, state', $curr->[STATE]);
|
||||
push @new_cxn, [
|
||||
@{$curr}[0..7], # proc info
|
||||
int($query_start), # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
@{$curr}[0..7], # proc info
|
||||
$query_start, # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
{ ($curr->[STATE] || "") => 0 }, # PROFILE
|
||||
];
|
||||
}
|
||||
@@ -5892,7 +5892,10 @@ sub top_events {
|
||||
my ( $self, %args ) = @_;
|
||||
my $classes = $self->{result_classes};
|
||||
my @sorted = reverse sort { # Sorted list of $groupby values
|
||||
$classes->{$a}->{$args{attrib}}->{$args{orderby}}
|
||||
($classes->{$a}->{$args{attrib}}->{$args{orderby}}
|
||||
== $classes->{$b}->{$args{attrib}}->{$args{orderby}})
|
||||
? $a cmp $b
|
||||
: $classes->{$a}->{$args{attrib}}->{$args{orderby}}
|
||||
<=> $classes->{$b}->{$args{attrib}}->{$args{orderby}}
|
||||
} grep {
|
||||
defined $classes->{$_}->{$args{attrib}}->{$args{orderby}}
|
||||
@@ -7386,7 +7389,7 @@ sub profile {
|
||||
$report->title('Profile');
|
||||
my @cols = (
|
||||
{ name => 'Rank', right_justify => 1, },
|
||||
{ name => 'Query ID', },
|
||||
{ name => 'Query ID', width => 35 },
|
||||
{ name => 'Response time', right_justify => 1, },
|
||||
{ name => 'Calls', right_justify => 1, },
|
||||
{ name => 'R/Call', right_justify => 1, },
|
||||
@@ -9264,7 +9267,7 @@ sub new {
|
||||
my $sql = <<" SQL";
|
||||
INSERT INTO $args{db_tbl}
|
||||
(checksum, fingerprint, sample, first_seen, last_seen)
|
||||
VALUES(CONV(?, 16, 10), ?, ?, COALESCE(?, $now), COALESCE(?, $now))
|
||||
VALUES(?, ?, ?, COALESCE(?, $now), COALESCE(?, $now))
|
||||
ON DUPLICATE KEY UPDATE
|
||||
first_seen = IF(
|
||||
first_seen IS NULL,
|
||||
@@ -9281,8 +9284,8 @@ sub new {
|
||||
my @review_cols = grep { !$skip_cols{$_} } @{$args{tbl_struct}->{cols}};
|
||||
$sql = "SELECT "
|
||||
. join(', ', map { $args{quoter}->quote($_) } @review_cols)
|
||||
. ", CONV(checksum, 10, 16) AS checksum_conv FROM $args{db_tbl}"
|
||||
. " WHERE checksum=CONV(?, 16, 10)";
|
||||
. ", checksum AS checksum_conv FROM $args{db_tbl}"
|
||||
. " WHERE checksum=?";
|
||||
PTDEBUG && _d('SQL to select from review table:', $sql);
|
||||
my $select_sth = $args{dbh}->prepare($sql);
|
||||
|
||||
@@ -9412,7 +9415,7 @@ sub set_history_options {
|
||||
my $sql = "REPLACE INTO $args{table}("
|
||||
. join(', ',
|
||||
map { Quoter->quote($_) } ('checksum', 'sample', @cols))
|
||||
. ') VALUES (CONV(?, 16, 10), ?'
|
||||
. ') VALUES (?, ?'
|
||||
. (@cols ? ', ' : '') # issue 1265
|
||||
. join(', ', map {
|
||||
$_ eq 'ts_min' || $_ eq 'ts_max'
|
||||
@@ -16990,6 +16993,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-query-digest 3.5.2
|
||||
pt-query-digest 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -2673,6 +2673,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-show-grants 3.5.2
|
||||
pt-show-grants 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -1249,7 +1249,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-sift 3.5.2
|
||||
pt-sift 3.5.3
|
||||
|
||||
=cut
|
||||
|
||||
|
@@ -2780,7 +2780,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -5061,6 +5061,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-slave-delay 3.5.2
|
||||
pt-slave-delay 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -3736,7 +3736,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -4595,6 +4595,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-slave-find 3.5.2
|
||||
pt-slave-find 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -6246,6 +6246,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-slave-restart 3.5.2
|
||||
pt-slave-restart 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -2564,7 +2564,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-stalk 3.5.2
|
||||
pt-stalk 3.5.3
|
||||
|
||||
=cut
|
||||
|
||||
|
@@ -2769,7 +2769,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-summary 3.5.2
|
||||
pt-summary 3.5.3
|
||||
|
||||
=cut
|
||||
|
||||
|
@@ -8391,7 +8391,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -14155,6 +14155,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-table-checksum 3.5.2
|
||||
pt-table-checksum 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -8431,7 +8431,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -13178,6 +13178,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-table-sync 3.5.2
|
||||
pt-table-sync 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -8519,6 +8519,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-table-usage 3.5.2
|
||||
pt-table-usage 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -2976,7 +2976,7 @@ sub any_unix_timestamp {
|
||||
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
@@ -11528,6 +11528,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-upgrade 3.5.2
|
||||
pt-upgrade 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -6326,6 +6326,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-variable-advisor 3.5.2
|
||||
pt-variable-advisor 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -3308,6 +3308,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
pt-visual-explain 3.5.2
|
||||
pt-visual-explain 3.5.3
|
||||
|
||||
=cut
|
||||
|
@@ -39,6 +39,7 @@ visit http://www.percona.com/software/.
|
||||
|
||||
%build
|
||||
%{__perl} Makefile.PL INSTALLDIRS=vendor < /dev/null
|
||||
sed -i '499d' Makefile
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
|
@@ -2,15 +2,27 @@
|
||||
{% extends "!layout.html" %}
|
||||
|
||||
{# Adds Google Analytics events on button click. #}
|
||||
{%- block extrahead %}
|
||||
<script>
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-343802-3']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
</script>
|
||||
{%- block analytics %}
|
||||
<!-- Google Tag Manager -->
|
||||
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WBVF48V');</script>
|
||||
<!-- End Google Tag Manager --><!-- Google Tag Manager (noscript) -->
|
||||
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WBVF48V"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
||||
<!-- End Google Tag Manager (noscript) -->
|
||||
{{ super() }}
|
||||
{%- endblock %}
|
||||
|
||||
{%- block extrahead %}
|
||||
{{ super() }}
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="Percona Toolkit Documentation" />
|
||||
<meta property="og:description" content="Command-line tools for common MySQL database administration tasks." />
|
||||
<meta property="og:url" content="https://docs.percona.com/percona-toolkit/" />
|
||||
{% endblock %}
|
||||
|
||||
{%- block relbar2 %}
|
||||
{% include "relbar2.html" %}
|
||||
|
@@ -50,7 +50,7 @@ copyright = u'2023, Percona LLC and/or its affiliates'
|
||||
# The short X.Y version.
|
||||
version = '3.5'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '3.5.2'
|
||||
release = '3.5.3'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
@@ -575,6 +575,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
Percona Toolkit v3.5.2 released 2023-03-28
|
||||
Percona Toolkit v3.5.3 released 2023-05-29
|
||||
|
||||
=cut
|
||||
|
@@ -1,6 +1,18 @@
|
||||
Percona Toolkit
|
||||
***************
|
||||
|
||||
v3.5.3 released 2023-06-05
|
||||
==============================
|
||||
|
||||
Bugs Fixed
|
||||
------------
|
||||
|
||||
* :jirabug:`PT-1583`: Skipping chunks when using pt-online-schema-change (Thanks to monty solomon for reporting this issue)
|
||||
* :jirabug:`PT-2048`: pt-osc spans excessive connections to the replica when executing in the source
|
||||
* :jirabug:`PT-2169`: pt-k8s-debug-collector integration of pg_gather requires croping first line of the output file
|
||||
* :jirabug:`PT-2203`: CVEs reported in Percona Toolkit version 5.3.2 related to GO (Thanks to Kushal Haldar for reporting this issue)
|
||||
* :jirabug:`PT-2196`: Bug in pt-secure-collect --output-file (Thanks to Michael Patrick for reporting and fixing this issue)
|
||||
*
|
||||
v3.5.2 released 2023-03-28
|
||||
==============================
|
||||
|
||||
@@ -33,11 +45,11 @@ Bugs Fixed
|
||||
* :jirabug:`PT-1700`: pt-table-checksum REPLICATION_STOPPED exit status not documented
|
||||
* :jirabug:`PT-1927`: pt-k8s-debug-collector requires mysql client
|
||||
* :jirabug:`PT-1930`: pt-k8s-debug-collector should not attempt collecting PXC information when running against PSMDB
|
||||
* :jirabug:`PT-2084`: Changes from PT-80 broke previous pt-stalk functionality (Thanks to Agustín Gallego for reporting this issue)
|
||||
* :jirabug:`PT-2102`: pt-mysql-summary should support !include* in config files (Thanks to Yoann La Cancellera for reporting this issue)
|
||||
* :jirabug:`PT-2110`: Incorrect PTDEBUG output with --ignore-engines option (Thanks to Kazuya Yokogawa for reporting this issue)
|
||||
* :jirabug:`PT-2084`: Changes from PT-80 broke previous pt-stalk functionality (Thanks to Agustín Gallego for reporting and fixing this issue)
|
||||
* :jirabug:`PT-2102`: pt-mysql-summary should support !include* in config files (Thanks to Yoann La Cancellera for fixing this issue)
|
||||
* :jirabug:`PT-2110`: Incorrect PTDEBUG output with --ignore-engines option (Thanks to Kazuya Yokogawa for reporting and fixing this issue)
|
||||
* :jirabug:`PT-2114`: Incorrect casting of BIT columns by pt-archiver
|
||||
* :jirabug:`PT-2116`: pt-osc --null-to-not-null description is wrong (Thanks to Yoann La Cancellera for reporting this issue)
|
||||
* :jirabug:`PT-2116`: pt-osc --null-to-not-null description is wrong (Thanks to Yoann La Cancellera for fixing this issue)
|
||||
* :jirabug:`PT-2120`: pt-stalk with --system-only displaying "MYSQL_ONLY:" message on the screen
|
||||
* :jirabug:`PT-2123`: pt-archiver gives error "Wide character in print at /usr/bin/pt-archiver line 6815" when using --bulk-insert while using character set alias
|
||||
* :jirabug:`PT-2187`: CVEs reported in Percona Toolkit version 5.3.1 related to GO
|
||||
|
28
go.mod
28
go.mod
@@ -6,26 +6,26 @@ require (
|
||||
github.com/AlekSi/pointer v1.2.0
|
||||
github.com/Masterminds/semver v1.5.0
|
||||
github.com/alecthomas/kingpin v2.2.6+incompatible
|
||||
github.com/alecthomas/kong v0.7.1
|
||||
github.com/alecthomas/kong v0.8.0
|
||||
github.com/go-ini/ini v1.67.0
|
||||
github.com/golang/mock v1.6.0
|
||||
github.com/google/uuid v1.3.0
|
||||
github.com/hashicorp/go-version v1.6.0
|
||||
github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef
|
||||
github.com/lib/pq v1.10.7
|
||||
github.com/lib/pq v1.10.9
|
||||
github.com/mattn/go-shellwords v1.0.12
|
||||
github.com/montanaflynn/stats v0.7.0
|
||||
github.com/montanaflynn/stats v0.7.1
|
||||
github.com/pborman/getopt v1.1.0
|
||||
github.com/percona/go-mysql v0.0.0-20210427141028-73d29c6da78c
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible
|
||||
github.com/sirupsen/logrus v1.9.0
|
||||
github.com/stretchr/testify v1.8.2
|
||||
go.mongodb.org/mongo-driver v1.11.3
|
||||
golang.org/x/crypto v0.7.0
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
github.com/stretchr/testify v1.8.4
|
||||
go.mongodb.org/mongo-driver v1.12.0
|
||||
golang.org/x/crypto v0.10.0
|
||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22
|
||||
k8s.io/api v0.26.3
|
||||
k8s.io/api v0.27.3
|
||||
)
|
||||
|
||||
require (
|
||||
@@ -34,10 +34,8 @@ require (
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/go-logr/logr v1.2.3 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/go-stack/stack v1.8.1 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/google/go-cmp v0.5.9 // indirect
|
||||
github.com/google/gofuzz v1.2.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/compress v1.16.3 // indirect
|
||||
@@ -51,15 +49,15 @@ require (
|
||||
github.com/xdg-go/stringprep v1.0.4 // indirect
|
||||
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
golang.org/x/net v0.8.0 // indirect
|
||||
golang.org/x/net v0.10.0 // indirect
|
||||
golang.org/x/sync v0.1.0 // indirect
|
||||
golang.org/x/sys v0.6.0 // indirect
|
||||
golang.org/x/term v0.6.0 // indirect
|
||||
golang.org/x/text v0.8.0 // indirect
|
||||
golang.org/x/sys v0.9.0 // indirect
|
||||
golang.org/x/term v0.9.0 // indirect
|
||||
golang.org/x/text v0.10.0 // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
k8s.io/apimachinery v0.26.3 // indirect
|
||||
k8s.io/apimachinery v0.27.3 // indirect
|
||||
k8s.io/klog/v2 v2.90.1 // indirect
|
||||
k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 // indirect
|
||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
|
||||
|
291
go.sum
291
go.sum
@@ -1,160 +1,67 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w=
|
||||
github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc=
|
||||
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
||||
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
|
||||
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||
github.com/alecthomas/assert/v2 v2.1.0 h1:tbredtNcQnoSd3QBhQWI7QZ3XHOVkw1Moklp2ojoH/0=
|
||||
github.com/alecthomas/kingpin v2.2.6+incompatible h1:5svnBTFgJjZvGKyYBtMB0+m5wvrbUHiqye8wRJMlnYI=
|
||||
github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE=
|
||||
github.com/alecthomas/kong v0.5.0 h1:u8Kdw+eeml93qtMZ04iei0CFYve/WPcA5IFh+9wSskE=
|
||||
github.com/alecthomas/kong v0.5.0/go.mod h1:uzxf/HUh0tj43x1AyJROl3JT7SgsZ5m+icOv1csRhc0=
|
||||
github.com/alecthomas/kong v0.7.1 h1:azoTh0IOfwlAX3qN9sHWTxACE2oV8Bg2gAwBsMwDQY4=
|
||||
github.com/alecthomas/kong v0.7.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U=
|
||||
github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142 h1:8Uy0oSf5co/NZXje7U1z8Mpep++QJOldL2hs/sBQf48=
|
||||
github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8=
|
||||
github.com/alecthomas/kong v0.8.0 h1:ryDCzutfIqJPnNn0omnrgHLbAggDQM2VWHikE1xqK7s=
|
||||
github.com/alecthomas/kong v0.8.0/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U=
|
||||
github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=
|
||||
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
|
||||
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
|
||||
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
|
||||
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/go-ini/ini v1.66.4 h1:dKjMqkcbkzfddhIhyglTPgMoJnkvmG+bSLrU9cTHc5M=
|
||||
github.com/go-ini/ini v1.66.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||
github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=
|
||||
github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
||||
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
|
||||
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
|
||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
||||
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
|
||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw=
|
||||
github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc=
|
||||
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
|
||||
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
|
||||
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
|
||||
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
|
||||
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
|
||||
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
|
||||
github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
|
||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4=
|
||||
github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
|
||||
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
|
||||
github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef h1:A9HsByNhogrvm9cWb28sjiS3i7tcKCkflWFEkHfuAgM=
|
||||
github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A=
|
||||
github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY=
|
||||
github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
|
||||
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
|
||||
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk=
|
||||
github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
|
||||
github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ=
|
||||
github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
|
||||
github.com/montanaflynn/stats v0.7.0 h1:r3y12KyNxj/Sb/iOE46ws+3mS1+MZca1wlHQFPsY/JU=
|
||||
github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
|
||||
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||
github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE=
|
||||
github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
|
||||
github.com/pborman/getopt v1.1.0 h1:eJ3aFZroQqq0bWmraivjQNt6Dmm5M0h2JcDW38/Azb0=
|
||||
github.com/pborman/getopt v1.1.0/go.mod h1:FxXoW1Re00sQG/+KIkuSqRL/LwQgSkv7uyac+STFsbk=
|
||||
github.com/percona/go-mysql v0.0.0-20210427141028-73d29c6da78c h1:1SZ7nS+kSaO63IpaKspf/gf8602QcgP2eXNPMNOIc0M=
|
||||
@@ -163,51 +70,26 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
|
||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
|
||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
|
||||
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
||||
github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw=
|
||||
github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
|
||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
|
||||
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
|
||||
github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o=
|
||||
github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
|
||||
github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
|
||||
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
|
||||
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
|
||||
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
|
||||
github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
|
||||
github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E=
|
||||
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
|
||||
github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
|
||||
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
|
||||
github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
|
||||
github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs=
|
||||
github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
|
||||
github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8=
|
||||
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
|
||||
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
|
||||
@@ -219,206 +101,99 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
|
||||
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
go.mongodb.org/mongo-driver v1.9.0 h1:f3aLGJvQmBl8d9S40IL+jEyBC6hfLPbJjv9t5hEM9ck=
|
||||
go.mongodb.org/mongo-driver v1.9.0/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY=
|
||||
go.mongodb.org/mongo-driver v1.11.3 h1:Ql6K6qYHEzB6xvu4+AU0BoRoqf9vFPcc4o7MUIdPW8Y=
|
||||
go.mongodb.org/mongo-driver v1.11.3/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
|
||||
go.mongodb.org/mongo-driver v1.12.0 h1:aPx33jmn/rQuJXPQLZQ8NtfPQG8CaqgLThFtqRb0PiE=
|
||||
go.mongodb.org/mongo-driver v1.12.0/go.mod h1:AZkxhPnFJUoH7kZlFkVKucV20K387miPfm7oimrSmK0=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o=
|
||||
golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A=
|
||||
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20221114191408-850992195362 h1:NoHlPRbyl1VFI6FjwHtPQCN7wAMXI6cKcqrmXhOOfBQ=
|
||||
golang.org/x/exp v0.0.0-20221114191408-850992195362/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||
golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM=
|
||||
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
|
||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
|
||||
golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
|
||||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
|
||||
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
|
||||
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||
golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28=
|
||||
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
|
||||
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58=
|
||||
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
|
||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
k8s.io/api v0.23.5 h1:zno3LUiMubxD/V1Zw3ijyKO3wxrhbUF1Ck+VjBvfaoA=
|
||||
k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8=
|
||||
k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU=
|
||||
k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE=
|
||||
k8s.io/apimachinery v0.23.5 h1:Va7dwhp8wgkUPWsEXk6XglXWU4IKYLKNlv8VkX7SDM0=
|
||||
k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM=
|
||||
k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k=
|
||||
k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I=
|
||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc=
|
||||
k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/api v0.27.3 h1:yR6oQXXnUEBWEWcvPWS0jQL575KoAboQPfJAuKNrw5Y=
|
||||
k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg=
|
||||
k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM=
|
||||
k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E=
|
||||
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
|
||||
k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
|
||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc=
|
||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20230313181309-38a27ef9d749 h1:xMMXJlJbsU8w3V5N2FLDQ8YgU8s1EoULdbQBcAeNJkY=
|
||||
k8s.io/utils v0.0.0-20230313181309-38a27ef9d749/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs=
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y=
|
||||
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
|
||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
|
||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
|
||||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
|
||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
|
||||
|
@@ -795,7 +795,10 @@ sub top_events {
|
||||
my ( $self, %args ) = @_;
|
||||
my $classes = $self->{result_classes};
|
||||
my @sorted = reverse sort { # Sorted list of $groupby values
|
||||
$classes->{$a}->{$args{attrib}}->{$args{orderby}}
|
||||
($classes->{$a}->{$args{attrib}}->{$args{orderby}}
|
||||
== $classes->{$b}->{$args{attrib}}->{$args{orderby}})
|
||||
? $a cmp $b
|
||||
: $classes->{$a}->{$args{attrib}}->{$args{orderby}}
|
||||
<=> $classes->{$b}->{$args{attrib}}->{$args{orderby}}
|
||||
} grep {
|
||||
# Defensive programming
|
||||
|
@@ -262,7 +262,7 @@ sub save_results {
|
||||
PTDEBUG && _d("Save query data");
|
||||
my $insert_query_sth = $dbh->prepare(
|
||||
"INSERT IGNORE INTO `$db`.`queries` (query_id, fingerprint, sample) "
|
||||
. " VALUES (CONV(?, 16, 10), ?, ?)");
|
||||
. " VALUES (?, ?, ?)");
|
||||
foreach my $query_id ( keys %{$self->{queries}} ) {
|
||||
my $query = $self->{queries}->{$query_id};
|
||||
$insert_query_sth->execute(
|
||||
@@ -272,7 +272,7 @@ sub save_results {
|
||||
PTDEBUG && _d("Saving index usage data");
|
||||
my $insert_index_usage_sth = $dbh->prepare(
|
||||
"INSERT INTO `$db`.`index_usage` (query_id, db, tbl, idx, cnt) "
|
||||
. "VALUES (CONV(?, 16, 10), ?, ?, ?, ?) "
|
||||
. "VALUES (?, ?, ?, ?, ?) "
|
||||
. "ON DUPLICATE KEY UPDATE cnt = cnt + ?");
|
||||
foreach my $query_id ( keys %{$self->{index_usage}} ) {
|
||||
foreach my $db ( keys %{$self->{index_usage}->{$query_id}} ) {
|
||||
@@ -291,7 +291,7 @@ sub save_results {
|
||||
my $insert_index_alt_sth = $dbh->prepare(
|
||||
"INSERT INTO `$db`.`index_alternatives` "
|
||||
. "(query_id, db, tbl, idx, alt_idx, cnt) "
|
||||
. "VALUES (CONV(?, 16, 10), ?, ?, ?, ?, ?) "
|
||||
. "VALUES (?, ?, ?, ?, ?, ?) "
|
||||
. "ON DUPLICATE KEY UPDATE cnt = cnt + ?");
|
||||
foreach my $query_id ( keys %{$self->{alt_index_usage}} ) {
|
||||
foreach my $db ( keys %{$self->{alt_index_usage}->{$query_id}} ) {
|
||||
|
@@ -302,10 +302,10 @@ sub parse_event {
|
||||
else {
|
||||
PTDEBUG && _d('Saving new query, state', $curr->[STATE]);
|
||||
push @new_cxn, [
|
||||
@{$curr}[0..7], # proc info
|
||||
int($query_start), # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
@{$curr}[0..7], # proc info
|
||||
$query_start, # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
{ ($curr->[STATE] || "") => 0 }, # PROFILE
|
||||
];
|
||||
}
|
||||
@@ -317,10 +317,10 @@ sub parse_event {
|
||||
# But only save the new cxn if it's executing.
|
||||
PTDEBUG && _d('Saving query of new cxn, state', $curr->[STATE]);
|
||||
push @new_cxn, [
|
||||
@{$curr}[0..7], # proc info
|
||||
int($query_start), # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
@{$curr}[0..7], # proc info
|
||||
$query_start, # START
|
||||
$etime, # ETIME
|
||||
$time, # FSEEN
|
||||
{ ($curr->[STATE] || "") => 0 }, # PROFILE
|
||||
];
|
||||
}
|
||||
|
@@ -98,7 +98,7 @@ sub set_history_options {
|
||||
my $sql = "REPLACE INTO $args{table}("
|
||||
. join(', ',
|
||||
map { Quoter->quote($_) } ('checksum', 'sample', @cols))
|
||||
. ') VALUES (CONV(?, 16, 10), ?'
|
||||
. ') VALUES (?, ?'
|
||||
. (@cols ? ', ' : '') # issue 1265
|
||||
. join(', ', map {
|
||||
# ts_min and ts_max might be part of the PK, in which case they must
|
||||
|
@@ -876,7 +876,7 @@ sub profile {
|
||||
$report->title('Profile');
|
||||
my @cols = (
|
||||
{ name => 'Rank', right_justify => 1, },
|
||||
{ name => 'Query ID', },
|
||||
{ name => 'Query ID', width => 35 },
|
||||
{ name => 'Response time', right_justify => 1, },
|
||||
{ name => 'Calls', right_justify => 1, },
|
||||
{ name => 'R/Call', right_justify => 1, },
|
||||
|
@@ -71,7 +71,7 @@ sub new {
|
||||
my $sql = <<" SQL";
|
||||
INSERT INTO $args{db_tbl}
|
||||
(checksum, fingerprint, sample, first_seen, last_seen)
|
||||
VALUES(CONV(?, 16, 10), ?, ?, COALESCE(?, $now), COALESCE(?, $now))
|
||||
VALUES(?, ?, ?, COALESCE(?, $now), COALESCE(?, $now))
|
||||
ON DUPLICATE KEY UPDATE
|
||||
first_seen = IF(
|
||||
first_seen IS NULL,
|
||||
@@ -90,8 +90,8 @@ sub new {
|
||||
my @review_cols = grep { !$skip_cols{$_} } @{$args{tbl_struct}->{cols}};
|
||||
$sql = "SELECT "
|
||||
. join(', ', map { $args{quoter}->quote($_) } @review_cols)
|
||||
. ", CONV(checksum, 10, 16) AS checksum_conv FROM $args{db_tbl}"
|
||||
. " WHERE checksum=CONV(?, 16, 10)";
|
||||
. ", checksum AS checksum_conv FROM $args{db_tbl}"
|
||||
. " WHERE checksum=?";
|
||||
PTDEBUG && _d('SQL to select from review table:', $sql);
|
||||
my $select_sth = $args{dbh}->prepare($sql);
|
||||
|
||||
|
@@ -94,14 +94,16 @@ sub get_create_table {
|
||||
if ( my $e = $EVAL_ERROR ) {
|
||||
# Restore old SQL mode.
|
||||
PTDEBUG && _d($old_sql_mode);
|
||||
$dbh->do($old_sql_mode);
|
||||
eval { $dbh->do($old_sql_mode); };
|
||||
PTDEBUG && $EVAL_ERROR && _d($EVAL_ERROR);
|
||||
|
||||
die $e;
|
||||
}
|
||||
|
||||
# Restore old SQL mode.
|
||||
PTDEBUG && _d($old_sql_mode);
|
||||
$dbh->do($old_sql_mode);
|
||||
eval { $dbh->do($old_sql_mode); };
|
||||
PTDEBUG && $EVAL_ERROR && _d($EVAL_ERROR);
|
||||
|
||||
# SHOW CREATE TABLE has at least 2 columns like:
|
||||
# mysql> show create table city\G
|
||||
|
@@ -272,7 +272,7 @@ sub any_unix_timestamp {
|
||||
# Returns the rightmost 64 bits of an MD5 checksum of the value.
|
||||
sub make_checksum {
|
||||
my ( $val ) = @_;
|
||||
my $checksum = uc substr(md5_hex($val), -16);
|
||||
my $checksum = uc md5_hex($val);
|
||||
PTDEBUG && _d($checksum, 'checksum for', $val);
|
||||
return $checksum;
|
||||
}
|
||||
|
@@ -17,9 +17,10 @@ else
|
||||
endif
|
||||
|
||||
GO := go
|
||||
CP := )
|
||||
pkgs = $(shell find . -type d -name "pt-*" -exec basename {} \;)
|
||||
# VERSION ?=$(shell git describe --abbrev=0) doesn't always work here, need to use git log
|
||||
VERSION ?=$(shell git log --no-walk --tags --pretty="%H %d" --decorate=short | head -n1 | awk -F'[, ]' '{ print $$4; }')
|
||||
VERSION ?=$(shell git log --no-walk --tags --pretty="%H %d" --decorate=short | head -n1 | awk -F'[, $(CP)]' '{ print $$4; }')
|
||||
BUILD=$(BUILD_DATE)
|
||||
GOVERSION=$(shell go version | cut --delimiter=" " -f3)
|
||||
GOUTILSDIR ?= $(GOPATH)/bin
|
||||
|
@@ -25,18 +25,18 @@ import (
|
||||
)
|
||||
|
||||
// Enable enabled the mongo profiler
|
||||
func Enable(ctx context.Context, client *mongo.Client) error {
|
||||
res := client.Database("admin").RunCommand(ctx, primitive.M{"profile": 2})
|
||||
func Enable(ctx context.Context, client *mongo.Client, database string) error {
|
||||
res := client.Database(database).RunCommand(ctx, primitive.M{"profile": 2})
|
||||
return res.Err()
|
||||
}
|
||||
|
||||
// Disable disables the mongo profiler
|
||||
func Disable(ctx context.Context, client *mongo.Client) error {
|
||||
res := client.Database("admin").RunCommand(ctx, primitive.M{"profile": 0})
|
||||
func Disable(ctx context.Context, client *mongo.Client, database string) error {
|
||||
res := client.Database(database).RunCommand(ctx, primitive.M{"profile": 0})
|
||||
return res.Err()
|
||||
}
|
||||
|
||||
// Drop drops the system.profile collection for clean up
|
||||
func Drop(ctx context.Context, client *mongo.Client) error {
|
||||
return client.Database("").Collection("system.profile").Drop(ctx)
|
||||
func Drop(ctx context.Context, client *mongo.Client, database string) error {
|
||||
return client.Database(database).Collection("system.profile").Drop(ctx)
|
||||
}
|
||||
|
@@ -156,6 +156,10 @@ func (f *Fingerprinter) Fingerprint(doc proto.SystemProfile) (Fingerprint, error
|
||||
op = "eval"
|
||||
collection = ""
|
||||
retKeys = []string{}
|
||||
case "drop":
|
||||
retKeys = []string{}
|
||||
case "createIndexes":
|
||||
retKeys = []string{}
|
||||
}
|
||||
default:
|
||||
op = doc.Op
|
||||
@@ -177,7 +181,6 @@ func (f *Fingerprinter) Fingerprint(doc proto.SystemProfile) (Fingerprint, error
|
||||
if keys != "" {
|
||||
parts = append(parts, keys)
|
||||
}
|
||||
|
||||
ns = []string{}
|
||||
if database != "" {
|
||||
ns = append(ns, database)
|
||||
|
@@ -138,7 +138,7 @@ func (p *Profile) getDocs(ctx context.Context) {
|
||||
for _, filter := range p.filters {
|
||||
if !filter(doc) {
|
||||
valid = false
|
||||
return
|
||||
break
|
||||
}
|
||||
}
|
||||
if !valid {
|
||||
|
@@ -6,7 +6,6 @@ import (
|
||||
"compress/gzip"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
@@ -309,7 +308,7 @@ func (d *Dumper) getResource(name, namespace string, ignoreNotFound bool, tw *ta
|
||||
}
|
||||
|
||||
func (d *Dumper) logError(err string, args ...string) {
|
||||
d.errors += d.cmd + " " + strings.Join(args, " ") + ": " + err + "\n"
|
||||
d.errors += d.cmd + " " + strings.Join(args, " ") + "\n" + err + "\n\n"
|
||||
}
|
||||
|
||||
func addToArchive(location string, mode int64, content []byte, tw *tar.Writer) error {
|
||||
@@ -463,10 +462,9 @@ func (d *Dumper) getPodSummary(resource, podName, crName string, namespace strin
|
||||
cmd.Stderr = &errb
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
return nil, errors.Errorf("error: %v, stderr: %s, stdout: %s", err, errb.String(), outb.String())
|
||||
return nil, errors.Errorf("error: %v\nstderr: %sstdout: %s", err, errb.String(), outb.String())
|
||||
}
|
||||
|
||||
return []byte(fmt.Sprintf("stderr: %s, stdout: %s", errb.String(), outb.String())), nil
|
||||
return outb.Bytes(), nil
|
||||
}
|
||||
|
||||
func (d *Dumper) getCR(crName string, namespace string) (crSecrets, error) {
|
||||
|
@@ -5,9 +5,9 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
"regexp"
|
||||
|
||||
"golang.org/x/exp/slices"
|
||||
)
|
||||
@@ -169,8 +169,56 @@ func TestVersionOption(t *testing.T) {
|
||||
t.Errorf("error executing pt-k8s-debug-collector --version: %s", err.Error())
|
||||
}
|
||||
// We are using MustCompile here, because hard-coded RE should not fail
|
||||
re := regexp.MustCompile(TOOLNAME + `\n.*Version \d+\.\d+\.\d+\n`)
|
||||
re := regexp.MustCompile(TOOLNAME + `\n.*Version v?\d+\.\d+\.\d+\n`)
|
||||
if !re.Match(out) {
|
||||
t.Errorf("pt-k8s-debug-collector --version returns wrong result:\n%s", out)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
If we handle error properly
|
||||
*/
|
||||
func TestPT_2169(t *testing.T) {
|
||||
busyport, _ := os.Getwd() // we are using wrong socket for ssh tunnel here to ensure we get error
|
||||
|
||||
testcmd := []string{"sh", "-c", "tar -xf cluster-dump.tar.gz --wildcards '*/summary.txt' --to-command 'grep stderr:' 2>/dev/null | wc -l"}
|
||||
tests := []struct {
|
||||
name string
|
||||
want string
|
||||
port string
|
||||
kubeconfig string
|
||||
}{
|
||||
{
|
||||
name: "pg",
|
||||
want: "3",
|
||||
port: busyport,
|
||||
kubeconfig: os.Getenv("KUBECONFIG_PG"),
|
||||
},
|
||||
{
|
||||
name: "pg",
|
||||
want: "0",
|
||||
port: os.Getenv("FORWARDPORT"),
|
||||
kubeconfig: os.Getenv("KUBECONFIG_PG"),
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
cmd := exec.Command("../../../bin/pt-k8s-debug-collector", "--kubeconfig", test.kubeconfig, "--forwardport", test.port, "--resource", test.name)
|
||||
if err := cmd.Run(); err != nil {
|
||||
t.Errorf("error executing pt-k8s-debug-collector: %s", err.Error())
|
||||
}
|
||||
defer func() {
|
||||
cmd = exec.Command("rm", "-f", "cluster-dump.tar.gz")
|
||||
if err := cmd.Run(); err != nil {
|
||||
t.Errorf("error cleaning up test data: %s", err.Error())
|
||||
}
|
||||
}()
|
||||
out, err := exec.Command(testcmd[0], testcmd[1:]...).Output()
|
||||
if err != nil {
|
||||
t.Errorf("test %s, error running command %s:\n%s\n\nCommand output:\n%s", test.name, testcmd, err.Error(), out)
|
||||
}
|
||||
if strings.TrimRight(bytes.NewBuffer(out).String(), "\n") != test.want {
|
||||
t.Errorf("test %s, output is not as expected\nOutput: %s\nWanted: %s", test.name, out, test.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
@@ -133,7 +134,7 @@ func main() {
|
||||
log.Fatalf("Cannot connect to MongoDB: %s", err)
|
||||
}
|
||||
|
||||
isProfilerEnabled, err := isProfilerEnabled(ctx, clientOptions)
|
||||
isProfilerEnabled, err := isProfilerEnabled(ctx, clientOptions, opts.Database)
|
||||
if err != nil {
|
||||
log.Errorf("Cannot get profiler status: %s", err.Error())
|
||||
os.Exit(4)
|
||||
@@ -523,19 +524,37 @@ func sortQueries(queries []stats.QueryStats, orderby []string) []stats.QueryStat
|
||||
return queries
|
||||
}
|
||||
|
||||
func isProfilerEnabled(ctx context.Context, clientOptions *options.ClientOptions) (bool, error) {
|
||||
func isProfilerEnabled(ctx context.Context, clientOptions *options.ClientOptions, dbname string) (bool, error) {
|
||||
var ps proto.ProfilerStatus
|
||||
replicaMembers, err := util.GetReplicasetMembers(ctx, clientOptions)
|
||||
if err != nil {
|
||||
if err != nil && !errors.Is(err, util.ShardingNotEnabledError) {
|
||||
return false, err
|
||||
}
|
||||
|
||||
if len(replicaMembers) == 0 {
|
||||
client, err := mongo.NewClient(clientOptions)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
if err = client.Connect(ctx); err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
client.Database(dbname).RunCommand(ctx, primitive.M{"profile": -1}).Decode(&ps)
|
||||
|
||||
if ps.Was == 0 {
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
|
||||
for _, member := range replicaMembers {
|
||||
// Stand alone instances return state = REPLICA_SET_MEMBER_STARTUP
|
||||
client, err := util.GetClientForHost(clientOptions, member.Name)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if err := client.Connect(ctx); err != nil {
|
||||
log.Fatalf("Cannot connect to MongoDB: %s", err)
|
||||
}
|
||||
|
||||
isReplicaEnabled := isReplicasetEnabled(ctx, client)
|
||||
|
||||
@@ -546,7 +565,7 @@ func isProfilerEnabled(ctx context.Context, clientOptions *options.ClientOptions
|
||||
if isReplicaEnabled && member.State != proto.REPLICA_SET_MEMBER_PRIMARY {
|
||||
continue
|
||||
}
|
||||
if err := client.Database("admin").RunCommand(ctx, primitive.M{"profile": -1}).Decode(&ps); err != nil {
|
||||
if err := client.Database(dbname).RunCommand(ctx, primitive.M{"profile": -1}).Decode(&ps); err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
|
@@ -1,475 +1,502 @@
|
||||
package main
|
||||
|
||||
// TODO: Rewrite tests to use the new sandbox
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"sort"
|
||||
"strings"
|
||||
"testing"
|
||||
"text/template"
|
||||
"time"
|
||||
|
||||
// const (
|
||||
// samples = "/src/go/tests/"
|
||||
// )
|
||||
//
|
||||
// type testVars struct {
|
||||
// RootPath string
|
||||
// }
|
||||
//
|
||||
// var vars testVars
|
||||
// var Server dbtest.DBServer
|
||||
//
|
||||
// func TestMain(m *testing.M) {
|
||||
// var err error
|
||||
// if vars.RootPath, err = tutil.RootPath(); err != nil {
|
||||
// log.Printf("cannot get root path: %s", err.Error())
|
||||
// os.Exit(1)
|
||||
// }
|
||||
// os.Exit(m.Run())
|
||||
//
|
||||
// // The tempdir is created so MongoDB has a location to store its files.
|
||||
// // Contents are wiped once the server stops
|
||||
// os.Setenv("CHECK_SESSIONS", "0")
|
||||
// tempDir, _ := ioutil.TempDir("", "testing")
|
||||
// Server.SetPath(tempDir)
|
||||
//
|
||||
// retCode := m.Run()
|
||||
//
|
||||
// Server.Session().Close()
|
||||
// Server.Session().DB("samples").DropDatabase()
|
||||
//
|
||||
// // Stop shuts down the temporary server and removes data on disk.
|
||||
// Server.Stop()
|
||||
//
|
||||
// // call with result of m.Run()
|
||||
// os.Exit(retCode)
|
||||
// }
|
||||
//
|
||||
// func TestIsProfilerEnabled(t *testing.T) {
|
||||
// mongoDSN := os.Getenv("PT_TEST_MONGODB_DSN")
|
||||
// if mongoDSN == "" {
|
||||
// t.Skip("Skippping TestIsProfilerEnabled. It runs only in integration tests")
|
||||
// }
|
||||
//
|
||||
// dialer := pmgo.NewDialer()
|
||||
// di, _ := pmgo.ParseURL(mongoDSN)
|
||||
//
|
||||
// enabled, err := isProfilerEnabled(dialer, di)
|
||||
//
|
||||
// if err != nil {
|
||||
// t.Errorf("Cannot check if profiler is enabled: %s", err.Error())
|
||||
// }
|
||||
// if enabled != true {
|
||||
// t.Error("Profiler must be enabled")
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// func TestParseArgs(t *testing.T) {
|
||||
// tests := []struct {
|
||||
// args []string
|
||||
// want *options
|
||||
// }{
|
||||
// {
|
||||
// args: []string{TOOLNAME}, // arg[0] is the command itself
|
||||
// want: &options{
|
||||
// Host: DEFAULT_HOST,
|
||||
// LogLevel: DEFAULT_LOGLEVEL,
|
||||
// OrderBy: strings.Split(DEFAULT_ORDERBY, ","),
|
||||
// SkipCollections: strings.Split(DEFAULT_SKIPCOLLECTIONS, ","),
|
||||
// AuthDB: DEFAULT_AUTHDB,
|
||||
// OutputFormat: "text",
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// args: []string{TOOLNAME, "zapp.brannigan.net:27018/samples", "--help"},
|
||||
// want: nil,
|
||||
// },
|
||||
// {
|
||||
// args: []string{TOOLNAME, "zapp.brannigan.net:27018/samples"},
|
||||
// want: &options{
|
||||
// Host: "zapp.brannigan.net:27018/samples",
|
||||
// LogLevel: DEFAULT_LOGLEVEL,
|
||||
// OrderBy: strings.Split(DEFAULT_ORDERBY, ","),
|
||||
// SkipCollections: strings.Split(DEFAULT_SKIPCOLLECTIONS, ","),
|
||||
// AuthDB: DEFAULT_AUTHDB,
|
||||
// Help: false,
|
||||
// OutputFormat: "text",
|
||||
// },
|
||||
// },
|
||||
// }
|
||||
// for i, test := range tests {
|
||||
// getopt.Reset()
|
||||
// os.Args = test.args
|
||||
// got, err := getOptions()
|
||||
// if err != nil {
|
||||
// t.Errorf("error parsing command line arguments: %s", err.Error())
|
||||
// }
|
||||
// if !reflect.DeepEqual(got, test.want) {
|
||||
// t.Errorf("invalid command line options test %d\ngot %+v\nwant %+v\n", i, got, test.want)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// type Data struct {
|
||||
// bin string
|
||||
// url string
|
||||
// }
|
||||
//
|
||||
// func TestPTMongoDBQueryDigest(t *testing.T) {
|
||||
// var err error
|
||||
//
|
||||
// binDir, err := ioutil.TempDir("/tmp", "pmm-client-test-bindir-")
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
// defer func() {
|
||||
// err := os.RemoveAll(binDir)
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
// }()
|
||||
//
|
||||
// bin := binDir + "/pt-mongodb-query-digest"
|
||||
// xVariables := map[string]string{
|
||||
// "main.Build": "<Build>",
|
||||
// "main.Version": "<Version>",
|
||||
// "main.GoVersion": "<GoVersion>",
|
||||
// }
|
||||
// var ldflags []string
|
||||
// for x, value := range xVariables {
|
||||
// ldflags = append(ldflags, fmt.Sprintf("-X %s=%s", x, value))
|
||||
// }
|
||||
// cmd := exec.Command(
|
||||
// "go",
|
||||
// "build",
|
||||
// "-o",
|
||||
// bin,
|
||||
// "-ldflags",
|
||||
// strings.Join(ldflags, " "),
|
||||
// )
|
||||
// cmd.Stdout = os.Stdout
|
||||
// cmd.Stderr = os.Stderr
|
||||
// err = cmd.Run()
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
//
|
||||
// data := Data{
|
||||
// bin: bin,
|
||||
// }
|
||||
// tests := []func(*testing.T, Data){
|
||||
// testVersion,
|
||||
// testEmptySystemProfile,
|
||||
// testAllOperationsTemplate,
|
||||
// }
|
||||
// t.Run("pmm-admin", func(t *testing.T) {
|
||||
// for _, f := range tests {
|
||||
// f := f // capture range variable
|
||||
// fName := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name()
|
||||
// t.Run(fName, func(t *testing.T) {
|
||||
// // Clean up system.profile
|
||||
// var err error
|
||||
// data.url = "127.0.0.1/test"
|
||||
// err = profiling.Disable(data.url)
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
// profiling.Drop(data.url)
|
||||
// err = profiling.Enable(data.url)
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
// defer profiling.Disable(data.url)
|
||||
//
|
||||
// // t.Parallel()
|
||||
// f(t, data)
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
//
|
||||
// }
|
||||
//
|
||||
// func testVersion(t *testing.T, data Data) {
|
||||
// cmd := exec.Command(
|
||||
// data.bin,
|
||||
// "--version",
|
||||
// )
|
||||
// output, err := cmd.CombinedOutput()
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
// expected := `pt-mongodb-query-digest
|
||||
// Version <Version>
|
||||
// Build: <Build> using <GoVersion>`
|
||||
//
|
||||
// assertRegexpLines(t, expected, string(output))
|
||||
// }
|
||||
//
|
||||
// func testEmptySystemProfile(t *testing.T, data Data) {
|
||||
// cmd := exec.Command(
|
||||
// data.bin,
|
||||
// data.url,
|
||||
// )
|
||||
// output, err := cmd.CombinedOutput()
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
//
|
||||
// expected := "No queries found in profiler information for database \\\"test\\\""
|
||||
// if !strings.Contains(string(output), expected) {
|
||||
// t.Errorf("Empty system.profile.\nGot:\n%s\nWant:\n%s\n", string(output), expected)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func testAllOperationsTemplate(t *testing.T, data Data) {
|
||||
// dir := vars.RootPath + samples + "/doc/script/profile/"
|
||||
// files, err := ioutil.ReadDir(dir)
|
||||
// if err != nil {
|
||||
// t.Fatalf("cannot list samples: %s", err)
|
||||
// }
|
||||
//
|
||||
// fs := []string{}
|
||||
// for _, file := range files {
|
||||
// fs = append(fs, dir+file.Name())
|
||||
// }
|
||||
// sort.Strings(fs)
|
||||
// err = run(fs...)
|
||||
// if err != nil {
|
||||
// t.Fatalf("cannot execute queries: %s", err)
|
||||
// }
|
||||
//
|
||||
// // disable profiling so pt-mongodb-query digest reads rows from `system.profile`
|
||||
// profiling.Disable(data.url)
|
||||
//
|
||||
// // run profiler
|
||||
// cmd := exec.Command(
|
||||
// data.bin,
|
||||
// data.url,
|
||||
// )
|
||||
//
|
||||
// output, err := cmd.CombinedOutput()
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
//
|
||||
// queries := []stats.QueryStats{
|
||||
// {
|
||||
// ID: "e357abe482dcc0cd03ab742741bf1c86",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "INSERT",
|
||||
// Fingerprint: "INSERT coll",
|
||||
// },
|
||||
// {
|
||||
// ID: "c9b40ce564762834d12b0390a292645c",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "DROP",
|
||||
// Fingerprint: "DROP coll drop",
|
||||
// },
|
||||
// {
|
||||
// ID: "db759bfd83441deecc71382323041ce6",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "GETMORE",
|
||||
// Fingerprint: "GETMORE coll",
|
||||
// },
|
||||
// {
|
||||
// ID: "e72ad41302045bd6c2bcad76511f915a",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "REMOVE",
|
||||
// Fingerprint: "REMOVE coll a,b",
|
||||
// },
|
||||
// {
|
||||
// ID: "30dbfbc89efd8cfd40774dff0266a28f",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "AGGREGATE",
|
||||
// Fingerprint: "AGGREGATE coll a",
|
||||
// },
|
||||
// {
|
||||
// ID: "a6782ae38ef891d5506341a4b0ab2747",
|
||||
// Namespace: "test",
|
||||
// Operation: "EVAL",
|
||||
// Fingerprint: "EVAL",
|
||||
// },
|
||||
// {
|
||||
// ID: "76d7662df07b44135ac3e07e44a6eb39",
|
||||
// Namespace: "",
|
||||
// Operation: "EXPLAIN",
|
||||
// Fingerprint: "EXPLAIN",
|
||||
// },
|
||||
// {
|
||||
// ID: "e8a3f05a4bd3f0bfa7d38eb2372258b1",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "FINDANDMODIFY",
|
||||
// Fingerprint: "FINDANDMODIFY coll a",
|
||||
// },
|
||||
// {
|
||||
// ID: "2a639e77efe3e68399ef9482575b3421",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "FIND",
|
||||
// Fingerprint: "FIND coll",
|
||||
// },
|
||||
// {
|
||||
// ID: "fe0bf975a044fe47fd32b835ceba612d",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "FIND",
|
||||
// Fingerprint: "FIND coll a",
|
||||
// },
|
||||
// {
|
||||
// ID: "20fe80188ec82c9d3c3dcf3f4817f8f9",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "FIND",
|
||||
// Fingerprint: "FIND coll b,c",
|
||||
// },
|
||||
// {
|
||||
// ID: "02104210d67fe680273784d833f86831",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "FIND",
|
||||
// Fingerprint: "FIND coll c,k,pad",
|
||||
// },
|
||||
// {
|
||||
// ID: "5efe4738d807c74b3980de76c37a0870",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "FIND",
|
||||
// Fingerprint: "FIND coll k",
|
||||
// },
|
||||
// {
|
||||
// ID: "798d7c1cd25b63cb6a307126a25910d6",
|
||||
// Namespace: "test.system.js",
|
||||
// Operation: "FIND",
|
||||
// Fingerprint: "FIND system.js",
|
||||
// },
|
||||
// {
|
||||
// ID: "c70403cbd55ffbb07f08c0cb77a24b19",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "GEONEAR",
|
||||
// Fingerprint: "GEONEAR coll",
|
||||
// },
|
||||
// {
|
||||
// ID: "e4122a58c99ab0a4020ce7d195c5a8cb",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "DISTINCT",
|
||||
// Fingerprint: "DISTINCT coll a,b",
|
||||
// },
|
||||
// {
|
||||
// ID: "ca8bb19386488570447f5753741fb494",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "GROUP",
|
||||
// Fingerprint: "GROUP coll a,b",
|
||||
// },
|
||||
// {
|
||||
// ID: "10b8f47b366fbfd1fb01f8d17d75b1a2",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "COUNT",
|
||||
// Fingerprint: "COUNT coll a",
|
||||
// },
|
||||
// {
|
||||
// ID: "cc3cb3824eea4094eb042f5ca76bd385",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "MAPREDUCE",
|
||||
// Fingerprint: "MAPREDUCE coll a",
|
||||
// },
|
||||
// {
|
||||
// ID: "cba2dff0740762c6e5769f0e300df676",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "COUNT",
|
||||
// Fingerprint: "COUNT coll",
|
||||
// },
|
||||
// {
|
||||
// ID: "f74a5120ac22d02120ccbf6d478b0dbc",
|
||||
// Namespace: "test.coll",
|
||||
// Operation: "UPDATE",
|
||||
// Fingerprint: "UPDATE coll a",
|
||||
// },
|
||||
// }
|
||||
//
|
||||
// expected := `Profiler is disabled for the "test" database but there are \s*[0-9]+ documents in the system.profile collection.
|
||||
// Using those documents for the stats
|
||||
//
|
||||
// # Totals
|
||||
// # Ratio [0-9\.]+ \(docs scanned/returned\)
|
||||
// # Attribute pct total min max avg 95% stddev median
|
||||
// # ================== === ======== ======== ======== ======== ======== ======= ========
|
||||
// # Count \(docs\) (\s*[0-9]+)\s
|
||||
// # Exec Time ms (\s*[0-9]+){8}\s
|
||||
// # Docs Scanned (\s*[0-9\.]+){8}\s
|
||||
// # Docs Returned (\s*[0-9\.]+){8}\s
|
||||
// # Bytes sent (\s*[0-9\.K]+){8}(K|\s)
|
||||
// #\s
|
||||
// `
|
||||
//
|
||||
// queryTpl := `
|
||||
// # Query [0-9]+: [0-9\.]+ QPS, ID {{.ID}}
|
||||
// # Ratio [0-9\.]+ \(docs scanned/returned\)
|
||||
// # Time range: .* to .*
|
||||
// # Attribute pct total min max avg 95% stddev median
|
||||
// # ================== === ======== ======== ======== ======== ======== ======= ========
|
||||
// # Count \(docs\) (\s*[0-9]+)\s
|
||||
// # Exec Time ms (\s*[0-9]+){8}\s
|
||||
// # Docs Scanned (\s*[0-9\.]+){8}\s
|
||||
// # Docs Returned (\s*[0-9\.]+){8}\s
|
||||
// # Bytes sent (\s*[0-9\.K]+){8}(K|\s)
|
||||
// # String:
|
||||
// # Namespace {{.Namespace}}
|
||||
// # Operation {{.Operation}}
|
||||
// # Fingerprint {{.Fingerprint}}
|
||||
// # Query .*
|
||||
//
|
||||
// `
|
||||
//
|
||||
// tpl, _ := template.New("query").Parse(queryTpl)
|
||||
// for _, query := range queries {
|
||||
// buf := bytes.Buffer{}
|
||||
// err := tpl.Execute(&buf, query)
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
//
|
||||
// expected += buf.String()
|
||||
// }
|
||||
// expected += "\n" // Looks like we expect additional line
|
||||
//
|
||||
// assertRegexpLines(t, expected, string(output))
|
||||
// }
|
||||
//
|
||||
// // assertRegexpLines matches regexp line by line to corresponding line of text
|
||||
// func assertRegexpLines(t *testing.T, rx string, str string, msgAndArgs ...interface{}) bool {
|
||||
// expectedScanner := bufio.NewScanner(strings.NewReader(rx))
|
||||
// defer func() {
|
||||
// if err := expectedScanner.Err(); err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// }()
|
||||
//
|
||||
// actualScanner := bufio.NewScanner(strings.NewReader(str))
|
||||
// defer func() {
|
||||
// if err := actualScanner.Err(); err != nil {
|
||||
// t.Fatal(err)
|
||||
// }
|
||||
// }()
|
||||
//
|
||||
// ok := true
|
||||
// for {
|
||||
// asOk := actualScanner.Scan()
|
||||
// esOk := expectedScanner.Scan()
|
||||
//
|
||||
// switch {
|
||||
// case asOk && esOk:
|
||||
// ok, err := regexp.MatchString("^"+expectedScanner.Text()+"$", actualScanner.Text())
|
||||
// if err != nil {
|
||||
// t.Error(err)
|
||||
// }
|
||||
// if !ok {
|
||||
// t.Errorf("regexp '%s' doesn't match '%s'", expectedScanner.Text(), actualScanner.Text())
|
||||
// }
|
||||
// case asOk:
|
||||
// t.Errorf("didn't expect more lines but got: %s", actualScanner.Text())
|
||||
// ok = false
|
||||
// case esOk:
|
||||
// t.Errorf("didn't got line but expected it to match against: %s", expectedScanner.Text())
|
||||
// ok = false
|
||||
// default:
|
||||
// return ok
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func run(arg ...string) error {
|
||||
// ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
// defer cancel()
|
||||
// return exec.CommandContext(ctx, "mongo", arg...).Run()
|
||||
// }
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
|
||||
"github.com/pborman/getopt"
|
||||
"github.com/percona/percona-toolkit/src/go/lib/profiling"
|
||||
"github.com/percona/percona-toolkit/src/go/lib/tutil"
|
||||
"github.com/percona/percona-toolkit/src/go/mongolib/stats"
|
||||
)
|
||||
|
||||
const (
|
||||
samples = "/src/go/tests/"
|
||||
)
|
||||
|
||||
type testVars struct {
|
||||
RootPath string
|
||||
}
|
||||
|
||||
type Data struct {
|
||||
bin string
|
||||
url string
|
||||
db string
|
||||
}
|
||||
|
||||
var vars testVars
|
||||
var client *mongo.Client
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
var err error
|
||||
if vars.RootPath, err = tutil.RootPath(); err != nil {
|
||||
log.Printf("cannot get root path: %s", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
client, err = mongo.Connect(context.TODO(), options.Client().ApplyURI(os.Getenv("PT_TEST_MONGODB_DSN")))
|
||||
if err != nil {
|
||||
log.Printf("Cannot connect: %s", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
err = profiling.Disable(context.TODO(), client, "test")
|
||||
if err != nil {
|
||||
log.Printf("Cannot disable profile: %s", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
err = profiling.Drop(context.TODO(), client, "test")
|
||||
if err != nil {
|
||||
log.Printf("Cannot drop profile database: %s", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
err = profiling.Enable(context.TODO(), client, "test")
|
||||
if err != nil {
|
||||
log.Printf("Cannot enable profile: %s", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
retCode := m.Run()
|
||||
|
||||
err = profiling.Disable(context.TODO(), client, "test")
|
||||
if err != nil {
|
||||
log.Printf("Cannot disable profile: %s", err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
os.Exit(retCode)
|
||||
}
|
||||
|
||||
func TestIsProfilerEnabled(t *testing.T) {
|
||||
mongoDSN := os.Getenv("PT_TEST_MONGODB_DSN")
|
||||
if mongoDSN == "" {
|
||||
t.Skip("Skippping TestIsProfilerEnabled. It runs only in integration tests")
|
||||
}
|
||||
|
||||
enabled, err := isProfilerEnabled(context.TODO(), options.Client().ApplyURI(mongoDSN), "test")
|
||||
//
|
||||
if err != nil {
|
||||
t.Errorf("Cannot check if profiler is enabled: %s", err.Error())
|
||||
}
|
||||
if enabled != true {
|
||||
t.Error("Profiler must be enabled")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseArgs(t *testing.T) {
|
||||
tests := []struct {
|
||||
args []string
|
||||
want *cliOptions
|
||||
}{
|
||||
{
|
||||
args: []string{TOOLNAME}, // arg[0] is the command itself
|
||||
want: &cliOptions{
|
||||
Host: "mongodb://" + DEFAULT_HOST,
|
||||
LogLevel: DEFAULT_LOGLEVEL,
|
||||
OrderBy: strings.Split(DEFAULT_ORDERBY, ","),
|
||||
SkipCollections: strings.Split(DEFAULT_SKIPCOLLECTIONS, ","),
|
||||
AuthDB: DEFAULT_AUTHDB,
|
||||
OutputFormat: "text",
|
||||
},
|
||||
},
|
||||
{
|
||||
args: []string{TOOLNAME, "zapp.brannigan.net:27018/samples", "--help"},
|
||||
want: nil,
|
||||
},
|
||||
{
|
||||
args: []string{TOOLNAME, "zapp.brannigan.net:27018/samples"},
|
||||
want: &cliOptions{
|
||||
Host: "mongodb://zapp.brannigan.net:27018/samples",
|
||||
LogLevel: DEFAULT_LOGLEVEL,
|
||||
OrderBy: strings.Split(DEFAULT_ORDERBY, ","),
|
||||
SkipCollections: strings.Split(DEFAULT_SKIPCOLLECTIONS, ","),
|
||||
AuthDB: DEFAULT_AUTHDB,
|
||||
Help: false,
|
||||
OutputFormat: "text",
|
||||
},
|
||||
},
|
||||
}
|
||||
for i, test := range tests {
|
||||
getopt.Reset()
|
||||
os.Args = test.args
|
||||
//disabling Stdout to avoid printing help message to the screen
|
||||
sout := os.Stdout
|
||||
os.Stdout = nil
|
||||
got, err := getOptions()
|
||||
os.Stdout = sout
|
||||
if err != nil {
|
||||
t.Errorf("error parsing command line arguments: %s", err.Error())
|
||||
}
|
||||
if !reflect.DeepEqual(got, test.want) {
|
||||
t.Errorf("invalid command line options test %d\ngot %+v\nwant %+v\n", i, got, test.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestPTMongoDBQueryDigest(t *testing.T) {
|
||||
var err error
|
||||
//
|
||||
binDir, err := ioutil.TempDir("/tmp", "pt-test-bindir")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
defer func() {
|
||||
err := os.RemoveAll(binDir)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}()
|
||||
//
|
||||
bin := binDir + "/pt-mongodb-query-digest"
|
||||
xVariables := map[string]string{
|
||||
"main.Build": "<Build>",
|
||||
"main.Version": "<Version>",
|
||||
"main.GoVersion": "<GoVersion>",
|
||||
"main.Commit": "<Commit>",
|
||||
}
|
||||
var ldflags []string
|
||||
for x, value := range xVariables {
|
||||
ldflags = append(ldflags, fmt.Sprintf("-X %s=%s", x, value))
|
||||
}
|
||||
cmd := exec.Command(
|
||||
"go",
|
||||
"build",
|
||||
"-o",
|
||||
bin,
|
||||
"-ldflags",
|
||||
strings.Join(ldflags, " "),
|
||||
)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
//
|
||||
data := Data{
|
||||
bin: bin,
|
||||
url: os.Getenv("PT_TEST_MONGODB_DSN"),
|
||||
db: "test",
|
||||
}
|
||||
tests := []func(*testing.T, Data){
|
||||
testVersion,
|
||||
testEmptySystemProfile,
|
||||
testAllOperationsTemplate,
|
||||
}
|
||||
|
||||
t.Run("pt-mongodb-query-digest", func(t *testing.T) {
|
||||
for _, f := range tests {
|
||||
f := f // capture range variable
|
||||
fName := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name()
|
||||
t.Run(fName, func(t *testing.T) {
|
||||
// Clean up system.profile
|
||||
var err error
|
||||
err = profiling.Disable(context.TODO(), client, data.db)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
profiling.Drop(context.TODO(), client, data.db)
|
||||
err = profiling.Enable(context.TODO(), client, data.db)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
defer profiling.Disable(context.TODO(), client, data.db)
|
||||
//
|
||||
// t.Parallel()
|
||||
f(t, data)
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func testVersion(t *testing.T, data Data) {
|
||||
cmd := exec.Command(
|
||||
data.bin,
|
||||
"--version",
|
||||
)
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
expected := `pt-mongodb-query-digest
|
||||
Version <Version>
|
||||
Build: <Build> using <GoVersion>
|
||||
Commit: <Commit>`
|
||||
//
|
||||
assertRegexpLines(t, expected, string(output))
|
||||
}
|
||||
|
||||
func testEmptySystemProfile(t *testing.T, data Data) {
|
||||
cmd := exec.Command(
|
||||
data.bin,
|
||||
data.url,
|
||||
"--database="+data.db,
|
||||
)
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
//
|
||||
expected := "No queries found in profiler information for database \\\"" + data.db + "\\\""
|
||||
if !strings.Contains(string(output), expected) {
|
||||
t.Errorf("Empty system.profile.\nGot:\n%s\nWant:\n%s\n", string(output), expected)
|
||||
}
|
||||
}
|
||||
|
||||
func testAllOperationsTemplate(t *testing.T, data Data) {
|
||||
dir := vars.RootPath + samples + "/doc/script/profile/"
|
||||
files, err := ioutil.ReadDir(dir)
|
||||
if err != nil {
|
||||
t.Fatalf("cannot list samples: %s", err)
|
||||
}
|
||||
//
|
||||
fs := []string{}
|
||||
for _, file := range files {
|
||||
fs = append(fs, dir+file.Name())
|
||||
}
|
||||
sort.Strings(fs)
|
||||
fs = append([]string{os.Getenv("PT_TEST_MONGODB_DSN")}, fs...)
|
||||
err = run(fs...)
|
||||
if err != nil {
|
||||
t.Fatalf("cannot execute queries: %s", err)
|
||||
}
|
||||
//
|
||||
// disable profiling so pt-mongodb-query digest reads rows from `system.profile`
|
||||
|
||||
profiling.Disable(context.TODO(), client, data.db)
|
||||
//
|
||||
// run profiler
|
||||
cmd := exec.Command(
|
||||
data.bin,
|
||||
data.url,
|
||||
"--database="+data.db,
|
||||
)
|
||||
//
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
//
|
||||
queries := []stats.QueryStats{
|
||||
{
|
||||
ID: "e357abe482dcc0cd03ab742741bf1c86",
|
||||
Namespace: "test.coll",
|
||||
Operation: "INSERT",
|
||||
Fingerprint: "INSERT coll",
|
||||
},
|
||||
{
|
||||
ID: "22eda5c05290c1af6dbffd8c38aceff6",
|
||||
Namespace: "test.coll",
|
||||
Operation: "DROP",
|
||||
Fingerprint: "DROP coll",
|
||||
},
|
||||
{
|
||||
ID: "ba1d8c1620d1aaf36c1010c809ec462b",
|
||||
Namespace: "test.coll",
|
||||
Operation: "CREATEINDEXES",
|
||||
Fingerprint: "CREATEINDEXES coll",
|
||||
},
|
||||
{
|
||||
ID: "db759bfd83441deecc71382323041ce6",
|
||||
Namespace: "test.coll",
|
||||
Operation: "GETMORE",
|
||||
Fingerprint: "GETMORE coll",
|
||||
},
|
||||
{
|
||||
ID: "e72ad41302045bd6c2bcad76511f915a",
|
||||
Namespace: "test.coll",
|
||||
Operation: "REMOVE",
|
||||
Fingerprint: "REMOVE coll a,b",
|
||||
},
|
||||
{
|
||||
ID: "2a639e77efe3e68399ef9482575b3421",
|
||||
Namespace: "test.coll",
|
||||
Operation: "FIND",
|
||||
Fingerprint: "FIND coll",
|
||||
},
|
||||
{
|
||||
ID: "76d7662df07b44135ac3e07e44a6eb39",
|
||||
Namespace: "",
|
||||
Operation: "EXPLAIN",
|
||||
Fingerprint: "EXPLAIN",
|
||||
},
|
||||
{
|
||||
ID: "e8a3f05a4bd3f0bfa7d38eb2372258b1",
|
||||
Namespace: "test.coll",
|
||||
Operation: "FINDANDMODIFY",
|
||||
Fingerprint: "FINDANDMODIFY coll a",
|
||||
},
|
||||
{
|
||||
ID: "30dbfbc89efd8cfd40774dff0266a28f",
|
||||
Namespace: "test.coll",
|
||||
Operation: "AGGREGATE",
|
||||
Fingerprint: "AGGREGATE coll a",
|
||||
},
|
||||
{
|
||||
ID: "fe0bf975a044fe47fd32b835ceba612d",
|
||||
Namespace: "test.coll",
|
||||
Operation: "FIND",
|
||||
Fingerprint: "FIND coll a",
|
||||
},
|
||||
{
|
||||
ID: "20fe80188ec82c9d3c3dcf3f4817f8f9",
|
||||
Namespace: "test.coll",
|
||||
Operation: "FIND",
|
||||
Fingerprint: "FIND coll b,c",
|
||||
},
|
||||
{
|
||||
ID: "02104210d67fe680273784d833f86831",
|
||||
Namespace: "test.coll",
|
||||
Operation: "FIND",
|
||||
Fingerprint: "FIND coll c,k,pad",
|
||||
},
|
||||
{
|
||||
ID: "5efe4738d807c74b3980de76c37a0870",
|
||||
Namespace: "test.coll",
|
||||
Operation: "FIND",
|
||||
Fingerprint: "FIND coll k",
|
||||
},
|
||||
{
|
||||
ID: "e4122a58c99ab0a4020ce7d195c5a8cb",
|
||||
Namespace: "test.coll",
|
||||
Operation: "DISTINCT",
|
||||
Fingerprint: "DISTINCT coll a,b",
|
||||
},
|
||||
{
|
||||
ID: "10b8f47b366fbfd1fb01f8d17d75b1a2",
|
||||
Namespace: "test.coll",
|
||||
Operation: "COUNT",
|
||||
Fingerprint: "COUNT coll a",
|
||||
},
|
||||
{
|
||||
ID: "cc3cb3824eea4094eb042f5ca76bd385",
|
||||
Namespace: "test.coll",
|
||||
Operation: "MAPREDUCE",
|
||||
Fingerprint: "MAPREDUCE coll a",
|
||||
},
|
||||
{
|
||||
ID: "cba2dff0740762c6e5769f0e300df676",
|
||||
Namespace: "test.coll",
|
||||
Operation: "COUNT",
|
||||
Fingerprint: "COUNT coll",
|
||||
},
|
||||
{
|
||||
ID: "f74a5120ac22d02120ccbf6d478b0dbc",
|
||||
Namespace: "test.coll",
|
||||
Operation: "UPDATE",
|
||||
Fingerprint: "UPDATE coll a",
|
||||
},
|
||||
}
|
||||
//
|
||||
expected := `Profiler is disabled for the "test" database but there are \s*[0-9]+ documents in the system.profile collection.
|
||||
Using those documents for the stats
|
||||
|
||||
# Totals
|
||||
# Ratio [0-9\.]+ \(docs scanned/returned\)
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ================== === ======== ======== ======== ======== ======== ======= ========
|
||||
# Count \(docs\) (\s*[0-9]+)\s
|
||||
# Exec Time ms (\s*[0-9]+){8}\s
|
||||
# Docs Scanned (\s*[0-9\.]+){8}\s
|
||||
# Docs Returned (\s*[0-9\.]+){8}\s
|
||||
# Bytes sent (\s*[0-9\.K]+){8}(K|\s)
|
||||
#\s
|
||||
`
|
||||
//
|
||||
queryTpl := `
|
||||
# Query [0-9]+: [0-9\.]+ QPS, ID {{.ID}}
|
||||
# Ratio [0-9\.]+ \(docs scanned/returned\)
|
||||
# Time range: .* to .*
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ================== === ======== ======== ======== ======== ======== ======= ========
|
||||
# Count \(docs\) (\s*[0-9]+)\s
|
||||
# Exec Time ms (\s*[0-9]+){8}\s
|
||||
# Docs Scanned (\s*[0-9\.]+){8}\s
|
||||
# Docs Returned (\s*[0-9\.]+){8}\s
|
||||
# Bytes sent (\s*[0-9\.K]+){8}(K|\s)
|
||||
# String:
|
||||
# Namespace {{.Namespace}}
|
||||
# Operation {{.Operation}}
|
||||
# Fingerprint {{.Fingerprint}}
|
||||
# Query .*
|
||||
`
|
||||
//
|
||||
tpl, _ := template.New("query").Parse(queryTpl)
|
||||
for _, query := range queries {
|
||||
buf := bytes.Buffer{}
|
||||
err := tpl.Execute(&buf, query)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
//
|
||||
expected += buf.String()
|
||||
}
|
||||
expected += "\n" // Looks like we expect additional line
|
||||
//
|
||||
assertRegexpLines(t, expected, string(output))
|
||||
}
|
||||
|
||||
// assertRegexpLines matches regexp line by line to corresponding line of text
|
||||
func assertRegexpLines(t *testing.T, rx string, str string, msgAndArgs ...interface{}) bool {
|
||||
expectedScanner := bufio.NewScanner(strings.NewReader(rx))
|
||||
defer func() {
|
||||
if err := expectedScanner.Err(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}()
|
||||
//
|
||||
actualScanner := bufio.NewScanner(strings.NewReader(str))
|
||||
defer func() {
|
||||
if err := actualScanner.Err(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}()
|
||||
//
|
||||
ok := true
|
||||
for {
|
||||
asOk := actualScanner.Scan()
|
||||
esOk := expectedScanner.Scan()
|
||||
//
|
||||
switch {
|
||||
case asOk && esOk:
|
||||
ok, err := regexp.MatchString("^"+expectedScanner.Text()+"$", actualScanner.Text())
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
if !ok {
|
||||
t.Errorf("regexp '%s' doesn't match '%s'", expectedScanner.Text(), actualScanner.Text())
|
||||
}
|
||||
case asOk:
|
||||
t.Errorf("didn't expect more lines but got: %s", actualScanner.Text())
|
||||
ok = false
|
||||
case esOk:
|
||||
t.Errorf("didn't got line but expected it to match against: %s", expectedScanner.Text())
|
||||
ok = false
|
||||
default:
|
||||
return ok
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func run(arg ...string) error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
return exec.CommandContext(ctx, "mongo", arg...).Run()
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@ func sanitizeFile(opts *cliOptions) error {
|
||||
}
|
||||
|
||||
if *opts.SanitizeOutputFile != "" {
|
||||
ifh, err = os.Create(*opts.SanitizeOutputFile)
|
||||
ofh, err = os.Create(*opts.SanitizeOutputFile)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "Cannot create output file %q", *opts.SanitizeOutputFile)
|
||||
}
|
||||
|
@@ -1 +0,0 @@
|
||||
db.eval("1");
|
@@ -1,14 +0,0 @@
|
||||
var coll = db.coll;
|
||||
coll.drop();
|
||||
|
||||
for (var i = 0; i < 10; ++i) {
|
||||
coll.insert({a: i, b: i % 5});
|
||||
}
|
||||
coll.createIndex({b: -1});
|
||||
|
||||
coll.group({
|
||||
key: {a: 1, b: 1},
|
||||
cond: {b: 3},
|
||||
reduce: function() {},
|
||||
initial: {}
|
||||
});
|
@@ -151,15 +151,15 @@ $rows = $dbh->selectall_arrayref("select * from mk.queries order by query_id");
|
||||
is_deeply(
|
||||
$rows,
|
||||
[
|
||||
[ "4950186562421969363",
|
||||
[ "3608BDE3153F5A7544B298738912D1D3",
|
||||
"select * from sakila.actor where last_name like ?",
|
||||
"select * from sakila.actor where last_name like 'A%'",
|
||||
],
|
||||
[ "10334408417593890092",
|
||||
[ "6305C691826EDFA28F6B31B3A67D952C",
|
||||
"select * from sakila.actor where last_name like ? order by actor_id",
|
||||
"select * from sakila.actor where last_name like 'A%' order by actor_id",
|
||||
],
|
||||
[ "10891801448710051322",
|
||||
[ "CAF7BE5C0CBA7D07972773B5DA7295FA",
|
||||
"select * from sakila.actor where actor_id>?",
|
||||
"select * from sakila.actor where actor_id>10",
|
||||
],
|
||||
@@ -172,19 +172,19 @@ $res = $exp_plan eq '5.1' ?
|
||||
# v5.1 and newer
|
||||
[
|
||||
[
|
||||
"4950186562421969363",
|
||||
"3608BDE3153F5A7544B298738912D1D3",
|
||||
qw(sakila actor idx_actor_last_name),
|
||||
"select * from sakila.actor where last_name like 'A%'",
|
||||
1,
|
||||
],
|
||||
[
|
||||
"10891801448710051322",
|
||||
"6305C691826EDFA28F6B31B3A67D952C",
|
||||
qw(sakila actor PRIMARY),
|
||||
"select * from sakila.actor where actor_id>10",
|
||||
2,
|
||||
],
|
||||
[
|
||||
"10334408417593890092",
|
||||
"CAF7BE5C0CBA7D07972773B5DA7295FA",
|
||||
qw(sakila actor PRIMARY),
|
||||
"select * from sakila.actor where last_name like 'A%' order by actor_id",
|
||||
1,
|
||||
@@ -194,19 +194,19 @@ $res = $exp_plan eq '5.1' ?
|
||||
# v5.0 and older
|
||||
[
|
||||
[
|
||||
"4950186562421969363",
|
||||
"3608BDE3153F5A7544B298738912D1D3",
|
||||
qw(sakila actor idx_actor_last_name),
|
||||
"select * from sakila.actor where last_name like 'A%'",
|
||||
1,
|
||||
],
|
||||
[
|
||||
"10334408417593890092",
|
||||
"6305C691826EDFA28F6B31B3A67D952C",
|
||||
qw(sakila actor idx_actor_last_name),
|
||||
"select * from sakila.actor where last_name like 'A%' order by actor_id",
|
||||
1,
|
||||
],
|
||||
[
|
||||
"10891801448710051322",
|
||||
"CAF7BE5C0CBA7D07972773B5DA7295FA",
|
||||
qw(sakila actor PRIMARY),
|
||||
"select * from sakila.actor where actor_id>10",
|
||||
2,
|
||||
@@ -273,15 +273,16 @@ $rows = $dbh->selectall_arrayref("select * from mk.queries order by query_id");
|
||||
is_deeply(
|
||||
$rows,
|
||||
[
|
||||
[ "4950186562421969363",
|
||||
[ "3608BDE3153F5A7544B298738912D1D3",
|
||||
"select * from sakila.actor where last_name like ?",
|
||||
"select * from sakila.actor where last_name like 'A%'",
|
||||
],
|
||||
[ "10334408417593890092",
|
||||
[ "6305C691826EDFA28F6B31B3A67D952C",
|
||||
"select * from sakila.actor where last_name like ? order by actor_id",
|
||||
"select * from sakila.actor where last_name like 'A%' order by actor_id",
|
||||
],
|
||||
[ "10891801448710051322",
|
||||
[
|
||||
"CAF7BE5C0CBA7D07972773B5DA7295FA",
|
||||
"select * from sakila.actor where actor_id>?",
|
||||
"select * from sakila.actor where actor_id>10",
|
||||
],
|
||||
@@ -294,19 +295,19 @@ $res = $exp_plan eq '5.1' ?
|
||||
# v5.1 and newer
|
||||
[
|
||||
[
|
||||
"4950186562421969363",
|
||||
"3608BDE3153F5A7544B298738912D1D3",
|
||||
qw(sakila actor idx_actor_last_name),
|
||||
"select * from sakila.actor where last_name like 'A%'",
|
||||
2,
|
||||
],
|
||||
[
|
||||
"10891801448710051322",
|
||||
"6305C691826EDFA28F6B31B3A67D952C",
|
||||
qw(sakila actor PRIMARY),
|
||||
"select * from sakila.actor where actor_id>10",
|
||||
4,
|
||||
],
|
||||
[
|
||||
"10334408417593890092",
|
||||
"CAF7BE5C0CBA7D07972773B5DA7295FA",
|
||||
qw(sakila actor PRIMARY),
|
||||
"select * from sakila.actor where last_name like 'A%' order by actor_id",
|
||||
2,
|
||||
@@ -316,19 +317,19 @@ $res = $exp_plan eq '5.1' ?
|
||||
# v5.0 and older
|
||||
[
|
||||
[
|
||||
"4950186562421969363",
|
||||
"3608BDE3153F5A7544B298738912D1D3",
|
||||
qw(sakila actor idx_actor_last_name),
|
||||
"select * from sakila.actor where last_name like 'A%'",
|
||||
2,
|
||||
],
|
||||
[
|
||||
"10334408417593890092",
|
||||
"6305C691826EDFA28F6B31B3A67D952C",
|
||||
qw(sakila actor idx_actor_last_name),
|
||||
"select * from sakila.actor where last_name like 'A%' order by actor_id",
|
||||
2,
|
||||
],
|
||||
[
|
||||
"10891801448710051322",
|
||||
"CAF7BE5C0CBA7D07972773B5DA7295FA",
|
||||
qw(sakila actor PRIMARY),
|
||||
"select * from sakila.actor where actor_id>10",
|
||||
4,
|
||||
|
@@ -143,7 +143,7 @@ $output = output(
|
||||
);
|
||||
like(
|
||||
$output,
|
||||
qr/0x69962191E64980E6/,
|
||||
qr/0x877B0CFF7AD32CA969962191E64980E6/,
|
||||
'--query-id'
|
||||
);
|
||||
|
||||
@@ -153,7 +153,7 @@ $output = output(
|
||||
);
|
||||
like(
|
||||
$output,
|
||||
qr/\{"Command"\:"Query","Db"\:"db","Digest"\:"69962191E64980E6","Host"\:"127\.0\.0\.1\:3306","Id"\:"4","Info"\:"\\\/\* fruit\=orange \*\\\/ select 1 from fuits;","Kill_Error"\:"","Reason"\:"","State"\:"statistics","Time"\:"6","Timestamp"\:".*","User"\:"foo","key"\:"value"\}/,
|
||||
qr/\{"Command"\:"Query","Db"\:"db","Digest"\:"877B0CFF7AD32CA969962191E64980E6","Host"\:"127\.0\.0\.1\:3306","Id"\:"4","Info"\:"\\\/\* fruit\=orange \*\\\/ select 1 from fuits;","Kill_Error"\:"","Reason"\:"","State"\:"statistics","Time"\:"6","Timestamp"\:".*","User"\:"foo","key"\:"value"\}/,
|
||||
'--json'
|
||||
);
|
||||
|
||||
|
@@ -459,11 +459,16 @@ $sb->do_as_root("master", q/set sql_log_bin=0/);
|
||||
$sb->do_as_root("master", q/DROP USER 'slave_user'/);
|
||||
$sb->do_as_root("master", q/set sql_log_bin=1/);
|
||||
|
||||
# Need to wait for both slaves here to avoid deadlock
|
||||
$sb->wait_for_slaves(slave => 'slave1');
|
||||
$sb->wait_for_slaves(slave => 'slave2');
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
$sb->wipe_clean($master_dbh);
|
||||
$sb->wait_for_slaves();
|
||||
# Need to wait for both slaves here to avoid deadlock
|
||||
$sb->wait_for_slaves(slave => 'slave1');
|
||||
$sb->wait_for_slaves(slave => 'slave2');
|
||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||
#
|
||||
done_testing;
|
||||
|
68
t/pt-online-schema-change/pt-2048.t
Normal file
68
t/pt-online-schema-change/pt-2048.t
Normal file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
BEGIN {
|
||||
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
|
||||
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
|
||||
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
|
||||
};
|
||||
|
||||
use strict;
|
||||
use warnings FATAL => 'all';
|
||||
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
use PerconaTest;
|
||||
use Sandbox;
|
||||
|
||||
require "$trunk/bin/pt-online-schema-change";
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
|
||||
my $dbh = $sb->get_dbh_for('master');
|
||||
my $slave_dbh = $sb->get_dbh_for('slave1');
|
||||
my $dsn = $sb->dsn_for("master");
|
||||
|
||||
if ( !$dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
}
|
||||
elsif ( !$slave_dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox slave';
|
||||
}
|
||||
else {
|
||||
plan tests => 2;
|
||||
}
|
||||
|
||||
# The sandbox servers run with lock_wait_timeout=3 and it's not dynamic
|
||||
# so we need to specify --set-vars innodb_lock_wait_timeout=3 else the
|
||||
# tool will die.
|
||||
my @args = (qw(--set-vars innodb_lock_wait_timeout=3));
|
||||
my $output;
|
||||
my $exit_status;
|
||||
|
||||
$sb->load_file('master', "t/pt-online-schema-change/samples/pt-2048.sql");
|
||||
|
||||
my $rows_before = $slave_dbh->selectrow_arrayref("select total_connections from performance_schema.users where user like 'msandbox';");
|
||||
|
||||
($output, $exit_status) = full_output(
|
||||
sub { pt_online_schema_change::main(@args, "$dsn,D=test,t=joinit",
|
||||
'--execute', '--charset=utf8', '--chunk-size', '2', '--alter', 'engine=innodb',
|
||||
),
|
||||
},
|
||||
stderr => 1,
|
||||
);
|
||||
|
||||
my $rows_after = $slave_dbh->selectrow_arrayref("select total_connections from performance_schema.users where user like 'msandbox';");
|
||||
|
||||
cmp_ok(
|
||||
$rows_after->[0] - $rows_before->[0], '<', 10,
|
||||
"pt-2048 reasonable number of connections"
|
||||
);
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
$sb->wipe_clean($dbh);
|
||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||
done_testing;
|
25
t/pt-online-schema-change/samples/pt-2048.sql
Normal file
25
t/pt-online-schema-change/samples/pt-2048.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
DROP DATABASE IF EXISTS test;
|
||||
CREATE DATABASE test;
|
||||
|
||||
USE test;
|
||||
|
||||
DROP TABLE IF EXISTS `joinit`;
|
||||
|
||||
CREATE TABLE `joinit` (
|
||||
`i` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`s` varchar(64) DEFAULT NULL,
|
||||
`t` time NOT NULL,
|
||||
`g` int(11) NOT NULL,
|
||||
PRIMARY KEY (`i`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
INSERT INTO joinit VALUES (NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )));
|
||||
INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit;
|
||||
INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit;
|
||||
INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit;
|
||||
INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit;
|
||||
INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit;
|
||||
INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit;
|
||||
INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit;
|
||||
INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit;
|
||||
INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit;
|
@@ -160,7 +160,173 @@ CREATE TABLE `store` (
|
||||
CONSTRAINT `fk_store_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 6: 0 QPS, 0x concurrency, ID 0xCBD4B02B76FCD5BCD8657A03D0724524 at byte 880760
|
||||
# Query 6: 0 QPS, 0x concurrency, ID 0x2191F33283A3743FAE6D99E149CE09C6 at byte 719980
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:58
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 4 155.05k 155.05k 155.05k 155.05k 155.05k 0 155.05k
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'inventory'\G
|
||||
# SHOW CREATE TABLE `sakila`.`inventory`\G
|
||||
INSERT INTO `inventory` VALUES (1,1,1,'2006-02-15 12:09:17') /*... omitted ...*/\G
|
||||
|
||||
# Query 7: 0 QPS, 0x concurrency, ID 0x28F5E254B8810D1293E5C17055D970BE at byte 393718
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:54
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 5 167.33k 167.33k 167.33k 167.33k 167.33k 0 167.33k
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'film_actor'\G
|
||||
# SHOW CREATE TABLE `sakila`.`film_actor`\G
|
||||
INSERT INTO `film_actor` VALUES (1,1,'2006-02-15 12:05:03') /*... omitted ...*/\G
|
||||
|
||||
# Query 8: 0 QPS, 0x concurrency, ID 0x4393885182E112A2E5109B9F2BF996BE at byte 111637
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:48
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 1 64.61k 64.61k 64.61k 64.61k 64.61k 0 64.61k
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'customer'\G
|
||||
# SHOW CREATE TABLE `sakila`.`customer`\G
|
||||
INSERT INTO `customer` VALUES (1,1,'MARY','SMITH','MARY.SMITH@sakilacustomer.org',5,1,'2006-02-14 22:04:36','2006-02-15 11:57:20') /*... omitted ...*/\G
|
||||
|
||||
# Query 9: 0 QPS, 0x concurrency, ID 0x6846663BC60B4FF9D62F1A6D5A67AFA8 at byte 20196
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:43
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 1 53.96k 53.96k 53.96k 53.96k 53.96k 0 53.96k
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'address'\G
|
||||
# SHOW CREATE TABLE `sakila`.`address`\G
|
||||
INSERT INTO `address` VALUES (1,'47 MySakila Drive',NULL,'Alberta',300,'','','2006-02-15 11:45:30') /*... omitted ...*/\G
|
||||
|
||||
# Query 10: 0 QPS, 0x concurrency, ID 0x45781B86D83AE665EE462EEBC76A46F2 at byte 3392804
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:10:19
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 0 130 130 130 130 130 0 130
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `percona_test` LIKE 'checksums'\G
|
||||
# SHOW CREATE TABLE `percona_test`.`checksums`\G
|
||||
CREATE TABLE percona_test.checksums(
|
||||
db_tbl varchar(128) not null primary key,
|
||||
checksum int unsigned not null)\G
|
||||
|
||||
# Query 11: 0 QPS, 0x concurrency, ID 0x68FBF2932AA49582C57D5EA5160B0E9F at byte 1859
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:28
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 0 523 523 523 523 523 0 523
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases mysql
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `mysql` LIKE 'innodb_table_stats'\G
|
||||
# SHOW CREATE TABLE `mysql`.`innodb_table_stats`\G
|
||||
CREATE TABLE IF NOT EXISTS `innodb_table_stats` (
|
||||
`database_name` varchar(64) COLLATE utf8_bin NOT NULL,
|
||||
`table_name` varchar(64) COLLATE utf8_bin NOT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`n_rows` bigint(20) unsigned NOT NULL,
|
||||
`clustered_index_size` bigint(20) unsigned NOT NULL,
|
||||
`sum_of_other_index_sizes` bigint(20) unsigned NOT NULL,
|
||||
PRIMARY KEY (`database_name`,`table_name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0\G
|
||||
|
||||
# Query 12: 0 QPS, 0x concurrency, ID 0xCBD4B02B76FCD5BCD8657A03D0724524 at byte 880760
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:10:00
|
||||
@@ -212,7 +378,7 @@ select NULL ON UPDATE CASCADE,
|
||||
KEY `fk_payment_rental` (`rental_id`),
|
||||
CONSTRAINT `fk_payment_rental` FOREIGN KEY (`rental_id`) REFERENCES `rental` (`rental_id`) ON DELETE \G
|
||||
|
||||
# Query 7: 0 QPS, 0x concurrency, ID 0x1B49B966156BD5391405E69931A1FC8D at byte 879222
|
||||
# Query 13: 0 QPS, 0x concurrency, ID 0x1B49B966156BD5391405E69931A1FC8D at byte 879222
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:59
|
||||
@@ -243,133 +409,7 @@ CREATE TABLE `language` (
|
||||
PRIMARY KEY (`language_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 8: 0 QPS, 0x concurrency, ID 0x0DE767BB5A2112B83B0263BE3363F7DF at byte 8543
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:42
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 0 370 370 370 370 370 0 370
|
||||
# @@session.fo 0 0 0 0 0 0 0 0
|
||||
# @@session.un 0 0 0 0 0 0 0 0
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'actor'\G
|
||||
# SHOW CREATE TABLE `sakila`.`actor`\G
|
||||
CREATE TABLE `actor` (
|
||||
`actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`first_name` varchar(45) NOT NULL,
|
||||
`last_name` varchar(45) NOT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`actor_id`),
|
||||
KEY `idx_actor_last_name` (`last_name`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 9: 0 QPS, 0x concurrency, ID 0xC7D5A4E49E422A5209482CA2620152A7 at byte 77796
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:45
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 0 483 483 483 483 483 0 483
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'city'\G
|
||||
# SHOW CREATE TABLE `sakila`.`city`\G
|
||||
CREATE TABLE `city` (
|
||||
`city_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`city` varchar(50) NOT NULL,
|
||||
`country_id` smallint(5) unsigned NOT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`city_id`),
|
||||
KEY `idx_fk_country_id` (`country_id`),
|
||||
CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=601 DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 10: 0 QPS, 0x concurrency, ID 0x06B95BC192D493BF80F6ECA81D5F0D25 at byte 75909
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:44
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 0 292 292 292 292 292 0 292
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'category'\G
|
||||
# SHOW CREATE TABLE `sakila`.`category`\G
|
||||
CREATE TABLE `category` (
|
||||
`category_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(25) NOT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`category_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 11: 0 QPS, 0x concurrency, ID 0x2191F33283A3743FAE6D99E149CE09C6 at byte 719980
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:58
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 4 155.05k 155.05k 155.05k 155.05k 155.05k 0 155.05k
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'inventory'\G
|
||||
# SHOW CREATE TABLE `sakila`.`inventory`\G
|
||||
INSERT INTO `inventory` VALUES (1,1,1,'2006-02-15 12:09:17') /*... omitted ...*/\G
|
||||
|
||||
# Query 12: 0 QPS, 0x concurrency, ID 0xFFDE0605772D1BD0E771A1D1EAD499BA at byte 718785
|
||||
# Query 14: 0 QPS, 0x concurrency, ID 0xFFDE0605772D1BD0E771A1D1EAD499BA at byte 718785
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:57
|
||||
@@ -405,7 +445,57 @@ CREATE TABLE `inventory` (
|
||||
CONSTRAINT `fk_inventory_film` FOREIGN KEY (`film_id`) REFERENCES `film` (`film_id`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=4582 DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 13: 0 QPS, 0x concurrency, ID 0x1161695D97D5E56D8A38006583244505 at byte 597471
|
||||
# Query 15: 0 QPS, 0x concurrency, ID 0x661E3CA5D82B964A4E763A2FA103490D at byte 178711
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:49
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 0 1.19k 1.19k 1.19k 1.19k 1.19k 0 1.19k
|
||||
# @@session.ch 16 33 33 33 33 33 0 33
|
||||
# @@session.co 16 33 33 33 33 33 0 33
|
||||
# @@session.co 11 8 8 8 8 8 0 8
|
||||
# @@session.sq 25 1.00G 1.00G 1.00G 1.00G 1.00G 0 1.00G
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'film'\G
|
||||
# SHOW CREATE TABLE `sakila`.`film`\G
|
||||
CREATE TABLE `film` (
|
||||
`film_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`title` varchar(255) NOT NULL,
|
||||
`description` text,
|
||||
`release_year` year(4) DEFAULT NULL,
|
||||
`language_id` tinyint(3) unsigned NOT NULL,
|
||||
`original_language_id` tinyint(3) unsigned DEFAULT NULL,
|
||||
`rental_duration` tinyint(3) unsigned NOT NULL DEFAULT '3',
|
||||
`rental_rate` decimal(4,2) NOT NULL DEFAULT '4.99',
|
||||
`length` smallint(5) unsigned DEFAULT NULL,
|
||||
`replacement_cost` decimal(5,2) NOT NULL DEFAULT '19.99',
|
||||
`rating` enum('G','PG','PG-13','R','NC-17') DEFAULT 'G',
|
||||
`special_features` set('Trailers','Commentaries','Deleted Scenes','Behind the Scenes') DEFAULT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`film_id`),
|
||||
KEY `idx_title` (`title`),
|
||||
KEY `idx_fk_language_id` (`language_id`),
|
||||
KEY `idx_fk_original_language_id` (`original_language_id`),
|
||||
CONSTRAINT `fk_film_language` FOREIGN KEY (`language_id`) REFERENCES `language` (`language_id`) ON UPDATE CASCADE,
|
||||
CONSTRAINT `fk_film_language_original` FOREIGN KEY (`original_language_id`) REFERENCES `language` (`language_id`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 16: 0 QPS, 0x concurrency, ID 0x1161695D97D5E56D8A38006583244505 at byte 597471
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:56
|
||||
@@ -437,7 +527,7 @@ CREATE TABLE `film_text` (
|
||||
FULLTEXT KEY `idx_title_description` (`title`,`description`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 14: 0 QPS, 0x concurrency, ID 0xE9F9A7EE464D666B0FD12A9C9BF3E41F at byte 565533
|
||||
# Query 17: 0 QPS, 0x concurrency, ID 0xE9F9A7EE464D666B0FD12A9C9BF3E41F at byte 565533
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:55
|
||||
@@ -471,33 +561,7 @@ CREATE TABLE `film_category` (
|
||||
CONSTRAINT `fk_film_category_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 15: 0 QPS, 0x concurrency, ID 0x28F5E254B8810D1293E5C17055D970BE at byte 393718
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:54
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 5 167.33k 167.33k 167.33k 167.33k 167.33k 0 167.33k
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'film_actor'\G
|
||||
# SHOW CREATE TABLE `sakila`.`film_actor`\G
|
||||
INSERT INTO `film_actor` VALUES (1,1,'2006-02-15 12:05:03') /*... omitted ...*/\G
|
||||
|
||||
# Query 16: 0 QPS, 0x concurrency, ID 0xB25BC072BED6DE4E7677746C22CD9F16 at byte 392649
|
||||
# Query 18: 0 QPS, 0x concurrency, ID 0xB25BC072BED6DE4E7677746C22CD9F16 at byte 392649
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:53
|
||||
@@ -531,15 +595,15 @@ CREATE TABLE `film_actor` (
|
||||
CONSTRAINT `fk_film_actor_film` FOREIGN KEY (`film_id`) REFERENCES `film` (`film_id`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 17: 0 QPS, 0x concurrency, ID 0x45781B86D83AE665EE462EEBC76A46F2 at byte 3392804
|
||||
# Query 19: 0 QPS, 0x concurrency, ID 0x98D4A6F51806DA45C1D332032F48BCE1 at byte 110219
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:10:19
|
||||
# Time range: all events occurred at 2014-07-02 13:09:47
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 0 130 130 130 130 130 0 130
|
||||
# Query size 0 883 883 883 883 883 0 883
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
@@ -553,46 +617,35 @@ CREATE TABLE `film_actor` (
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `percona_test` LIKE 'checksums'\G
|
||||
# SHOW CREATE TABLE `percona_test`.`checksums`\G
|
||||
CREATE TABLE percona_test.checksums(
|
||||
db_tbl varchar(128) not null primary key,
|
||||
checksum int unsigned not null)\G
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'customer'\G
|
||||
# SHOW CREATE TABLE `sakila`.`customer`\G
|
||||
CREATE TABLE `customer` (
|
||||
`customer_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`store_id` tinyint(3) unsigned NOT NULL,
|
||||
`first_name` varchar(45) NOT NULL,
|
||||
`last_name` varchar(45) NOT NULL,
|
||||
`email` varchar(50) DEFAULT NULL,
|
||||
`address_id` smallint(5) unsigned NOT NULL,
|
||||
`active` tinyint(1) NOT NULL DEFAULT '1',
|
||||
`create_date` datetime NOT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`customer_id`),
|
||||
KEY `idx_fk_store_id` (`store_id`),
|
||||
KEY `idx_fk_address_id` (`address_id`),
|
||||
KEY `idx_last_name` (`last_name`),
|
||||
CONSTRAINT `fk_customer_address` FOREIGN KEY (`address_id`) REFERENCES `address` (`address_id`) ON UPDATE CASCADE,
|
||||
CONSTRAINT `fk_customer_store` FOREIGN KEY (`store_id`) REFERENCES `store` (`store_id`) ON UPDATE CASCADE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=600 DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Query 18: 0 QPS, 0x concurrency, ID 0x2F981A9FC6992839C5F99E5B57D2D6DB at byte 3391234
|
||||
# Query 20: 0 QPS, 0x concurrency, ID 0x90C64F5E9B49C9003E8F75B2422F47B7 at byte 104650
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:10:18
|
||||
# Time range: all events occurred at 2014-07-02 13:09:46
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 0 159 159 159 159 159 0 159
|
||||
# @@session.fo 50 1 1 1 1 1 0 1
|
||||
# @@session.un 50 1 1 1 1 1 0 1
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
ANALYZE TABLE actor, address, category, city, country, customer, film, film_actor, film_category, film_text, inventory, language, payment, rental, staff, store\G
|
||||
|
||||
# Query 19: 0 QPS, 0x concurrency, ID 0xC16F5DCD62BA36A15C6D8C73D42AE624 at byte 3388620
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:10:17
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 0 679 679 679 679 679 0 679
|
||||
# Query size 0 294 294 294 294 294 0 294
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
@@ -606,78 +659,14 @@ ANALYZE TABLE actor, address, category, city, country, customer, film, film_acto
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'payment'\G
|
||||
# SHOW CREATE TABLE `sakila`.`payment`\G
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'rental'\G
|
||||
# SHOW CREATE TABLE `sakila`.`rental`\G
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'inventory'\G
|
||||
# SHOW CREATE TABLE `sakila`.`inventory`\G
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'store'\G
|
||||
# SHOW CREATE TABLE `sakila`.`store`\G
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'address'\G
|
||||
# SHOW CREATE TABLE `sakila`.`address`\G
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'city'\G
|
||||
# SHOW CREATE TABLE `sakila`.`city`\G
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'country'\G
|
||||
# SHOW CREATE TABLE `sakila`.`country`\G
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'staff'\G
|
||||
# SHOW CREATE TABLE `sakila`.`staff`\G
|
||||
CREATE ALGORITHM=UNDEFINED DEFINER=`msandbox`@`%` SQL SECURITY DEFINER VIEW `sales_by_store` AS SELECT
|
||||
CONCAT(c.city, _utf8',', cy.country) AS store
|
||||
, CONCAT(m.first_name, _utf8' ', m.last_name) AS manager
|
||||
, SUM(p.amount) AS total_sales
|
||||
FROM payment AS p
|
||||
INNER JOIN rental AS r ON p.rental_id = r.rental_id
|
||||
INNER JOIN inventory AS i ON r.inventory_id = i.inventory_id
|
||||
INNER JOIN store AS s ON i.store_id = s.store_id
|
||||
INNER JOIN address AS a ON s.address_id = a.address_id
|
||||
INNER JOIN city AS c ON a.city_id = c.city_id
|
||||
INNER JOIN country AS cy ON c.country_id = cy.country_id
|
||||
INNER JOIN staff AS m ON s.manager_staff_id = m.staff_id
|
||||
GROUP BY s.store_id
|
||||
ORDER BY cy.country, c.city\G
|
||||
# Converted for EXPLAIN
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT
|
||||
CONCAT(c.city, _utf8',', cy.country) AS store
|
||||
, CONCAT(m.first_name, _utf8' ', m.last_name) AS manager
|
||||
, SUM(p.amount) AS total_sales
|
||||
FROM payment AS p
|
||||
INNER JOIN rental AS r ON p.rental_id = r.rental_id
|
||||
INNER JOIN inventory AS i ON r.inventory_id = i.inventory_id
|
||||
INNER JOIN store AS s ON i.store_id = s.store_id
|
||||
INNER JOIN address AS a ON s.address_id = a.address_id
|
||||
INNER JOIN city AS c ON a.city_id = c.city_id
|
||||
INNER JOIN country AS cy ON c.country_id = cy.country_id
|
||||
INNER JOIN staff AS m ON s.manager_staff_id = m.staff_id
|
||||
GROUP BY s.store_id
|
||||
ORDER BY cy.country, c.city\G
|
||||
|
||||
# Query 20: 0 QPS, 0x concurrency, ID 0x6846663BC60B4FF9D62F1A6D5A67AFA8 at byte 20196
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2014-07-02 13:09:43
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 0 1
|
||||
# Exec time 1 1s 1s 1s 1s 1s 0 1s
|
||||
# Query size 1 53.96k 53.96k 53.96k 53.96k 53.96k 0 53.96k
|
||||
# error code 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
# Databases sakila
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `sakila` LIKE 'address'\G
|
||||
# SHOW CREATE TABLE `sakila`.`address`\G
|
||||
INSERT INTO `address` VALUES (1,'47 MySakila Drive',NULL,'Alberta',300,'','','2006-02-15 11:45:30') /*... omitted ...*/\G
|
||||
CREATE TABLE `country` (
|
||||
`country_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`country` varchar(50) NOT NULL,
|
||||
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`country_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=110 DEFAULT CHARSET=utf8\G
|
||||
|
||||
# Profile
|
||||
# Rank Query ID Response time Calls R/Call V/M
|
||||
@@ -687,19 +676,19 @@ INSERT INTO `address` VALUES (1,'47 MySakila Drive',NULL,'Alberta',300,'','','20
|
||||
# 3 0x6692BFEDE6AB56814677E4CEDF8EA4E2 5.0000 8.8% 2 2.5000 5.00 INSERT payment
|
||||
# 4 0x266D117CFD8ED7C1AAECC8184D17D799 3.0000 5.3% 1 3.0000 0.00 INSERT film
|
||||
# 5 0x5D2F650658D1B9C51A3BF395BD4C2AC5 2.0000 3.5% 1 2.0000 0.00 CREATE TABLE store `store`
|
||||
# 6 0xCBD4B02B76FCD5BCD8657A03D0724524 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE payment `payment`
|
||||
# 7 0x1B49B966156BD5391405E69931A1FC8D 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE language `language`
|
||||
# 8 0x0DE767BB5A2112B83B0263BE3363F7DF 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE actor `actor`
|
||||
# 9 0xC7D5A4E49E422A5209482CA2620152A7 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE city `city`
|
||||
# 10 0x06B95BC192D493BF80F6ECA81D5F0D25 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE category `category`
|
||||
# 11 0x2191F33283A3743FAE6D99E149CE09C6 1.0000 1.8% 1 1.0000 0.00 INSERT inventory
|
||||
# 12 0xFFDE0605772D1BD0E771A1D1EAD499BA 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE inventory `inventory`
|
||||
# 13 0x1161695D97D5E56D8A38006583244505 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE film_text `film_text`
|
||||
# 14 0xE9F9A7EE464D666B0FD12A9C9BF3E41F 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE film_category `film_category`
|
||||
# 15 0x28F5E254B8810D1293E5C17055D970BE 1.0000 1.8% 1 1.0000 0.00 INSERT film_actor
|
||||
# 16 0xB25BC072BED6DE4E7677746C22CD9F16 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE film_actor `film_actor`
|
||||
# 17 0x45781B86D83AE665EE462EEBC76A46F2 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE percona_test.checksums
|
||||
# 18 0x2F981A9FC6992839C5F99E5B57D2D6DB 1.0000 1.8% 1 1.0000 0.00
|
||||
# 19 0xC16F5DCD62BA36A15C6D8C73D42AE624 1.0000 1.8% 1 1.0000 0.00 CREATE payment rental inventory store address city country staff
|
||||
# 20 0x6846663BC60B4FF9D62F1A6D5A67AFA8 1.0000 1.8% 1 1.0000 0.00 INSERT address
|
||||
# 6 0x2191F33283A3743FAE6D99E149CE09C6 1.0000 1.8% 1 1.0000 0.00 INSERT inventory
|
||||
# 7 0x28F5E254B8810D1293E5C17055D970BE 1.0000 1.8% 1 1.0000 0.00 INSERT film_actor
|
||||
# 8 0x4393885182E112A2E5109B9F2BF996BE 1.0000 1.8% 1 1.0000 0.00 INSERT customer
|
||||
# 9 0x6846663BC60B4FF9D62F1A6D5A67AFA8 1.0000 1.8% 1 1.0000 0.00 INSERT address
|
||||
# 10 0x45781B86D83AE665EE462EEBC76A46F2 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE percona_test.checksums
|
||||
# 11 0x68FBF2932AA49582C57D5EA5160B0E9F 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE innodb_table_stats `innodb_table_stats`
|
||||
# 12 0xCBD4B02B76FCD5BCD8657A03D0724524 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE payment `payment`
|
||||
# 13 0x1B49B966156BD5391405E69931A1FC8D 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE language `language`
|
||||
# 14 0xFFDE0605772D1BD0E771A1D1EAD499BA 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE inventory `inventory`
|
||||
# 15 0x661E3CA5D82B964A4E763A2FA103490D 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE film `film`
|
||||
# 16 0x1161695D97D5E56D8A38006583244505 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE film_text `film_text`
|
||||
# 17 0xE9F9A7EE464D666B0FD12A9C9BF3E41F 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE film_category `film_category`
|
||||
# 18 0xB25BC072BED6DE4E7677746C22CD9F16 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE film_actor `film_actor`
|
||||
# 19 0x98D4A6F51806DA45C1D332032F48BCE1 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE customer `customer`
|
||||
# 20 0x90C64F5E9B49C9003E8F75B2422F47B7 1.0000 1.8% 1 1.0000 0.00 CREATE TABLE country `country`
|
||||
# MISC 0xMISC 6.0000 10.5% 95 0.0632 0.0 <72 ITEMS>
|
||||
|
@@ -6,7 +6,33 @@
|
||||
# Exec time 0 0 0 0 0 0 0
|
||||
# Query size 964 106 858 482 858 531.74 482
|
||||
|
||||
# Query 1: 0 QPS, 0x concurrency, ID 0xC6637FEB865265BA0A3E6DCD23F3445A at byte 237
|
||||
# Query 1: 0 QPS, 0x concurrency, ID 0xB42FB5382732CE142361B36A4AEB397B at byte 0
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2010-02-11 00:55:24
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 50 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 10 106 106 106 106 106 0 106
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS LIKE 'auction_category_map'\G
|
||||
# SHOW CREATE TABLE `auction_category_map`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT category_id
|
||||
FROM auction_category_map
|
||||
WHERE auction_id = '3015563'\G
|
||||
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0xC6637FEB865265BA0A3E6DCD23F3445A at byte 237
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2010-02-11 00:55:24
|
||||
@@ -42,34 +68,8 @@ SELECT auction_id, auction_title_en AS title, close_time,
|
||||
ORDER BY close_time ASC
|
||||
LIMIT 500\G
|
||||
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0xB42FB5382732CE142361B36A4AEB397B at byte 0
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2010-02-11 00:55:24
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 50 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 10 106 106 106 106 106 0 106
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS LIKE 'auction_category_map'\G
|
||||
# SHOW CREATE TABLE `auction_category_map`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT category_id
|
||||
FROM auction_category_map
|
||||
WHERE auction_id = '3015563'\G
|
||||
|
||||
# Profile
|
||||
# Rank Query ID Response time Calls R/Call V/M
|
||||
# ==== =================================== ============= ===== ====== ====
|
||||
# 1 0xC6637FEB865265BA0A3E6DCD23F3445A 0.0000 0.0% 1 0.0000 0.00 SELECT auction_search
|
||||
# 2 0xB42FB5382732CE142361B36A4AEB397B 0.0000 0.0% 1 0.0000 0.00 SELECT auction_category_map
|
||||
# 1 0xB42FB5382732CE142361B36A4AEB397B 0.0000 0.0% 1 0.0000 0.00 SELECT auction_category_map
|
||||
# 2 0xC6637FEB865265BA0A3E6DCD23F3445A 0.0000 0.0% 1 0.0000 0.00 SELECT auction_search
|
||||
|
@@ -29,7 +29,68 @@
|
||||
# 10s+
|
||||
administrator command: Connect\G
|
||||
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0x68C6B480CBDB8159E2F7D83651089289 at byte 613
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0xAB58F0EB775FA5FBF2E9C9BDE150321B at byte 480
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.558791Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 2 47 47 47 47 47 0 47
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
SET collation_connection = 'utf8mb4_unicode_ci'\G
|
||||
|
||||
# Query 3: 0 QPS, 0x concurrency, ID 0x1E5B97E780818DDB3B9AD583C3AFC61D at byte 326
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.558713Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 1 27 27 27 27 27 0 27
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
SET CHARACTER SET 'utf8mb4'\G
|
||||
|
||||
# Query 4: 0 QPS, 0x concurrency, ID 0x7B48FAA9C951DD8A389FF9DA2DF3DF62 at byte 1135
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.567097Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 0 13 13 13 13 13 0 13
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT USER()\G
|
||||
|
||||
# Query 5: 0 QPS, 0x concurrency, ID 0x68C6B480CBDB8159E2F7D83651089289 at byte 613
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.565845Z
|
||||
@@ -50,15 +111,15 @@ administrator command: Connect\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT CURRENT_USER()\G
|
||||
|
||||
# Query 3: 0 QPS, 0x concurrency, ID 0xC4AB84B66A4FBA135A2F00AA08F7A560 at byte 552
|
||||
# Query 6: 0 QPS, 0x concurrency, ID 0x4C1AABB35EA40368289CE0B9F6EA151D at byte 1870
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.563721Z
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.572396Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 2 32 32 32 32 32 0 32
|
||||
# Query size 8 138 138 138 138 138 0 138
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
@@ -69,52 +130,12 @@ SELECT CURRENT_USER()\G
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `mysql` LIKE 'user'\G
|
||||
# SHOW CREATE TABLE `mysql`.`user`\G
|
||||
# SHOW TABLE STATUS FROM `INFORMATION_SCHEMA` LIKE 'SCHEMATA'\G
|
||||
# SHOW CREATE TABLE `INFORMATION_SCHEMA`.`SCHEMATA`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT 1 FROM mysql.user LIMIT 1\G
|
||||
SELECT COUNT(*) FROM ( SELECT DISTINCT SUBSTRING_INDEX(SCHEMA_NAME, '_', 1) DB_first_level FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t\G
|
||||
|
||||
# Query 4: 0 QPS, 0x concurrency, ID 0xAB58F0EB775FA5FBF2E9C9BDE150321B at byte 480
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.558791Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 2 47 47 47 47 47 0 47
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
SET collation_connection = 'utf8mb4_unicode_ci'\G
|
||||
|
||||
# Query 5: 0 QPS, 0x concurrency, ID 0x1E5B97E780818DDB3B9AD583C3AFC61D at byte 326
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.558713Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 1 27 27 27 27 27 0 27
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
SET CHARACTER SET 'utf8mb4'\G
|
||||
|
||||
# Query 6: 0 QPS, 0x concurrency, ID 0xF0A406222CD7B02708E4BF21400A779E at byte 2299
|
||||
# Query 7: 0 QPS, 0x concurrency, ID 0xF0A406222CD7B02708E4BF21400A779E at byte 2299
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.576333Z
|
||||
@@ -140,79 +161,7 @@ SET CHARACTER SET 'utf8mb4'\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT `tab` FROM `phpmyadmin`.`pma__usergroups` WHERE `allowed` = 'N' AND `tab` LIKE 'server%' AND `usergroup` = (SELECT usergroup FROM `phpmyadmin`.`pma__users` WHERE `username` = 'root')\G
|
||||
|
||||
# Query 7: 0 QPS, 0x concurrency, ID 0x1A47B347E419B05A62642FD655801FC1 at byte 2070
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.575723Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 10 160 160 160 160 160 0 160
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `phpmyadmin` LIKE 'pma__bookmark'\G
|
||||
# SHOW CREATE TABLE `phpmyadmin`.`pma__bookmark`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT `label`, `id`, `query`, `dbase` AS `db`, IF (`user` = '', true, false) AS `shared` FROM `phpmyadmin`.`pma__bookmark` WHERE `user` = '' OR `user` = 'root'\G
|
||||
|
||||
# Query 8: 0 QPS, 0x concurrency, ID 0x4C1AABB35EA40368289CE0B9F6EA151D at byte 1870
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.572396Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 8 138 138 138 138 138 0 138
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `INFORMATION_SCHEMA` LIKE 'SCHEMATA'\G
|
||||
# SHOW CREATE TABLE `INFORMATION_SCHEMA`.`SCHEMATA`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT COUNT(*) FROM ( SELECT DISTINCT SUBSTRING_INDEX(SCHEMA_NAME, '_', 1) DB_first_level FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t\G
|
||||
|
||||
# Query 9: 0 QPS, 0x concurrency, ID 0xDDABDE67AC3044CAED549F59FFFA541B at byte 1692
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.569779Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 7 122 122 122 122 122 0 122
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `phpmyadmin` LIKE 'pma__navigationhiding'\G
|
||||
# SHOW CREATE TABLE `phpmyadmin`.`pma__navigationhiding`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT `db_name`, COUNT(*) AS `count` FROM `phpmyadmin`.`pma__navigationhiding` WHERE `username`='root' GROUP BY `db_name`\G
|
||||
|
||||
# Query 10: 0 QPS, 0x concurrency, ID 0x35CCC630581DCD5AA46100310F18DEB9 at byte 1530
|
||||
# Query 8: 0 QPS, 0x concurrency, ID 0x35CCC630581DCD5AA46100310F18DEB9 at byte 1530
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.569194Z
|
||||
@@ -238,15 +187,15 @@ SELECT `db_name`, COUNT(*) AS `count` FROM `phpmyadmin`.`pma__navigationhiding`
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`, (SELECT DB_first_level FROM ( SELECT DISTINCT SUBSTRING_INDEX(SCHEMA_NAME, '_', 1) DB_first_level FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t ORDER BY DB_first_level ASC LIMIT 0, 100) t2 WHERE TRUE AND 1 = LOCATE(CONCAT(DB_first_level, '_'), CONCAT(SCHEMA_NAME, '_')) ORDER BY SCHEMA_NAME ASC\G
|
||||
|
||||
# Query 11: 0 QPS, 0x concurrency, ID 0x7B48FAA9C951DD8A389FF9DA2DF3DF62 at byte 1135
|
||||
# Query 9: 0 QPS, 0x concurrency, ID 0x1A47B347E419B05A62642FD655801FC1 at byte 2070
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.567097Z
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.575723Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 0 13 13 13 13 13 0 13
|
||||
# Query size 10 160 160 160 160 160 0 160
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
@@ -256,8 +205,59 @@ SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`, (SELECT DB_first_leve
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `phpmyadmin` LIKE 'pma__bookmark'\G
|
||||
# SHOW CREATE TABLE `phpmyadmin`.`pma__bookmark`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT USER()\G
|
||||
SELECT `label`, `id`, `query`, `dbase` AS `db`, IF (`user` = '', true, false) AS `shared` FROM `phpmyadmin`.`pma__bookmark` WHERE `user` = '' OR `user` = 'root'\G
|
||||
|
||||
# Query 10: 0 QPS, 0x concurrency, ID 0xDDABDE67AC3044CAED549F59FFFA541B at byte 1692
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.569779Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 7 122 122 122 122 122 0 122
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `phpmyadmin` LIKE 'pma__navigationhiding'\G
|
||||
# SHOW CREATE TABLE `phpmyadmin`.`pma__navigationhiding`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT `db_name`, COUNT(*) AS `count` FROM `phpmyadmin`.`pma__navigationhiding` WHERE `username`='root' GROUP BY `db_name`\G
|
||||
|
||||
# Query 11: 0 QPS, 0x concurrency, ID 0xC4AB84B66A4FBA135A2F00AA08F7A560 at byte 552
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2016-06-07T19:07:02.563721Z
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 7 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 2 32 32 32 32 32 0 32
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `mysql` LIKE 'user'\G
|
||||
# SHOW CREATE TABLE `mysql`.`user`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT 1 FROM mysql.user LIMIT 1\G
|
||||
|
||||
# Query 12: 0 QPS, 0x concurrency, ID 0x15BF4DCE0B364CE831C14D6853A472B7 at byte 1082
|
||||
# This item is included in the report because it matches --limit.
|
||||
@@ -293,14 +293,14 @@ SELECT 1 FROM (SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`COLUM
|
||||
# Rank Query ID Response time Calls R/Call V/M
|
||||
# ==== =================================== ============= ===== ====== ====
|
||||
# 1 0x7417646A9FE969365D51E5F01B88B79E 0.0000 0.0% 2 0.0000 0.00 ADMIN CONNECT
|
||||
# 2 0x68C6B480CBDB8159E2F7D83651089289 0.0000 0.0% 1 0.0000 0.00 SELECT
|
||||
# 3 0xC4AB84B66A4FBA135A2F00AA08F7A560 0.0000 0.0% 1 0.0000 0.00 SELECT mysql.user
|
||||
# 4 0xAB58F0EB775FA5FBF2E9C9BDE150321B 0.0000 0.0% 1 0.0000 0.00 SET
|
||||
# 5 0x1E5B97E780818DDB3B9AD583C3AFC61D 0.0000 0.0% 1 0.0000 0.00 SET
|
||||
# 6 0xF0A406222CD7B02708E4BF21400A779E 0.0000 0.0% 1 0.0000 0.00 SELECT phpmyadmin.pma__usergroups phpmyadmin.pma__users
|
||||
# 7 0x1A47B347E419B05A62642FD655801FC1 0.0000 0.0% 1 0.0000 0.00 SELECT phpmyadmin.pma__bookmark
|
||||
# 8 0x4C1AABB35EA40368289CE0B9F6EA151D 0.0000 0.0% 1 0.0000 0.00 SELECT INFORMATION_SCHEMA.SCHEMATA
|
||||
# 9 0xDDABDE67AC3044CAED549F59FFFA541B 0.0000 0.0% 1 0.0000 0.00 SELECT phpmyadmin.pma__navigationhiding
|
||||
# 10 0x35CCC630581DCD5AA46100310F18DEB9 0.0000 0.0% 1 0.0000 0.00 SELECT INFORMATION_SCHEMA.SCHEMATA
|
||||
# 11 0x7B48FAA9C951DD8A389FF9DA2DF3DF62 0.0000 0.0% 1 0.0000 0.00 SELECT
|
||||
# 2 0xAB58F0EB775FA5FBF2E9C9BDE150321B 0.0000 0.0% 1 0.0000 0.00 SET
|
||||
# 3 0x1E5B97E780818DDB3B9AD583C3AFC61D 0.0000 0.0% 1 0.0000 0.00 SET
|
||||
# 4 0x7B48FAA9C951DD8A389FF9DA2DF3DF62 0.0000 0.0% 1 0.0000 0.00 SELECT
|
||||
# 5 0x68C6B480CBDB8159E2F7D83651089289 0.0000 0.0% 1 0.0000 0.00 SELECT
|
||||
# 6 0x4C1AABB35EA40368289CE0B9F6EA151D 0.0000 0.0% 1 0.0000 0.00 SELECT INFORMATION_SCHEMA.SCHEMATA
|
||||
# 7 0xF0A406222CD7B02708E4BF21400A779E 0.0000 0.0% 1 0.0000 0.00 SELECT phpmyadmin.pma__usergroups phpmyadmin.pma__users
|
||||
# 8 0x35CCC630581DCD5AA46100310F18DEB9 0.0000 0.0% 1 0.0000 0.00 SELECT INFORMATION_SCHEMA.SCHEMATA
|
||||
# 9 0x1A47B347E419B05A62642FD655801FC1 0.0000 0.0% 1 0.0000 0.00 SELECT phpmyadmin.pma__bookmark
|
||||
# 10 0xDDABDE67AC3044CAED549F59FFFA541B 0.0000 0.0% 1 0.0000 0.00 SELECT phpmyadmin.pma__navigationhiding
|
||||
# 11 0xC4AB84B66A4FBA135A2F00AA08F7A560 0.0000 0.0% 1 0.0000 0.00 SELECT mysql.user
|
||||
# 12 0x15BF4DCE0B364CE831C14D6853A472B7 0.0000 0.0% 1 0.0000 0.00 SELECT UNION INFORMATION_SCHEMA.COLUMN_PRIVILEGES INFORMATION_SCHEMA.TABLE_PRIVILEGES INFORMATION_SCHEMA.SCHEMA_PRIVILEGES INFORMATION_SCHEMA.USER_PRIVILEGES
|
||||
|
@@ -1,8 +1,8 @@
|
||||
|
||||
# Profile
|
||||
# Rank Query ID Response time Calls R/Call V/M
|
||||
# ==== ================================== ============= ===== ====== =====
|
||||
# 1 0x867E8F0D95B72228D4B6A5CD2F2F485C 0.2148 100.0% 1 0.2148 0.00 SELECT t
|
||||
# Rank Query ID Response time Calls R/Call V/M
|
||||
# ==== =================================== ============= ===== ====== ====
|
||||
# 1 0x867E8F0D95B72228D4B6A5CD2F2F485C 0.2148 100.0% 1 0.2148 0.00 SELECT t
|
||||
|
||||
# Query 1: 0 QPS, 0x concurrency, ID 0x867E8F0D95B72228D4B6A5CD2F2F485C at byte 0
|
||||
# This item is included in the report because it matches --limit.
|
||||
@@ -59,4 +59,4 @@ select t.a, count(*) from t join t t2 using(a) group by 1 order by 2 desc limit
|
||||
# ref: NULL
|
||||
# rows: 14
|
||||
# filtered: 10.00
|
||||
# Extra: Using where; Using join buffer (Block Nested Loop)
|
||||
# Extra: Using where; Using join buffer (hash join)
|
||||
|
@@ -5,30 +5,7 @@
|
||||
# Exec time 0 0 0 0 0 0 0
|
||||
# Query size 70 26 44 35 44 12.73 35
|
||||
|
||||
# Query 1: 0 QPS, 0x concurrency, ID 0x813FE962AFBBC891774B2B0B59EBAC2C at byte 27
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 50 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 62 44 44 44 44 44 0 44
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS LIKE 't2'\G
|
||||
# SHOW CREATE TABLE `t2`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
/* Hello, world! */ SELECT * FROM t2 LIMIT 1\G
|
||||
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0x5F47280C0D7DCF5CCB5621E548E5497F at byte 0
|
||||
# Query 1: 0 QPS, 0x concurrency, ID 0x5F47280C0D7DCF5CCB5621E548E5497F at byte 0
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
@@ -51,8 +28,31 @@
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
SELECT c FROM t WHERE id=1\G
|
||||
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0x813FE962AFBBC891774B2B0B59EBAC2C at byte 27
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 50 1
|
||||
# Exec time 0 0 0 0 0 0 0 0
|
||||
# Query size 62 44 44 44 44 44 0 44
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS LIKE 't2'\G
|
||||
# SHOW CREATE TABLE `t2`\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
/* Hello, world! */ SELECT * FROM t2 LIMIT 1\G
|
||||
|
||||
# Profile
|
||||
# Rank Query ID Response time Calls R/Call V/M
|
||||
# ==== =================================== ============= ===== ====== ====
|
||||
# 1 0x813FE962AFBBC891774B2B0B59EBAC2C 0.0000 0.0% 1 0.0000 0.00 SELECT t?
|
||||
# 2 0x5F47280C0D7DCF5CCB5621E548E5497F 0.0000 0.0% 1 0.0000 0.00 SELECT t
|
||||
# 1 0x5F47280C0D7DCF5CCB5621E548E5497F 0.0000 0.0% 1 0.0000 0.00 SELECT t
|
||||
# 2 0x813FE962AFBBC891774B2B0B59EBAC2C 0.0000 0.0% 1 0.0000 0.00 SELECT t?
|
||||
|
@@ -41,24 +41,24 @@ SET biz = '91848182522'\G
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
select biz = '91848182522' from foo.bar \G
|
||||
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0x6BADD6C352C61F817546F89214254F2F at byte 815
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0xE51503DB1DA4B1FC0FFE94ABA6A2A9E8 at byte 1334
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2007-12-18 11:48:27
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 12 1
|
||||
# Exec time 0 512us 512us 512us 512us 512us 0 512us
|
||||
# Lock time 25 77us 77us 77us 77us 77us 0 77us
|
||||
# Exec time 4 33ms 33ms 33ms 33ms 33ms 0 33ms
|
||||
# Lock time 9 28us 28us 28us 28us 28us 0 28us
|
||||
# Rows sent 0 0 0 0 0 0 0 0
|
||||
# Rows examine 0 0 0 0 0 0 0 0
|
||||
# Merge passes 0 0 0 0 0 0 0 0
|
||||
# Query size 13 66 66 66 66 66 0 66
|
||||
# Query size 20 103 103 103 103 103 0 103
|
||||
# InnoDB:
|
||||
# IO r bytes 0 0 0 0 0 0 0 0
|
||||
# IO r ops 0 0 0 0 0 0 0 0
|
||||
# IO r wait 0 0 0 0 0 0 0 0
|
||||
# pages distin 22 24 24 24 24 24 0 24
|
||||
# pages distin 10 11 11 11 11 11 0 11
|
||||
# queue wait 0 0 0 0 0 0 0 0
|
||||
# rec lock wai 0 0 0 0 0 0 0 0
|
||||
# String:
|
||||
@@ -68,14 +68,18 @@ select biz = '91848182522' from foo.bar \G
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us ################################################################
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 10ms ################################################################
|
||||
# 100ms
|
||||
# 1s
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS FROM `db3` LIKE 'vendor11gonzo'\G
|
||||
# SHOW CREATE TABLE `db3`.`vendor11gonzo`\G
|
||||
INSERT INTO db3.vendor11gonzo (makef, bizzle)
|
||||
VALUES ('', 'Exact')\G
|
||||
# SHOW TABLE STATUS FROM `db4` LIKE 'vab3concept1upload'\G
|
||||
# SHOW CREATE TABLE `db4`.`vab3concept1upload`\G
|
||||
UPDATE db4.vab3concept1upload
|
||||
SET vab3concept1id = '91848182522'
|
||||
WHERE vab3concept1upload='6994465'\G
|
||||
# Converted for EXPLAIN
|
||||
# EXPLAIN /*!50100 PARTITIONS*/
|
||||
select vab3concept1id = '91848182522' from db4.vab3concept1upload where vab3concept1upload='6994465'\G
|
||||
|
@@ -28,36 +28,7 @@
|
||||
# SHOW CREATE TABLE `film_actor`\G
|
||||
INSERT INTO `film_actor` VALUES (1,1,'2006-02-15 10:05:03') /*... omitted ...*/ON duplicate KEY UPDATE actor_id=actor_id+1\G
|
||||
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0x1B65226A5F15AD8CA1C3EE4F5996E672 at byte 342942
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2007-10-15 21:43:52
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 25 1
|
||||
# Exec time 25 2s 2s 2s 2s 2s 0 2s
|
||||
# Lock time 0 0 0 0 0 0 0 0
|
||||
# Rows sent 25 1 1 1 1 1 0 1
|
||||
# Rows examine 0 0 0 0 0 0 0 0
|
||||
# Query size 24 167.33k 167.33k 167.33k 167.33k 167.33k 0 167.33k
|
||||
# String:
|
||||
# Hosts localhost
|
||||
# Users root
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS LIKE 'film_actor'\G
|
||||
# SHOW CREATE TABLE `film_actor`\G
|
||||
INSERT IGNORE INTO `film_actor` VALUES (1,1,'2006-02-15 10:05:03') /*... omitted ...*/\G
|
||||
|
||||
# Query 3: 0 QPS, 0x concurrency, ID 0x40B5C2023608F2CFA2C576176F348267 at byte 171471
|
||||
# Query 2: 0 QPS, 0x concurrency, ID 0x40B5C2023608F2CFA2C576176F348267 at byte 171471
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2007-10-15 21:43:52
|
||||
@@ -85,3 +56,32 @@ INSERT IGNORE INTO `film_actor` VALUES (1,1,'2006-02-15 10:05:03') /*... omitted
|
||||
# SHOW TABLE STATUS LIKE 'film_actor'\G
|
||||
# SHOW CREATE TABLE `film_actor`\G
|
||||
REPLACE INTO `film_actor` VALUES (1,1,'2006-02-15 10:05:03') /*... omitted ...*/\G
|
||||
|
||||
# Query 3: 0 QPS, 0x concurrency, ID 0x1B65226A5F15AD8CA1C3EE4F5996E672 at byte 342942
|
||||
# This item is included in the report because it matches --limit.
|
||||
# Scores: V/M = 0.00
|
||||
# Time range: all events occurred at 2007-10-15 21:43:52
|
||||
# Attribute pct total min max avg 95% stddev median
|
||||
# ============ === ======= ======= ======= ======= ======= ======= =======
|
||||
# Count 25 1
|
||||
# Exec time 25 2s 2s 2s 2s 2s 0 2s
|
||||
# Lock time 0 0 0 0 0 0 0 0
|
||||
# Rows sent 25 1 1 1 1 1 0 1
|
||||
# Rows examine 0 0 0 0 0 0 0 0
|
||||
# Query size 24 167.33k 167.33k 167.33k 167.33k 167.33k 0 167.33k
|
||||
# String:
|
||||
# Hosts localhost
|
||||
# Users root
|
||||
# Query_time distribution
|
||||
# 1us
|
||||
# 10us
|
||||
# 100us
|
||||
# 1ms
|
||||
# 10ms
|
||||
# 100ms
|
||||
# 1s ################################################################
|
||||
# 10s+
|
||||
# Tables
|
||||
# SHOW TABLE STATUS LIKE 'film_actor'\G
|
||||
# SHOW CREATE TABLE `film_actor`\G
|
||||
INSERT IGNORE INTO `film_actor` VALUES (1,1,'2006-02-15 10:05:03') /*... omitted ...*/\G
|
||||
|
@@ -85,8 +85,8 @@ diag(output($cmd)) if not ok(
|
||||
no_diff(
|
||||
$cmd,
|
||||
"$sample/default-results-$sandbox_version.txt",
|
||||
sed_out => '\'/mysql.plugin$/d; /percona_test.checksums$/d\'',
|
||||
post_pipe => 'sed \'/mysql.plugin$/d; /percona_test.checksums$/d; /mysql.global_grants$/d\' | ' .
|
||||
sed_out => '\'/mysql.plugin$/d; /percona_test.checksums$/d; /mysql.help_category$/d; /mysql.help_keyword$/d; /mysql.help_relation$/d; /mysql.help_topic$/d\'',
|
||||
post_pipe => 'sed \'/mysql.plugin$/d; /percona_test.checksums$/d; /mysql.help_category$/d; /mysql.help_keyword$/d; /mysql.help_relation$/d; /mysql.help_topic$/d; /mysql.ndb_binlog_index$/d; /mysql.global_grants$/d\' | ' .
|
||||
'awk \'{print $2 " " $3 " " $4 " " $7 " " $9}\'',
|
||||
),
|
||||
"Default checksum"
|
||||
|
@@ -60,6 +60,9 @@ if ( !$pid ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
# We need to sleep here to get child process to start
|
||||
sleep(2);
|
||||
|
||||
# parent
|
||||
PerconaTest::wait_until(sub {
|
||||
$slave_dbh->selectrow_hashref("show slave status")->{seconds_behind_master}
|
||||
|
Reference in New Issue
Block a user