Skip to content

Fix race condition in binlog provider causing file-not-found errors#39

Draft
Copilot wants to merge 4 commits into
masterfrom
copilot/fix-mysql-base-test-failure
Draft

Fix race condition in binlog provider causing file-not-found errors#39
Copilot wants to merge 4 commits into
masterfrom
copilot/fix-mysql-base-test-failure

Conversation

Copy link
Copy Markdown

Copilot AI commented Feb 11, 2026

Race condition in provideLogs where binlog files were added to ObjectProvider before reading their timestamps. Consumer goroutine (sendEventsFromBinlogFiles) could retrieve, parse, and delete files before timestamp reads completed.

Changes:

  • Reordered operations in provideLogs to read GetBinlogStartTimestamp before p.AddObject
  • Prevents filesystem race where consumer deletes file while producer still needs it
// Before: timestamp read after provider add (race)
err = p.AddObject(logFile)
timestamp, err := GetBinlogStartTimestamp(binlogPath, gomysql.MySQLFlavor)

// After: timestamp read before provider add (safe)
timestamp, err := GetBinlogStartTimestamp(binlogPath, gomysql.MySQLFlavor)
err = p.AddObject(logFile)

Resolves open /tmp/mysql-bin.XXXXXX: no such file or directory errors in mysql_base_tests.

Original prompt

This section details on the original issue you should resolve

<issue_title>[FEATURE] address mysql base test failure</issue_title>
<issue_description>### What feature would you like?

we need to address the following failure

wal-g_mysql_base_tests  | INFO: 2026/02/11 13:08:43.585670 connection accepted from 127.0.0.1:60924
wal-g_mysql_base_tests  | INFO: 2026/02/11 13:08:43.586202 connection created
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.586391 Unhandled query: SET NAMES latin1
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.586593 Unhandled query: SELECT UNIX_TIMESTAMP()
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.628024 Unhandled query: SET @master_heartbeat_period= 5000000000
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.628258 Unhandled query: SET @master_binlog_checksum= @@global.binlog_checksum
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.751069 Unhandled query: SET @slave_uuid= 'c034da08-074a-11f1-87b4-6ebf9cd30c15'
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.752636 disable 100 continue false
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.754313 HTTP response code: 200
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.754340 request GET response: 99 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.754361 HTTP response code: 200
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.754382 request GET response: 99 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.756296 HTTP response code: 200
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.756319 request GET response: 5482 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.756332 HTTP response code: 200
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.756353 request GET response: 5482 request: 0
wal-g_mysql_base_tests  | INFO: 2026/02/11 13:08:43.759126 downloading mysql-bin.000001 into /tmp/mysql-bin.000001
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.760341 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.760395 request GET response: 425 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.760424 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.760444 request GET response: 425 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.761970 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.761992 request GET response: 427 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.762009 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.762032 request GET response: 427 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.763503 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.763528 request GET response: 429 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.763542 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.763559 request GET response: 429 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.764894 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.764920 request GET response: 425 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.764941 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.764958 request GET response: 425 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.766391 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.766417 request GET response: 421 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.766434 HTTP response code: 404
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.766455 request GET response: 421 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.768087 HTTP response code: 200
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.768115 request GET response: 458 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.768139 HTTP response code: 200
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.768160 request GET response: 458 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.768543 No crypter has been selected
wal-g_mysql_base_tests  | INFO: 2026/02/11 13:08:43.770911 Synced binlog file mysql-bin.000001
wal-g_mysql_base_tests  | INFO: 2026/02/11 13:08:43.770943 downloading mysql-bin.000002 into /tmp/mysql-bin.000002
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.772279 HTTP response code: 200
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.772308 request GET response: 472 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.772327 HTTP response code: 200
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.772344 request GET response: 472 request: 0
wal-g_mysql_base_tests  | DEBUG: 2026/02/11 13:08:43.772719 No crypter has been selected
wal-g_mysql_base_tests  | INFO: 2026/02/11 13:08:43.773194 Synced binlog file mysql-bin.000002
wal-g_mysql_base_tests  | INFO: 2026/02/11 13:08:43.773296 ...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes chipitsine/wal-g#38

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for you](https://github.com/chipitsine/wal-g/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.

chipitsine and others added 2 commits February 10, 2026 17:07
it seems govulncheck is broken after git release, let us comment it
until resolved
Copilot AI and others added 2 commits February 11, 2026 14:52
…to ObjectProvider

The issue was that provideLogs would add binlog files to the ObjectProvider
before reading their timestamps. This created a race condition where the
consumer goroutine (sendEventsFromBinlogFiles) could retrieve, parse, and
delete the file before provideLogs attempted to read its timestamp, causing
a "no such file or directory" error.

Fixed by moving the timestamp reading before adding the file to the provider.

Co-authored-by: chipitsine <2217296+chipitsine@users.noreply.github.com>
Co-authored-by: chipitsine <2217296+chipitsine@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix MySQL base test failure Fix race condition in binlog provider causing file-not-found errors Feb 11, 2026
Copilot AI requested a review from chipitsine February 11, 2026 14:58
@chipitsine chipitsine force-pushed the master branch 2 times, most recently from 3633c51 to 81395bd Compare May 7, 2026 21:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants