Bug #108860 InnoDB clone I/O errors from worker threads report incorrect errno
| Submitted: | 24 Oct 2022 11:36 | Modified: | 25 Oct 2022 5:54 |
|---|---|---|---|
| Reporter: | Laurynas Biveinis (OCA) | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: InnoDB storage engine | Severity: | S3 (Non-critical) |
| Version: | 8.0.31 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | Clone | ||
[25 Oct 2022 5:54]
MySQL Verification Team
Hello Laurynas, Thank you for the report and feedback! regards, Umesh
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.037 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: Suppose an I/O error happens during InnoDB clone in one of the worker threads, for example ER_ERROR_ON_READ. This thread will call Clone_Task_Manager::set_error, which will save the error by setting the m_saved_error and m_err_file_name fields. At some point later the clone connection thread will call Clone_Task_Manager::handler_error_other_task, which, for I/O errors, will call my_error as follows: my_error(m_saved_error, MYF(0), m_err_file_name.c_str(), errno, my_strerror(errbuf, sizeof(errbuf), errno)); Here m_saved_error and m_err_file_name will be the ones set by the previous set_error call, but note that errno is also reported. This errno value, being thread-local, will have no relation to any errno of the worker thread at the time of error occurrence, and will be misleading as a part of this diagnostics. How to repeat: Code analysis. Suggested fix: Introduce m_errno field, set it in set_error, report it in handle_error_other_task.