mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-17 08:57:24 +00:00
Merge branch '3.0' into PT-204
This commit is contained in:
@@ -1161,7 +1161,7 @@ SKIP: {
|
||||
},
|
||||
engine => 'InnoDB',
|
||||
is_autoinc => { column2 => 0, column3 => 0, id => 0 },
|
||||
is_col => { column2 => 1, column3 => 1, id => 1 },
|
||||
is_col => { column2 => 1, id => 1 },
|
||||
is_generated => { column3 => 1 },
|
||||
is_nullable => { column2 => 1, column3 => 1 },
|
||||
is_numeric => { column2 => 1, column3 => 1, id => 1 },
|
||||
|
89
t/pt-online-schema-change/pt-209.t
Normal file
89
t/pt-online-schema-change/pt-209.t
Normal file
@@ -0,0 +1,89 @@
|
||||
#!/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 threads;
|
||||
|
||||
use English qw(-no_match_vars);
|
||||
use Test::More;
|
||||
|
||||
use Data::Dumper;
|
||||
use PerconaTest;
|
||||
use Sandbox;
|
||||
use SqlModes;
|
||||
use File::Temp qw/ tempdir /;
|
||||
|
||||
require "$trunk/bin/pt-online-schema-change";
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
my $master_dbh = $sb->get_dbh_for('master');
|
||||
my $master_dsn = 'h=127.1,P=12345,u=msandbox,p=msandbox';
|
||||
|
||||
if ( !$master_dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
}
|
||||
|
||||
if ($sandbox_version lt '5.7') {
|
||||
plan skip_all => "RocksDB is only available on Percona Server 5.7.19+";
|
||||
}
|
||||
|
||||
my $rows = $master_dbh->selectall_arrayref('SHOW ENGINES', {Slice=>{}});
|
||||
my $rocksdb_enabled;
|
||||
for my $row (@$rows) {
|
||||
if ($row->{engine} eq 'ROCKSDB') {
|
||||
$rocksdb_enabled = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$rocksdb_enabled) {
|
||||
plan skip_all => "RocksDB engine is not available";
|
||||
}
|
||||
|
||||
plan tests => 3;
|
||||
|
||||
# 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;
|
||||
my $sample = "t/pt-online-schema-change/samples/";
|
||||
|
||||
$sb->load_file('master', "$sample/pt-209.sql");
|
||||
|
||||
($output, $exit_status) = full_output(
|
||||
sub { pt_online_schema_change::main(@args, "$master_dsn,D=test,t=t1",
|
||||
'--execute',
|
||||
'--alter', "ADD CONSTRAINT fk_some_id FOREIGN KEY (some_id) REFERENCES some(id)`",
|
||||
),
|
||||
},
|
||||
);
|
||||
|
||||
isnt(
|
||||
$exit_status,
|
||||
0,
|
||||
"PT-209 Altering RocksDB table adding a foreign key exit status != 0",
|
||||
);
|
||||
|
||||
like(
|
||||
$output,
|
||||
qr/FOREIGN KEYS are not supported by the RocksDB engine/s,
|
||||
"PT-209 Message cannot add FKs to a RocksDB table",
|
||||
);
|
||||
|
||||
$master_dbh->do("DROP DATABASE IF EXISTS test");
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
$sb->wipe_clean($master_dbh);
|
||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||
done_testing;
|
8
t/pt-online-schema-change/samples/pt-209.sql
Normal file
8
t/pt-online-schema-change/samples/pt-209.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
CREATE SCHEMA IF NOT EXISTS test;
|
||||
USE test;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE `test`.`t1` (
|
||||
`ID` int(11) NOT NULL,
|
||||
`Column2` int(11) DEFAULT NULL,
|
||||
PRIMARY KEY (`ID`)
|
||||
) ENGINE=RocksDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
75
t/pt-table-checksum/pt-225.t
Normal file
75
t/pt-table-checksum/pt-225.t
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/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;
|
||||
use SqlModes;
|
||||
require "$trunk/bin/pt-table-checksum";
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
my $dbh = $sb->get_dbh_for('master');
|
||||
|
||||
if ( !$dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
}
|
||||
else {
|
||||
plan tests => 3;
|
||||
}
|
||||
|
||||
diag("loading samples");
|
||||
|
||||
$sb->load_file('master', 't/pt-table-checksum/samples/pt-225.sql');
|
||||
|
||||
# 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.
|
||||
# And --max-load "" prevents waiting for status variables.
|
||||
my $master_dsn = $sb->dsn_for('master');
|
||||
diag("setting up the slaves");
|
||||
my $slave_dbh = $sb->get_dbh_for('slave1');
|
||||
# Create differences
|
||||
|
||||
$slave_dbh->do('DELETE FROM `test`.`sbtest1` WHERE id > 15');
|
||||
$slave_dbh->do('FLUSH TABLES');
|
||||
|
||||
my @args = ($master_dsn, "--set-vars", "innodb_lock_wait_timeout=50",
|
||||
"--ignore-databases", "mysql,sys,sakila,percona_test",
|
||||
"--nocheck-replication-filters");
|
||||
my $output;
|
||||
my $exit_status;
|
||||
|
||||
# Test #1
|
||||
$output = output(
|
||||
sub { $exit_status = pt_table_checksum::main(@args) },
|
||||
stderr => 1,
|
||||
);
|
||||
|
||||
isnt(
|
||||
$exit_status,
|
||||
0,
|
||||
"PT-225 virtual/generated columns are ignored - exit status",
|
||||
);
|
||||
|
||||
like(
|
||||
$output,
|
||||
qr/1\s+\d+\s+\d+\s+\d+\s+.*test.sbtest1/,
|
||||
"PT-225 virtual/generated columns were ignored",
|
||||
);
|
||||
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
$sb->wipe_clean($dbh);
|
||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||
exit;
|
77
t/pt-table-checksum/pt-226.t
Normal file
77
t/pt-table-checksum/pt-226.t
Normal file
@@ -0,0 +1,77 @@
|
||||
#!/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;
|
||||
use SqlModes;
|
||||
require "$trunk/bin/pt-table-checksum";
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
|
||||
my $dbh = $sb->get_dbh_for('master');
|
||||
|
||||
if ( !$dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
}
|
||||
else {
|
||||
plan tests => 3;
|
||||
}
|
||||
|
||||
diag("loading samples");
|
||||
#$sb->load_file('master', 't/pt-table-checksum/samples/pt-226.sql');
|
||||
$sb->load_file('master', 't/pt-table-checksum/samples/pt-226.sql');
|
||||
|
||||
# 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.
|
||||
# And --max-load "" prevents waiting for status variables.
|
||||
my $master_dsn = $sb->dsn_for('master');
|
||||
diag("setting up the slaves");
|
||||
my $slave_dbh = $sb->get_dbh_for('slave1');
|
||||
# Create differences
|
||||
|
||||
$slave_dbh->do('DELETE FROM `test`.`joinit` WHERE i > 90');
|
||||
$slave_dbh->do('FLUSH TABLES');
|
||||
$dbh->do('SET GLOBAL binlog_format="ROW"');
|
||||
|
||||
my @args = ($master_dsn, "--set-vars", "innodb_lock_wait_timeout=50",
|
||||
"--ignore-databases", "mysql",
|
||||
"--nocheck-replication-filters");
|
||||
my $output;
|
||||
my $exit_status;
|
||||
|
||||
# Test #1
|
||||
$output = output(
|
||||
sub { $exit_status = pt_table_checksum::main(@args) },
|
||||
stderr => 1,
|
||||
);
|
||||
|
||||
isnt(
|
||||
$exit_status,
|
||||
0,
|
||||
"PT-226 SET binlog_format='STATEMENT' exit status",
|
||||
);
|
||||
|
||||
like(
|
||||
$output,
|
||||
qr/1\s+100\s+1\s+0\s+.*test.joinit/,
|
||||
"PT-226 table joinit has differences",
|
||||
);
|
||||
|
||||
$dbh->do('SET GLOBAL binlog_format="STATEMENT"');
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
$sb->wipe_clean($dbh);
|
||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||
exit;
|
42
t/pt-table-checksum/samples/pt-225.sql
Normal file
42
t/pt-table-checksum/samples/pt-225.sql
Normal file
@@ -0,0 +1,42 @@
|
||||
DROP DATABASE IF EXISTS test;
|
||||
CREATE DATABASE test;
|
||||
|
||||
USE test;
|
||||
|
||||
CREATE TABLE `sbtest1` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`k` int(11) NOT NULL DEFAULT '0',
|
||||
`c` char(120) NOT NULL DEFAULT '',
|
||||
`pad` char(60) NOT NULL DEFAULT '',
|
||||
`json_test_v` json GENERATED ALWAYS AS (json_array(`k`,`c`,`pad`)) VIRTUAL,
|
||||
`json_test_s` json GENERATED ALWAYS AS (json_array(`k`,`c`,`pad`)) STORED,
|
||||
`json_test_index` varchar(255) GENERATED ALWAYS AS (json_array(`k`,`c`,`pad`)) STORED,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `k_1` (`k`),
|
||||
KEY `json_test_index` (`json_test_index`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=latin1 COMPRESSION='lz4';
|
||||
|
||||
|
||||
/*!40000 ALTER TABLE `sbtest1` DISABLE KEYS */;
|
||||
INSERT INTO `sbtest1` (`id`, `k`, `c`, `pad`) VALUES
|
||||
(01,583532949,'at non eaque sint velit enim facilis quisquam nam quaerat.','impedit quae hic possimus ullam est eos totam qui.'),
|
||||
(02,583532949,'eos exercitationem quisquam saepe totam dolore consequatur.','sit commodi consequatur neque qui.'),
|
||||
(03,1342458479,'et quia sunt eum eveniet non eum nobis quia est mollitia.','corrupti minima et quibusdam.'),
|
||||
(04,280366509,'ab minima laudantium!','est sed autem quia nobis suscipit pariatur modi!'),
|
||||
(05,1801160058,'perspiciatis tenetur minima accusantium consequatur in et.','rerum quo molestiae voluptates harum aspernatur sunt.'),
|
||||
(06,914091476,'quas aut nostrum a.','harum tempora adipisci et et.'),
|
||||
(07,1022430181,'qui voluptates inventore voluptatem voluptas numquam blanditiis corporis illum doloremque aut!','dicta neque laboriosam voluptatibus.'),
|
||||
(08,165910161,'voluptas molestiae harum quis quod.','voluptatem deleniti dolor blanditiis est earum.'),
|
||||
(09,1255569388,'consequuntur nihil non veniam et possimus sunt.','est est possimus recusandae ab.'),
|
||||
(10,1375471152,'doloribus quasi quasi eum hic et laborum autem laudantium saepe veritatis.','enim earum et placeat animi ut.'),
|
||||
(11,1705409249,'eveniet recusandae expedita est consectetur ut laudantium temporibus.','et asperiores porro id sunt totam maiores eum quidem.'),
|
||||
(12,2003588754,'debitis molestias voluptatibus quia.','sint est voluptatem nihil et.'),
|
||||
(13,1714682759,'voluptas officiis culpa quaerat sit quis.','vitae omnis repellat rerum consectetur ex.'),
|
||||
(14,1898674299,'et est quibusdam!','aut est labore.'),
|
||||
(15,1698116023,'similique nisi quisquam pariatur minus repudiandae ducimus.','eveniet rem nihil voluptatibus voluptatem non.'),
|
||||
(16,1310715836,'expedita ipsum aut veniam!','incidunt at officia nisi.'),
|
||||
(17,472875023,'numquam et quaerat voluptatibus.','commodi natus consequatur reiciendis adipisci ut.'),
|
||||
(18,1153628287,'aut quam quia vel molestiae qui.','eos voluptas quod doloremque!'),
|
||||
(19,525456967,'dignissimos quibusdam aut et.','laborum reprehenderit eius consequatur qui.'),
|
||||
(20,1396416465,'aperiam sint et.','fugiat neque impedit cumque soluta.'),
|
||||
(21,1640670520,'nisi repellendus et velit ab.','incidunt quo eligendi.');
|
115
t/pt-table-checksum/samples/pt-226.sql
Normal file
115
t/pt-table-checksum/samples/pt-226.sql
Normal file
@@ -0,0 +1,115 @@
|
||||
DROP DATABASE IF EXISTS test;
|
||||
CREATE DATABASE test;
|
||||
|
||||
USE test;
|
||||
|
||||
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 (1,'dicta ipsa molestiae sit aut sunt nesciunt.','07:21:11',914091476),
|
||||
(2,'id quia ut reprehenderit rerum.','06:08:56',1705409249),
|
||||
(3,'voluptates dolore repudiandae voluptas.','15:34:36',1310715836),
|
||||
(4,'aliquam error qui et rerum.','08:31:50',1640670520),
|
||||
(5,'accusamus sequi eos porro pariatur possimus.','20:51:37',2011751560),
|
||||
(6,NULL,'00:10:28',1657080267),
|
||||
(7,'culpa porro necessitatibus recusandae recusandae.','11:03:59',1406095383),
|
||||
(8,'beatae voluptatum odio.','19:47:12',1134860842),
|
||||
(9,'ea soluta et occaecati facilis.','04:00:31',1777484703),
|
||||
(10,NULL,'15:22:10',1933032615),
|
||||
(11,NULL,'09:37:52',950391508),
|
||||
(12,'ad est optio esse.','05:25:06',1947188364),
|
||||
(13,'accusamus necessitatibus qui corrupti quae soluta adipisci.','21:04:30',341275526),
|
||||
(14,'rem doloremque et nobis.','13:59:09',1897356779),
|
||||
(15,'ab consequatur vel porro ut.','19:12:02',2131804237),
|
||||
(16,'quas molestiae saepe voluptatem rerum quis.','03:41:59',1480121891),
|
||||
(17,'assumenda ipsa facere et porro voluptas.','17:08:41',663551763),
|
||||
(18,'est reprehenderit expedita magnam suscipit sunt et.','07:15:01',363238924),
|
||||
(19,'rerum qui laudantium.','09:51:18',419864978),
|
||||
(20,'ut qui temporibus vel.','08:40:00',284706965),
|
||||
(21,'laboriosam ratione aliquid consectetur quidem ab assumenda qui.','15:21:45',1408072633),
|
||||
(22,'at qui delectus quos sit.','12:43:10',1124985924),
|
||||
(23,'doloremque odio eos accusantium praesentium officia molestiae ad','01:31:02',1874543227),
|
||||
(24,'eaque suscipit ullam.','04:07:37',1442092269),
|
||||
(25,'ut consectetur sit incidunt nostrum occaecati in similique.','20:12:29',1138469771),
|
||||
(26,'maiores in ipsum.','12:34:46',156229088),
|
||||
(27,'corporis et reiciendis velit veritatis eaque.','15:51:48',271447457),
|
||||
(28,NULL,'14:48:19',1508837206),
|
||||
(29,'rerum quod incidunt ut.','22:59:07',915259646),
|
||||
(30,'nulla recusandae qui quisquam ut animi culpa rem dolor.','16:58:10',1648444437),
|
||||
(31,'ipsa qui porro aliquam ab quisquam odio.','01:31:24',1928855257),
|
||||
(32,'occaecati et officia quod unde.','23:40:12',2094599137),
|
||||
(33,'molestiae ipsum animi illo incidunt sit fugiat.','20:27:01',682166125),
|
||||
(34,'sed rerum tenetur ut maxime cumque et.','07:59:16',402527489),
|
||||
(35,'quasi qui deleniti et quia aspernatur eum harum.','09:44:45',1875752492),
|
||||
(36,'molestias deserunt sit.','04:47:40',1621124315),
|
||||
(37,'ut sit dolorem praesentium voluptatem numquam vel est repellendu','04:27:29',1929299726),
|
||||
(38,'nesciunt officia qui expedita officia!','14:12:17',1871749515),
|
||||
(39,'molestias fugit qui quas aut quis quis.','02:20:50',133250776),
|
||||
(40,'nemo voluptas nostrum quae at nesciunt aut.','05:30:16',1977544176),
|
||||
(41,'neque at nemo laudantium.','18:49:09',1160495982),
|
||||
(42,NULL,'01:53:15',238269571),
|
||||
(43,'placeat sit magnam quasi officiis rem.','01:32:17',2050374349),
|
||||
(44,'harum magnam repellendus natus molestias.','02:31:36',266881561),
|
||||
(45,'corrupti optio aliquid et eum.','11:27:58',1057706898),
|
||||
(46,'et aut a at alias quod.','20:27:16',1803439254),
|
||||
(47,'eum enim voluptatem fugit ipsam iure.','10:00:56',465971914),
|
||||
(48,'sapiente quis nemo est aperiam corporis exercitationem velit.','03:55:59',1754471891),
|
||||
(49,'consequuntur aspernatur fugiat est sit autem est.','22:25:20',454377625),
|
||||
(50,'aut sed consequatur amet.','21:59:00',1580210933),
|
||||
(51,'autem eius delectus autem ut.','05:42:06',694812007),
|
||||
(52,'magnam nisi ipsum sit quae reprehenderit eius.','10:57:48',1705595462),
|
||||
(53,'qui sit ut est voluptatibus earum.','08:43:27',1756643709),
|
||||
(54,'dolore enim at eum deserunt excepturi omnis!','15:32:25',1793291857),
|
||||
(55,'nesciunt perferendis omnis quia perspiciatis.','00:53:16',439848412),
|
||||
(56,'voluptas laboriosam commodi inventore.','12:17:27',502769231),
|
||||
(57,'non nihil inventore qui.','12:23:29',2010474512),
|
||||
(58,NULL,'07:59:58',195539887),
|
||||
(59,NULL,'01:03:13',185293657),
|
||||
(60,'sunt et perferendis.','01:41:52',593397986),
|
||||
(61,'qui nemo magni explicabo iure corrupti exercitationem quas!','13:12:36',158590428),
|
||||
(62,'fugiat optio omnis quisquam.','15:34:07',249619147),
|
||||
(63,'suscipit dicta incidunt eaque vel officia.','00:12:54',884057050),
|
||||
(64,'at qui reprehenderit quod est optio.','11:44:52',1888470232),
|
||||
(65,NULL,'17:28:01',1631026724),
|
||||
(66,'eius sunt omnis quibusdam autem ut.','08:24:17',91435374),
|
||||
(67,'doloremque cum cupiditate dolorem omnis.','06:29:20',1151045825),
|
||||
(68,'iure facilis qui illum aliquam sed asperiores sed!','11:18:27',86548934),
|
||||
(69,'eos nisi ipsam molestiae ut.','03:13:29',1033200673),
|
||||
(70,'ex sint aut et cumque et facilis et amet!','01:45:19',1258514903),
|
||||
(71,'nihil sit assumenda voluptatibus explicabo!','21:36:39',185971679),
|
||||
(72,'amet vero perferendis atque.','12:01:35',2040594002),
|
||||
(73,'earum molestiae asperiores ut.','19:18:16',1165023000),
|
||||
(74,'consequatur rerum similique quasi.','14:44:12',713361001),
|
||||
(75,'pariatur voluptatibus omnis ipsum iure sint veritatis at cupidit','18:06:16',1550033064),
|
||||
(76,'exercitationem maxime dolor totam velit sit provident.','15:33:33',979765860),
|
||||
(77,'sed reiciendis aut id adipisci error!','05:17:42',542662142),
|
||||
(78,'eaque quod distinctio nihil iste qui aspernatur et accusantium.','10:35:44',1134356103),
|
||||
(79,'molestias deleniti deleniti perspiciatis.','19:16:57',1360205808),
|
||||
(80,'architecto enim nulla.','09:28:24',531569080),
|
||||
(81,'porro aut at quisquam commodi vel molestias.','22:49:27',1154086856),
|
||||
(82,'libero in et in mollitia.','08:35:21',1945863708),
|
||||
(83,'voluptates sequi ut enim in fuga debitis.','09:11:07',1987718992),
|
||||
(84,'voluptatum neque voluptates minus.','21:44:27',1928647112),
|
||||
(85,'maxime similique consectetur.','14:01:49',1808357109),
|
||||
(86,'nesciunt aspernatur et mollitia aut labore.','00:48:27',1645832522),
|
||||
(87,'alias quasi ut eveniet vero necessitatibus velit nesciunt nam!','18:22:59',740680075),
|
||||
(88,'et totam est voluptas odit rem illum saepe.','02:35:28',980905093),
|
||||
(89,'porro cupiditate assumenda et non magni deserunt qui repellendus','04:18:30',1965305195),
|
||||
(90,'vitae quis ullam eos in debitis laudantium!','22:39:14',535565611),
|
||||
(91,'quo consequatur expedita.','12:33:03',1037848256),
|
||||
(92,'ipsum at ea consequatur tempore natus!','12:40:38',1216234763),
|
||||
(93,'numquam repellendus modi culpa corporis aut.','07:46:22',984113837),
|
||||
(94,'minima in sed modi maxime est iusto.','20:48:55',1026183968),
|
||||
(95,NULL,'10:48:23',1418133890),
|
||||
(96,'nesciunt similique fugiat quae repudiandae et eveniet.','17:44:07',583744287),
|
||||
(97,'libero voluptatibus quibusdam.','09:09:23',1292950444),
|
||||
(98,'id quasi distinctio molestiae eaque exercitationem id.','18:17:07',625537546),
|
||||
(99,'veritatis ab quibusdam omnis eum dolor quasi doloremque quia.','02:10:52',1042143012),
|
||||
(100,'vel accusamus nisi praesentium et.','04:15:54',661815870);
|
||||
|
102
t/pt-table-sync/pt_221.t
Normal file
102
t/pt-table-sync/pt_221.t
Normal file
@@ -0,0 +1,102 @@
|
||||
#!/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-table-sync";
|
||||
|
||||
sub set_binlog_format {
|
||||
my ($sb, $format) = @_;
|
||||
|
||||
my $master_dbh = $sb->get_dbh_for('master');
|
||||
my $slave1_dbh = $sb->get_dbh_for('slave1');
|
||||
my $slave2_dbh = $sb->get_dbh_for('slave2');
|
||||
|
||||
$slave2_dbh->do("STOP SLAVE");
|
||||
$slave1_dbh->do("STOP SLAVE");
|
||||
|
||||
$slave2_dbh->do("SET GLOBAL binlog_format='$format'");
|
||||
$slave1_dbh->do("SET GLOBAL binlog_format='$format'");
|
||||
$master_dbh->do("SET GLOBAL binlog_format='$format'");
|
||||
|
||||
$slave2_dbh->do("START SLAVE");
|
||||
$slave1_dbh->do("START SLAVE");
|
||||
}
|
||||
|
||||
my $dp = new DSNParser(opts=>$dsn_opts);
|
||||
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp, env => q/BINLOG_FORMAT="ROW"/);
|
||||
|
||||
my $master_dbh = $sb->get_dbh_for('master');
|
||||
my $master_dsn = $sb->dsn_for('master');
|
||||
my $slave_dsn = $sb->dsn_for('slave1');
|
||||
|
||||
|
||||
if ( !$master_dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
} elsif ($sb->has_engine('master', 'rocksdb') != 1) {
|
||||
plan skip_all => 'This test needs RocksDB engine';
|
||||
} else {
|
||||
plan tests => 4;
|
||||
}
|
||||
|
||||
set_binlog_format($sb, 'ROW');
|
||||
|
||||
$master_dbh->disconnect();
|
||||
$master_dbh = $sb->get_dbh_for('master');
|
||||
|
||||
$sb->load_file('master', 't/pt-table-sync/samples/pt_221.sql');
|
||||
|
||||
my @args = ('--sync-to-master', $slave_dsn, qw(-t test.t1 --print --execute));
|
||||
|
||||
my ($output, $exit) = full_output(
|
||||
sub { pt_table_sync::main(@args, qw()) },
|
||||
stderr => 1,
|
||||
);
|
||||
|
||||
isnt(
|
||||
$exit,
|
||||
0,
|
||||
"PT-221 fails if using --sync-to-master with RocksDB",
|
||||
);
|
||||
|
||||
like(
|
||||
$output,
|
||||
qr/Cannot sync using --sync-to-master with test.t1 due to the limitations of the RocksDB engine/,
|
||||
"PT-221 Cannot use --sync-to-master with RockSDB",
|
||||
);
|
||||
|
||||
$sb->wait_for_slaves();
|
||||
|
||||
@args = ('--replicate', 'test.checksums', $master_dsn, qw(-t test.t1 --print --execute));
|
||||
|
||||
($output, $exit) = full_output(
|
||||
sub { pt_table_sync::main(@args, qw()) },
|
||||
stderr => 1,
|
||||
);
|
||||
|
||||
is(
|
||||
$exit,
|
||||
0,
|
||||
"PT-221 Doesn't fail if using --replicate with RocksDB",
|
||||
);
|
||||
|
||||
set_binlog_format($sb, 'STATEMENT');
|
||||
|
||||
# #############################################################################
|
||||
# Done.
|
||||
# #############################################################################
|
||||
$sb->wipe_clean($master_dbh);
|
||||
|
||||
|
||||
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
|
||||
exit;
|
135
t/pt-table-sync/samples/pt_221.sql
Normal file
135
t/pt-table-sync/samples/pt_221.sql
Normal file
@@ -0,0 +1,135 @@
|
||||
DROP DATABASE IF EXISTS test;
|
||||
CREATE DATABASE test;
|
||||
USE test;
|
||||
|
||||
CREATE TABLE `test`.`t1` (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
f2 VARCHAR(25) NOT NULL,
|
||||
f3 INT,
|
||||
f4 timestamp
|
||||
) Engine=RocksDB;
|
||||
|
||||
INSERT INTO `t1` VALUES
|
||||
(1,'Henry Stanley',583532949,'2017-02-07 12:12:54'),
|
||||
(2,'Kathy Franklin',960400044,'2017-10-10 18:06:57'),
|
||||
(3,'Mr. Dr. Anthony Howard',174461349,'2017-11-16 06:06:11'),
|
||||
(4,'Janice Foster I II III IV',443038240,'2016-12-07 13:01:35'),
|
||||
(5,'Sharon Daniels',169641627,'2017-01-09 15:03:40'),
|
||||
(6,'Alice Tucker',1012579941,'2017-06-16 06:06:28'),
|
||||
(7,'Theresa Allen',894954174,'2017-07-17 10:10:00'),
|
||||
(8,'Elizabeth Fowler',1938641144,'2017-03-27 14:02:24'),
|
||||
(9,'Rebecca Lee',1279764421,'2017-03-06 10:10:08'),
|
||||
(10,'Anne Kennedy I II III IV ',159121576,'2017-08-15 09:09:16'),
|
||||
(11,'Christina Arnold',1113045364,'2017-08-18 19:07:02'),
|
||||
(12,'Mrs. Ms. Miss Cheryl Garc',278843827,'2017-07-23 00:12:00'),
|
||||
(13,'Louis Harvey',161885407,'2016-12-23 08:08:21'),
|
||||
(14,'Julie Bishop',1592388661,'2016-11-28 01:01:03'),
|
||||
(15,'Todd Ramirez',362850921,'2017-02-20 04:04:26'),
|
||||
(16,'Gary Kennedy',1795393312,'2017-03-25 23:11:43'),
|
||||
(17,'Roger Hart',1400528216,'2017-04-24 10:10:17'),
|
||||
(18,'Lois Henry',1104948011,'2017-08-29 10:10:25'),
|
||||
(19,'Debra Stanley',1103860241,'2017-08-30 16:04:47'),
|
||||
(20,'Amy Cook',2001779440,'2017-03-04 14:02:36'),
|
||||
(21,'Rose Vasquez I II III IV ',1025398331,'2017-01-15 05:05:04'),
|
||||
(22,'David Flores',540200823,'2017-05-13 09:09:48'),
|
||||
(23,'Brian Crawford',1617053422,'2017-10-14 07:07:47'),
|
||||
(24,'Kelly Freeman',1361426130,'2017-04-01 04:04:17'),
|
||||
(25,'Sarah Palmer',1139691470,'2017-10-23 18:06:49'),
|
||||
(26,'Dorothy Shaw',900404079,'2017-10-17 10:10:01'),
|
||||
(27,'Kelly Wagner',1982163577,'2016-12-01 04:04:37'),
|
||||
(28,'Diane Hall',369511081,'2017-07-28 01:01:18'),
|
||||
(29,'Mr. Dr. Harold Dean',811105176,'2017-11-19 13:01:31'),
|
||||
(30,'Edward Ferguson',1914574524,'2017-10-14 03:03:49'),
|
||||
(31,'Dorothy Arnold',1899568350,'2017-08-29 14:02:41'),
|
||||
(32,'Judith Cox',17691206,'2016-12-11 04:04:20'),
|
||||
(33,'Elizabeth Johnson',1685990258,'2017-06-22 20:08:50'),
|
||||
(34,'Carolyn Edwards',1168962838,'2017-04-08 18:06:00'),
|
||||
(35,'Ruby Chapman',1688473058,'2017-04-16 04:04:24'),
|
||||
(36,'Amanda Welch I II III IV ',193262041,'2017-04-13 14:02:18'),
|
||||
(37,'Larry Porter Jr. Sr. I II',75666836,'2017-04-16 16:04:09'),
|
||||
(38,'Kevin George',887309316,'2017-06-13 12:12:47'),
|
||||
(39,'Maria Brown',1751136810,'2017-06-08 17:05:37'),
|
||||
(40,'Tammy Ramos',1588294845,'2017-07-22 11:11:24'),
|
||||
(41,'Denise Ellis',1545291805,'2017-08-20 10:10:45'),
|
||||
(42,'Kelly Williamson',861653714,'2017-10-10 03:03:38'),
|
||||
(43,'Carolyn Patterson',2114635136,'2017-07-03 16:04:20'),
|
||||
(44,'Amanda Sullivan',505888065,'2017-04-09 18:06:10'),
|
||||
(45,'Scott White',2053562943,'2017-04-16 02:02:03'),
|
||||
(46,'Mrs. Ms. Miss Janet Richa',273248685,'2017-01-23 14:02:17'),
|
||||
(47,'Henry Davis Jr. Sr. I II ',1807469649,'2017-07-20 22:10:52'),
|
||||
(48,'Sandra Powell',425895561,'2017-05-16 06:06:02'),
|
||||
(49,'Roger Morrison',519405919,'2017-07-25 20:08:28'),
|
||||
(50,'Henry Murray Jr. Sr. I II',2095628347,'2017-09-09 02:02:44'),
|
||||
(51,'Bonnie Wood',632299815,'2017-01-21 09:09:43'),
|
||||
(52,'Kevin Riley',1337811955,'2017-09-01 00:12:01'),
|
||||
(53,'Cheryl Lewis',1183760979,'2017-07-10 04:04:41'),
|
||||
(54,'Craig Oliver',415886351,'2017-08-27 14:02:11'),
|
||||
(55,'Peter Elliott',1441905738,'2017-01-25 16:04:06'),
|
||||
(56,'Sarah Henderson',1398808230,'2017-09-14 18:06:22'),
|
||||
(57,'Angela Olson',73529235,'2017-02-11 19:07:04'),
|
||||
(58,'Martin Hunt',828130434,'2017-04-11 23:11:01'),
|
||||
(59,'Ann Grant I II III IV V M',960124334,'2017-08-01 22:10:52'),
|
||||
(60,'Joe Hudson',1729961064,'2017-10-10 13:01:00'),
|
||||
(61,'Mrs. Ms. Miss Shirley Rod',2124381773,'2017-05-27 20:08:23'),
|
||||
(62,'Stephen Long',374271961,'2017-09-08 12:12:02'),
|
||||
(63,'Gerald Butler',165044727,'2017-10-23 00:12:06'),
|
||||
(64,'Tammy Hernandez',805042592,'2016-12-17 06:06:23'),
|
||||
(65,'Marie Armstrong I II III ',342177736,'2017-03-16 01:01:52'),
|
||||
(66,'Michelle Perry',1879564383,'2017-09-28 15:03:25'),
|
||||
(67,'Albert Stevens Jr. Sr. I ',294854430,'2016-11-30 00:12:59'),
|
||||
(68,'Jason Tucker',725774075,'2016-11-28 00:12:17'),
|
||||
(69,'Philip Parker',482904842,'2017-08-13 06:06:22'),
|
||||
(70,'Heather Stone',651794709,'2017-02-27 18:06:37'),
|
||||
(71,'Mr. Dr. Keith Stone',581063673,'2017-10-31 21:09:54'),
|
||||
(72,'Joseph Hicks',776452583,'2017-07-17 20:08:21'),
|
||||
(73,'Judith Martinez',2056678762,'2017-04-01 06:06:00'),
|
||||
(74,'Roger Fields',1025075771,'2017-09-11 03:03:03'),
|
||||
(75,'Russell Alvarez',2058724771,'2017-08-28 21:09:05'),
|
||||
(76,'Judith Shaw',439257644,'2016-12-06 09:09:25'),
|
||||
(77,'Louis Johnston Jr. Sr. I ',1887594525,'2017-06-24 19:07:06'),
|
||||
(78,'Richard Butler',39227130,'2017-07-05 16:04:22'),
|
||||
(79,'Wayne Watkins Jr. Sr. I I',503442129,'2017-01-24 14:02:10'),
|
||||
(80,'Patricia Stewart',286838439,'2017-11-16 06:06:24'),
|
||||
(81,'Kelly Oliver',1069073876,'2017-02-24 02:02:17'),
|
||||
(82,'Mrs. Ms. Miss Phyllis Fre',1053443872,'2017-05-31 04:04:19'),
|
||||
(83,'Wanda Spencer',1685359738,'2017-09-27 08:08:33'),
|
||||
(84,'William Harris Jr. Sr. I ',1117708440,'2017-07-24 03:03:22'),
|
||||
(85,'Eugene Sanders',1605154172,'2017-09-29 13:01:06'),
|
||||
(86,'Peter Sims Jr. Sr. I II I',213620615,'2017-09-06 18:06:19'),
|
||||
(87,'Melissa Riley',923001454,'2017-09-30 10:10:47'),
|
||||
(88,'Mr. Dr. Jonathan Lee',137651089,'2017-07-29 07:07:59'),
|
||||
(89,'Donald Burke',1268762182,'2017-08-30 15:03:35'),
|
||||
(90,'Adam Long',971993341,'2017-10-27 23:11:26'),
|
||||
(91,'Theresa Taylor',20073496,'2017-07-26 21:09:23'),
|
||||
(92,'Heather Matthews',910759132,'2017-02-19 19:07:58'),
|
||||
(93,'Jerry King Jr. Sr. I II I',2055915105,'2017-06-25 15:03:29'),
|
||||
(94,'Sara Hawkins',1178751968,'2017-03-29 22:10:59'),
|
||||
(95,'Ruby Long',998718314,'2017-07-29 16:04:18'),
|
||||
(96,'Billy Cooper',190019474,'2017-02-04 12:12:41'),
|
||||
(97,'Jose Wheeler',1922987914,'2017-11-02 21:09:08'),
|
||||
(98,'Clarence Weaver',364986423,'2017-09-10 00:12:31'),
|
||||
(99,'Gary Riley',524227310,'2017-09-03 16:04:16'),
|
||||
(100,'Melissa Parker',1833910235,'2017-10-03 05:05:26');
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS test.checksums;
|
||||
|
||||
CREATE TABLE test.checksums (
|
||||
db CHAR(64) NOT NULL,
|
||||
tbl CHAR(64) NOT NULL,
|
||||
chunk INT NOT NULL,
|
||||
chunk_time FLOAT NULL,
|
||||
chunk_index VARCHAR(200) NULL,
|
||||
lower_boundary TEXT NULL,
|
||||
upper_boundary TEXT NULL,
|
||||
this_crc CHAR(40) NOT NULL,
|
||||
this_cnt INT NOT NULL,
|
||||
master_crc CHAR(40) NULL,
|
||||
master_cnt INT NULL,
|
||||
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (db, tbl, chunk),
|
||||
INDEX ts_db_tbl (ts, db, tbl)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
INSERT INTO test.checksums VALUES('test', 't1', 1,0,'','','100', '', 0,'',0,NOW());
|
Reference in New Issue
Block a user