Bug #74011 | Race condition between ::performReceive and ::update_connections() | ||
---|---|---|---|
Submitted: | 22 Sep 2014 12:27 | Modified: | 17 Oct 2014 12:58 |
Reporter: | Ole John Aske | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Cluster: Cluster (NDB) storage engine | Severity: | S1 (Critical) |
Version: | 7.3.6 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[22 Sep 2014 12:27]
Ole John Aske
[1 Oct 2014 13:07]
Ole John Aske
Posted by developer: Added Mikael R. as second reviewer as he reviewed pr maillist and replied: ---------------------- Hi, Reviewed and looks ok for me. Rgrds Mikael
[16 Oct 2014 11:10]
Ole John Aske
Posted by developer: Note to Doc-team: Even if (parts of) this fix is pushed 7.1->, the real fix is only present from 7.3-> as that is where the regression also was introduced.
[17 Oct 2014 12:58]
Jon Stephens
Thank you for your bug report. This issue has been committed to our source repository of that product and will be incorporated into the next release. Documented fix as follows in the NDB 7.3.8 changelog: A basic requirement of the NDB storage engine's design is that the transporter registry not attempt to receive data (TransporterRegistry::performReceive()) from and update the connection status (TransporterRegistry::update_connections()) of the same set of transporters concurrently, due to the fact that the updates perform final cleanup and reinitialization of buffers used when receiving data. Changing the contents of these buffers while reading or writing to them could lead to "garbage" or inconsistent signals being read or written. During the course of work done previously to improve the implementation of the transporter facade, a mutex intended to protect against the concurrent use of the performReceive() and update_connections()) methods on the same transporter was inadvertently removed. This fix adds a watchdog check for concurrent usage. In addition, update_connections() and performReceive() calls are now serialized together while polling the transporters. Closed. If necessary, you can access the source repository and build the latest available version, including the bug fix. More information about accessing the source trees is available at http://dev.mysql.com/doc/en/installing-source.html