ptc 2.0 --resume with --tables does not always work
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Percona Toolkit moved to https://jira.percona.com/projects/PT |
Fix Released
|
High
|
Daniel Nichter |
Bug Description
Version: http://
Description:
Combining --resume with a limited set of --tables, pttc will not do anything when it should resume checksumming a partially checksummed table, if a table with an alphabetically-
How to repeat:
Start with an empty --replicate table.
First, checksum table "foo" (using option --tables foo), and allow checksum to complete. Then, checksum table "bar" (with option --tables bar), but stop it before completion. Then, try to "--resume --tables bar"; pttc 2.0 will not do anything. Debug output shows that it is trying to resume table "foo", which was completely checksummed, so it does nothing.
Clear the --replicate table and start again. This time, checksum "bar" to completion, then checksum "foo" and abort part way, then checksum "--resume --tables foo". This time it will resume properly.
I believe this bug is due to --resume assuming an alphabetical order to table checksumming, and not properly limiting itself to the supplied list in --tables.
Suggested fix:
--resume should only consider the specified list of --databases / --tables, and not anything else.
Related branches
- Daniel Nichter: Approve
-
Diff: 27153 lines (+12572/-10320) (has conflicts)177 files modifiedChangelog (+8/-2)
bin/pt-table-checksum (+5183/-5510)
bin/pt-table-sync (+120/-19)
lib/CleanupTask.pm (+69/-0)
lib/CompareResults.pm (+6/-4)
lib/CopyRowsInsertSelect.pm (+17/-18)
lib/Cxn.pm (+215/-0)
lib/DSNParser.pm (+7/-5)
lib/MasterSlave.pm (+85/-0)
lib/MySQLDump.pm (+0/-322)
lib/MySQLStatusWaiter.pm (+185/-0)
lib/NibbleIterator.pm (+545/-269)
lib/OobNibbleIterator.pm (+230/-0)
lib/OptionParser.pm (+1/-1)
lib/PerconaTest.pm (+66/-4)
lib/Progress.pm (+13/-2)
lib/Quoter.pm (+68/-0)
lib/ReplicaLagWaiter.pm (+173/-0)
lib/Retry.pm (+35/-41)
lib/RowChecksum.pm (+82/-71)
lib/Sandbox.pm (+2/-0)
lib/SchemaIterator.pm (+99/-26)
lib/TableChecksum.pm (+10/-12)
lib/TableChunker.pm (+5/-5)
lib/TableParser.pm (+75/-60)
lib/TableSyncer.pm (+17/-18)
lib/WeightedAvgRate.pm (+102/-0)
sandbox/load-sakila-db (+0/-3)
sandbox/start-sandbox (+3/-0)
sandbox/test-env (+10/-2)
t/lib/CleanupTask.t (+36/-0)
t/lib/CompareResults.t (+0/-3)
t/lib/Cxn.t (+259/-0)
t/lib/DSNParser.t (+1/-1)
t/lib/MasterSlave.t (+113/-4)
t/lib/MySQLDump.t (+0/-92)
t/lib/MySQLStatusWaiter.t (+221/-0)
t/lib/NibbleIterator.t (+512/-157)
t/lib/OobNibbleIterator.t (+264/-0)
t/lib/OptionParser.t (+2/-2)
t/lib/Progress.t (+49/-4)
t/lib/QueryReview.t (+3/-5)
t/lib/Quoter.t (+114/-1)
t/lib/ReplicaLagWaiter.t (+121/-0)
t/lib/Retry.t (+83/-118)
t/lib/RowChecksum.t (+64/-53)
t/lib/RowDiff-custom.t (+1/-3)
t/lib/RowDiff.t (+1/-3)
t/lib/SQLParser.t (+1/-1)
t/lib/Schema.t (+1/-1)
t/lib/SchemaIterator.t (+28/-11)
t/lib/TableChecksum.t (+1/-3)
t/lib/TableChunker.t (+26/-28)
t/lib/TableParser.t (+25/-156)
t/lib/TableSyncChunk.t (+5/-7)
t/lib/TableSyncNibble.t (+7/-9)
t/lib/TableSyncer.t (+32/-41)
t/lib/WeightedAvgRate.t (+85/-0)
t/lib/samples/MasterSlave/dsn_table.sql (+12/-0)
t/lib/samples/NibbleIterator/bad_tables.sql (+21/-0)
t/lib/samples/SchemaIterator/all-dbs-tbls.txt (+0/-2)
t/lib/samples/SchemaIterator/mysql-user-ddl-5.0.txt (+1/-0)
t/lib/samples/SchemaIterator/mysql-user-ddl.txt (+1/-0)
t/lib/samples/SchemaIterator/resume-from-ignored-sakila-payment.txt (+3/-0)
t/lib/samples/SchemaIterator/resume-from-sakila-payment.txt (+4/-0)
t/lib/samples/char-chunking/ascii.sql (+146/-0)
t/lib/samples/tables/sakila.actor (+8/-0)
t/pt-table-checksum/arg_table.t (+0/-106)
t/pt-table-checksum/basics.t (+280/-118)
t/pt-table-checksum/char_chunking.t (+38/-20)
t/pt-table-checksum/checksum.t (+0/-59)
t/pt-table-checksum/chunk_column.t (+0/-104)
t/pt-table-checksum/chunk_index.t (+52/-81)
t/pt-table-checksum/chunk_size.t (+78/-18)
t/pt-table-checksum/create_replicate_table.t (+84/-60)
t/pt-table-checksum/error_handling.t (+79/-6)
t/pt-table-checksum/filters.t (+102/-53)
t/pt-table-checksum/float_precision.t (+55/-15)
t/pt-table-checksum/fnv_64.t (+72/-20)
t/pt-table-checksum/force_index.t (+0/-67)
t/pt-table-checksum/ignore_columns.t (+40/-20)
t/pt-table-checksum/issue_1020.t (+0/-53)
t/pt-table-checksum/issue_1182.t (+0/-59)
t/pt-table-checksum/issue_122.t (+0/-70)
t/pt-table-checksum/issue_1319.t (+0/-52)
t/pt-table-checksum/issue_21.t (+0/-92)
t/pt-table-checksum/issue_35.t (+0/-62)
t/pt-table-checksum/issue_388.t (+11/-3)
t/pt-table-checksum/issue_47.t (+32/-12)
t/pt-table-checksum/issue_51.t (+0/-77)
t/pt-table-checksum/issue_602.t (+12/-6)
t/pt-table-checksum/issue_69.t (+0/-75)
t/pt-table-checksum/issue_947.t (+0/-49)
t/pt-table-checksum/issue_982.t (+0/-226)
t/pt-table-checksum/offset_modulo.t (+0/-52)
t/pt-table-checksum/option_sanity.t (+132/-7)
t/pt-table-checksum/oversize_chunks.t (+0/-63)
t/pt-table-checksum/probability.t (+0/-60)
t/pt-table-checksum/progress.t (+45/-43)
t/pt-table-checksum/replication_filters.t (+241/-42)
t/pt-table-checksum/resume.t (+662/-69)
t/pt-table-checksum/retry_timeouts.t (+0/-112)
t/pt-table-checksum/samples/3tbl-resume.sql (+27/-0)
t/pt-table-checksum/samples/arg-table.sql (+0/-7)
t/pt-table-checksum/samples/basic_replicate_output (+0/-2)
t/pt-table-checksum/samples/before.sql (+0/-80)
t/pt-table-checksum/samples/char-chunk-ascii-explain.txt (+23/-9)
t/pt-table-checksum/samples/char-chunk-ascii-oversize.txt (+0/-9)
t/pt-table-checksum/samples/char-chunk-ascii.txt (+2/-9)
t/pt-table-checksum/samples/char-chunking.sql (+0/-110)
t/pt-table-checksum/samples/checksum_results/3tbl-resume (+24/-0)
t/pt-table-checksum/samples/checksum_results/3tbl-resume-bar (+11/-0)
t/pt-table-checksum/samples/checksum_results/sakila-done-1k-chunks (+65/-0)
t/pt-table-checksum/samples/checksum_results/sakila-done-singles (+16/-0)
t/pt-table-checksum/samples/checksum_tbl.sql (+0/-14)
t/pt-table-checksum/samples/checksum_tbl_truncated.sql (+16/-14)
t/pt-table-checksum/samples/chunkidx001.txt (+19/-0)
t/pt-table-checksum/samples/chunkidx002.txt (+19/-0)
t/pt-table-checksum/samples/chunkidx003.txt (+19/-0)
t/pt-table-checksum/samples/chunkidx004.txt (+12/-0)
t/pt-table-checksum/samples/chunkidx005.txt (+12/-0)
t/pt-table-checksum/samples/default-results-5.1.txt (+38/-0)
t/pt-table-checksum/samples/float_precision.sql (+7/-0)
t/pt-table-checksum/samples/fnv64-sakila-city.txt (+24/-0)
t/pt-table-checksum/samples/issue_122.sql (+0/-15)
t/pt-table-checksum/samples/issue_21.sql (+5/-3)
t/pt-table-checksum/samples/issue_467.txt (+0/-5)
t/pt-table-checksum/samples/issue_922.sql (+0/-10)
t/pt-table-checksum/samples/no-recheck.txt (+10/-0)
t/pt-table-checksum/samples/oversize-chunks-allowed.txt (+0/-6)
t/pt-table-checksum/samples/oversize-chunks.sql (+24/-3)
t/pt-table-checksum/samples/oversize-chunks.txt (+18/-6)
t/pt-table-checksum/samples/replicate.sql (+0/-22)
t/pt-table-checksum/samples/resume-chunked-complete.txt (+0/-9)
t/pt-table-checksum/samples/resume-chunked-partial.txt (+0/-5)
t/pt-table-checksum/samples/resume-complete.txt (+0/-3)
t/pt-table-checksum/samples/resume-partial.txt (+0/-2)
t/pt-table-checksum/samples/resume.sql (+0/-5)
t/pt-table-checksum/samples/resume2-chunked-complete.txt (+0/-17)
t/pt-table-checksum/samples/resume2-chunked-partial.txt (+0/-6)
t/pt-table-checksum/samples/resume2.sql (+0/-7)
t/pt-table-checksum/samples/sample_1 (+0/-6)
t/pt-table-checksum/samples/sample_2 (+0/-5)
t/pt-table-checksum/samples/sample_schema_opt (+0/-35)
t/pt-table-checksum/samples/static-chunk-size-results-5.1.txt (+38/-0)
t/pt-table-checksum/samples/unchunkable-table-small.txt (+0/-2)
t/pt-table-checksum/samples/unchunkable-table.txt (+0/-1)
t/pt-table-checksum/samples/where01.out (+0/-3)
t/pt-table-checksum/samples/where01.sql (+0/-26)
t/pt-table-checksum/samples/where02.out (+0/-4)
t/pt-table-checksum/samples/where02.sql (+0/-26)
t/pt-table-checksum/schema.t (+0/-172)
t/pt-table-checksum/scripts/exec-wait-exec.sh (+10/-0)
t/pt-table-checksum/scripts/wait-for-chunk.sh (+8/-0)
t/pt-table-checksum/since.t (+0/-79)
t/pt-table-checksum/standard_options.t (+106/-13)
t/pt-table-checksum/throttle.t (+39/-226)
t/pt-table-checksum/unchunkable_tables.t (+0/-57)
t/pt-table-checksum/zero_chunk.t (+0/-56)
t/pt-table-sync/bidirectional.t (+17/-18)
t/pt-table-sync/diff_where.t (+63/-0)
t/pt-table-sync/filters.t (+6/-8)
t/pt-table-sync/issue_408.t (+5/-5)
t/pt-table-sync/issue_560.t (+6/-11)
t/pt-table-sync/issue_627.t (+1/-2)
t/pt-table-sync/issue_79.t (+2/-3)
t/pt-table-sync/issue_996.t (+5/-8)
t/pt-table-sync/samples/bidirectional/queries001.txt (+7/-0)
t/pt-table-sync/samples/diff001.sql (+12/-0)
t/pt-table-sync/samples/issue_560.sql (+0/-13)
t/pt-table-sync/samples/issue_560_output_2.txt (+12/-12)
t/pt-table-sync/samples/simple-tbl-ddl.sql (+10/-0)
t/pt-table-sync/samples/simple-tbls.sql (+62/-0)
t/pt-table-sync/sync_to_differnt_db.t (+5/-6)
t/pt-table-sync/triggers.t (+4/-4)
util/build-packages (+26/-11)
util/wait-to-exec (+40/-0)
Changed in percona-toolkit: | |
importance: | Undecided → High |
assignee: | nobody → Daniel Nichter (daniel-nichter) |
milestone: | none → 2.0-beta1 |
tags: | added: filters pt-table-checksum resume |
summary: |
- pttc 2.0 --resume with --tables does not always work + ptc 2.0 --resume with --tables does not always work |
Changed in percona-toolkit: | |
status: | New → In Progress |
milestone: | 2.0-beta1 → none |
Changed in percona-toolkit: | |
milestone: | none → 2.0-beta1 |
Changed in percona-toolkit: | |
status: | Fix Committed → Fix Released |
For the record, this required changing how sub last_chunk() works, the SQL it executes, and we added an index over (ts,db,tbl) to the checksums table. Previously, we selected the max ts from the table, then got the row associated with that ts, but we have to use <= instead of = because of a bug in MySQL. But given that we also had to order those results DESC, in this cases that put the wrong table at the top of the list. So we would get the correct max ts but then the wrong table. This is fixed and tested now:
ok 46 - Checksum results partial t1, full t2
ok 47 - Resume from t1 when t2 is done