Repository navigation
Conversation
- test_interrupt_resume_during_throttle_recovery pauses through the control server during the first batch, unpauses, pauses again during the first 25-row recovery batch and interrupts. The interrupted target holds 200 + 25 rows matching the dumped state, and resuming with the minimal Ghostferry copies the table identically. - TestCopyThrottleStandaloneCopyBypassesPause runs RunStandaloneDataCopy with a paused and disabled throttler and no Ferry.Run supporting services; it must finish with identical rows. Refs #471
This was referenced Oct 30, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #471
Stack: 3/3. Base: #473 (
throttle-recovery/02-gradual-recovery). Previous: #472 → #473. Merge order: #472 → #473 → #474 (this PR). This diff is relative to #473. It adds regression coverage only and does not change scheduling.Scope
test/lib/go/throttle_recovery_ghostferry/main.gois a test executable using thetf.Setup/tf.Runpattern. ItsBeforeInitializesets concurrency 1, base batch size 200,DataIterationThrottleRecovery.RecoveryInterval: "30s", and the control server on127.0.0.1:18000.test_interrupt_resume_during_throttle_recovery(test/integration/interrupt_resume_test.rb):BEFORE_ROW_COPYsendsPOST /api/pauseto the control server.AFTER_ROW_COPYstarts a thread that sends/api/unpauseone second later. The callback returns while the pause is still set.BEFORE_ROW_COPYpauses again, and the secondAFTER_ROW_COPYcallsterm_and_wait_for_exit.LastSuccessfulPaginationKeys, and the dumped state has no throttle or recovery keys.minimal_ghostferryyields an identical table.TestCopyThrottleStandaloneCopyBypassesPause(test/go/data_iterator_test.go) seeds non-empty source tables and empty target tables, with a throttler that is both paused and disabled. It runs the realFerry.RunStandaloneDataCopy, withoutFerry.Runor its supporting services, and requires it to finish with ordered rows identical to the source.Checks run (MySQL 8.0.32 from
docker-compose_8.0.yml)MYSQL_VERSION=8.0 bundle exec rake test TEST=test/integration/interrupt_resume_test.rb: 27/27 pass.GHOSTFERRY_BINLOG_COORDINATE_MODE=gtid: 27/27 pass on rerun. The first GTID run hung aftertest_interrupt_resume_during_throttle_recoveryhad passed, and the hanging test was not identified (see Gradual copy throttle recovery #471).MYSQL_VERSION=8.0 go test ./test/go -run '^TestCopyThrottleStandaloneCopyBypassesPause$' -count=1 -p=1: pass.MYSQL_VERSION=8.0 go test ./sharding/test -run 'TestJoinedTablesTestSuite|TestPrimaryKeyTableTestSuite' -count=1 -p=1: pass.