Merge lp:~percona-toolkit-dev/percona-toolkit/fix-bug-911996 into lp:percona-toolkit/2.0

Proposed by Daniel Nichter
Status: Merged
Merged at revision: 130
Proposed branch: lp:~percona-toolkit-dev/percona-toolkit/fix-bug-911996
Merge into: lp:percona-toolkit/2.0
Diff against target: 132 lines (+47/-16)
5 files modified
Changelog (+2/-0)
bin/pt-table-sync (+2/-2)
t/pt-table-sync/basics.t (+30/-1)
t/pt-table-sync/diff_where.t (+1/-1)
t/pt-table-sync/samples/issue_560_output_2.txt (+12/-12)
To merge this branch: bzr merge lp:~percona-toolkit-dev/percona-toolkit/fix-bug-911996
Reviewer Review Type Date Requested Status
Brian Fraser (community) Approve
Baron Schwartz (community) Approve
Daniel Nichter Approve
Review via email: mp+87666@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Daniel Nichter (daniel-nichter) :
review: Approve
131. By Daniel Nichter

Update sample files.

Revision history for this message
Baron Schwartz (baron-xaprb) :
review: Approve
Revision history for this message
Brian Fraser (fraserbn) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Changelog'
2--- Changelog 2011-12-30 22:44:29 +0000
3+++ Changelog 2012-01-05 18:57:23 +0000
4@@ -1,5 +1,7 @@
5 Changelog for Percona Toolkit
6
7+ * Fixed bug 911996: pt-table-sync --replicate causes "Unknown column" error
8+
9 v2.0.1 released 2011-12-30
10
11 * Completely redesigned pt-table-checksum
12
13=== modified file 'bin/pt-table-sync'
14--- bin/pt-table-sync 2011-12-30 22:44:29 +0000
15+++ bin/pt-table-sync 2012-01-05 18:57:23 +0000
16@@ -8892,13 +8892,13 @@
17 my $lb_sql = $asc->{boundaries}->{'>='};
18 foreach my $val ( $q->deserialize_list($diff->{lower_boundary}) ) {
19 my $quoted_val = $q->quote_val($val);
20- $lb_sql =~ s/\?/$val/;
21+ $lb_sql =~ s/\?/$quoted_val/;
22 }
23
24 my $ub_sql = $asc->{boundaries}->{'<='};
25 foreach my $val ( $q->deserialize_list($diff->{upper_boundary}) ) {
26 my $quoted_val = $q->quote_val($val);
27- $ub_sql =~ s/\?/$val/;
28+ $ub_sql =~ s/\?/$quoted_val/;
29 }
30
31 return "$lb_sql AND $ub_sql";
32
33=== modified file 't/pt-table-sync/basics.t'
34--- t/pt-table-sync/basics.t 2011-12-30 16:23:41 +0000
35+++ t/pt-table-sync/basics.t 2012-01-05 18:57:23 +0000
36@@ -28,7 +28,7 @@
37 plan skip_all => 'Cannot connect to sandbox slave';
38 }
39 else {
40- plan tests => 17;
41+ plan tests => 19;
42 }
43
44 $sb->wipe_clean($master_dbh);
45@@ -168,6 +168,35 @@
46 # Restore PTDEBUG env.
47 $ENV{PTDEBUG} = $dbg || 0;
48
49+# ###########################################################################
50+# Fix bug 911996.
51+# ###########################################################################
52+`$trunk/bin/pt-table-checksum h=127.1,P=12345,u=msandbox,p=msandbox --max-load '' --lock-wait 3 --chunk-size 50 --chunk-index idx_actor_last_name -t sakila.actor --quiet`;
53+
54+PerconaTest::wait_for_table($slave_dbh, "percona.checksums", "db='sakila' and tbl='actor' and chunk=7");
55+$slave_dbh->do("update percona.checksums set this_crc='' where db='sakila' and tbl='actor' and chunk=3");
56+$slave_dbh->do("update sakila.actor set last_name='' where actor_id=30");
57+
58+$output = output(
59+ sub {
60+ pt_table_sync::main('h=127.1,P=12345,u=msandbox,p=msandbox',
61+ qw(--print --execute --replicate percona.checksums),
62+ qw(--no-foreign-key-checks))
63+ }
64+);
65+
66+like(
67+ $output,
68+ qr/^REPLACE INTO `sakila`.`actor`\(`actor_id`, `first_name`, `last_name`, `last_update`\) VALUES \('30', 'SANDRA', 'PECK', '2006-02-15 04:34:33'\)/,
69+ "--replicate with char index col (bug 911996)"
70+);
71+
72+$output = `$trunk/bin/pt-table-checksum h=127.1,P=12345,u=msandbox,p=msandbox --max-load '' --lock-wait 3 --chunk-size 50 --chunk-index idx_actor_last_name -t sakila.actor`;
73+is(
74+ PerconaTest::count_checksum_results($output, 'diffs'),
75+ 0,
76+ "Synced diff (bug 911996)"
77+);
78
79 # #############################################################################
80 # Done.
81
82=== modified file 't/pt-table-sync/diff_where.t'
83--- t/pt-table-sync/diff_where.t 2011-12-22 22:43:15 +0000
84+++ t/pt-table-sync/diff_where.t 2012-01-05 18:57:23 +0000
85@@ -54,7 +54,7 @@
86 this_crc => '4a57d814',
87 upper_boundary => '9'
88 },
89- where => "((`id` >= 7)) AND ((`id` <= 9))",
90+ where => "((`id` >= '7')) AND ((`id` <= '9'))",
91 );
92
93 # #############################################################################
94
95=== modified file 't/pt-table-sync/samples/issue_560_output_2.txt'
96--- t/pt-table-sync/samples/issue_560_output_2.txt 2011-12-22 22:50:52 +0000
97+++ t/pt-table-sync/samples/issue_560_output_2.txt 2012-01-05 18:57:23 +0000
98@@ -1,22 +1,22 @@
99 # Syncing via replication P=12346,h=127.1,p=...,u=msandbox
100 # DELETE REPLACE INSERT UPDATE ALGORITHM START END EXIT DATABASE.TABLE
101-# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) AND ((((`player_id` > 301) OR (`player_id` = 301 AND `buddy_id` >= 887)) AND ((`player_id` < 350) OR (`player_id` = 350 AND `buddy_id` <= 2454)))) FOR UPDATE
102-# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) AND ((((`player_id` > 301) OR (`player_id` = 301 AND `buddy_id` >= 887)) AND ((`player_id` < 350) OR (`player_id` = 350 AND `buddy_id` <= 2454)))) LOCK IN SHARE MODE
103-# SELECT /*rows in nibble*/ `player_id`, `buddy_id`, CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS __crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) AND (((`player_id` > 301) OR (`player_id` = 301 AND `buddy_id` >= 887)) AND ((`player_id` < 350) OR (`player_id` = 350 AND `buddy_id` <= 2454))) ORDER BY `player_id`, `buddy_id` FOR UPDATE
104-# SELECT /*rows in nibble*/ `player_id`, `buddy_id`, CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS __crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) AND (((`player_id` > 301) OR (`player_id` = 301 AND `buddy_id` >= 887)) AND ((`player_id` < 350) OR (`player_id` = 350 AND `buddy_id` <= 2454))) ORDER BY `player_id`, `buddy_id` LOCK IN SHARE MODE
105+# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) AND ((((`player_id` > '301') OR (`player_id` = '301' AND `buddy_id` >= '887')) AND ((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454')))) FOR UPDATE
106+# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) AND ((((`player_id` > '301') OR (`player_id` = '301' AND `buddy_id` >= '887')) AND ((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454')))) LOCK IN SHARE MODE
107+# SELECT /*rows in nibble*/ `player_id`, `buddy_id`, CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS __crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) AND (((`player_id` > '301') OR (`player_id` = '301' AND `buddy_id` >= '887')) AND ((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) ORDER BY `player_id`, `buddy_id` FOR UPDATE
108+# SELECT /*rows in nibble*/ `player_id`, `buddy_id`, CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS __crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) AND (((`player_id` > '301') OR (`player_id` = '301' AND `buddy_id` >= '887')) AND ((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454'))) ORDER BY `player_id`, `buddy_id` LOCK IN SHARE MODE
109 DELETE FROM `issue_560`.`buddy_list` WHERE `player_id`='333' AND `buddy_id`='0' LIMIT 1;
110 DELETE FROM `issue_560`.`buddy_list` WHERE `player_id`='334' AND `buddy_id`='0' LIMIT 1;
111 REPLACE INTO `issue_560`.`buddy_list`(`player_id`, `buddy_id`) VALUES ('333', '3414');
112 REPLACE INTO `issue_560`.`buddy_list`(`player_id`, `buddy_id`) VALUES ('334', '6626');
113-# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE ((((`player_id` > '350') OR (`player_id` = '350' AND `buddy_id` > '2454')) AND 1=1)) AND ((((`player_id` > 301) OR (`player_id` = 301 AND `buddy_id` >= 887)) AND ((`player_id` < 350) OR (`player_id` = 350 AND `buddy_id` <= 2454)))) FOR UPDATE
114-# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE ((((`player_id` > '350') OR (`player_id` = '350' AND `buddy_id` > '2454')) AND 1=1)) AND ((((`player_id` > 301) OR (`player_id` = 301 AND `buddy_id` >= 887)) AND ((`player_id` < 350) OR (`player_id` = 350 AND `buddy_id` <= 2454)))) LOCK IN SHARE MODE
115+# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE ((((`player_id` > '350') OR (`player_id` = '350' AND `buddy_id` > '2454')) AND 1=1)) AND ((((`player_id` > '301') OR (`player_id` = '301' AND `buddy_id` >= '887')) AND ((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454')))) FOR UPDATE
116+# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE ((((`player_id` > '350') OR (`player_id` = '350' AND `buddy_id` > '2454')) AND 1=1)) AND ((((`player_id` > '301') OR (`player_id` = '301' AND `buddy_id` >= '887')) AND ((`player_id` < '350') OR (`player_id` = '350' AND `buddy_id` <= '2454')))) LOCK IN SHARE MODE
117 # 2 2 0 0 Nibble 00:00:00 00:00:00 2 issue_560.buddy_list
118-# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) AND ((((`player_id` > 451) OR (`player_id` = 451 AND `buddy_id` >= 9245)) AND ((`player_id` < 500) OR (`player_id` = 500 AND `buddy_id` <= 4272)))) FOR UPDATE
119-# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) AND ((((`player_id` > 451) OR (`player_id` = 451 AND `buddy_id` >= 9245)) AND ((`player_id` < 500) OR (`player_id` = 500 AND `buddy_id` <= 4272)))) LOCK IN SHARE MODE
120-# SELECT /*rows in nibble*/ `player_id`, `buddy_id`, CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS __crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) AND (((`player_id` > 451) OR (`player_id` = 451 AND `buddy_id` >= 9245)) AND ((`player_id` < 500) OR (`player_id` = 500 AND `buddy_id` <= 4272))) ORDER BY `player_id`, `buddy_id` FOR UPDATE
121-# SELECT /*rows in nibble*/ `player_id`, `buddy_id`, CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS __crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) AND (((`player_id` > 451) OR (`player_id` = 451 AND `buddy_id` >= 9245)) AND ((`player_id` < 500) OR (`player_id` = 500 AND `buddy_id` <= 4272))) ORDER BY `player_id`, `buddy_id` LOCK IN SHARE MODE
122+# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) AND ((((`player_id` > '451') OR (`player_id` = '451' AND `buddy_id` >= '9245')) AND ((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272')))) FOR UPDATE
123+# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) AND ((((`player_id` > '451') OR (`player_id` = '451' AND `buddy_id` >= '9245')) AND ((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272')))) LOCK IN SHARE MODE
124+# SELECT /*rows in nibble*/ `player_id`, `buddy_id`, CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS __crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) AND (((`player_id` > '451') OR (`player_id` = '451' AND `buddy_id` >= '9245')) AND ((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) ORDER BY `player_id`, `buddy_id` FOR UPDATE
125+# SELECT /*rows in nibble*/ `player_id`, `buddy_id`, CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS __crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE (((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) AND (((`player_id` > '451') OR (`player_id` = '451' AND `buddy_id` >= '9245')) AND ((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272'))) ORDER BY `player_id`, `buddy_id` LOCK IN SHARE MODE
126 DELETE FROM `issue_560`.`buddy_list` WHERE `player_id`='486' AND `buddy_id`='0' LIMIT 1;
127 REPLACE INTO `issue_560`.`buddy_list`(`player_id`, `buddy_id`) VALUES ('486', '1660');
128-# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE ((((`player_id` > '500') OR (`player_id` = '500' AND `buddy_id` > '4272')) AND 1=1)) AND ((((`player_id` > 451) OR (`player_id` = 451 AND `buddy_id` >= 9245)) AND ((`player_id` < 500) OR (`player_id` = 500 AND `buddy_id` <= 4272)))) FOR UPDATE
129-# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE ((((`player_id` > '500') OR (`player_id` = '500' AND `buddy_id` > '4272')) AND 1=1)) AND ((((`player_id` > 451) OR (`player_id` = 451 AND `buddy_id` >= 9245)) AND ((`player_id` < 500) OR (`player_id` = 500 AND `buddy_id` <= 4272)))) LOCK IN SHARE MODE
130+# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE ((((`player_id` > '500') OR (`player_id` = '500' AND `buddy_id` > '4272')) AND 1=1)) AND ((((`player_id` > '451') OR (`player_id` = '451' AND `buddy_id` >= '9245')) AND ((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272')))) FOR UPDATE
131+# SELECT /*issue_560.buddy_list:1/1*/ 0 AS chunk_num, COUNT(*) AS cnt, COALESCE(LOWER(CONV(BIT_XOR(CAST(CRC32(CONCAT_WS('#', `player_id`, `buddy_id`)) AS UNSIGNED)), 10, 16)), 0) AS crc FROM `issue_560`.`buddy_list` FORCE INDEX (`PRIMARY`) WHERE ((((`player_id` > '500') OR (`player_id` = '500' AND `buddy_id` > '4272')) AND 1=1)) AND ((((`player_id` > '451') OR (`player_id` = '451' AND `buddy_id` >= '9245')) AND ((`player_id` < '500') OR (`player_id` = '500' AND `buddy_id` <= '4272')))) LOCK IN SHARE MODE
132 # 1 1 0 0 Nibble 00:00:00 00:00:00 2 issue_560.buddy_list

Subscribers

People subscribed via source and target branches