Bug #26622 | MASTER_POS_WAIT does not work as documented | ||
---|---|---|---|
Submitted: | 25 Feb 2007 20:05 | Modified: | 26 Mar 2008 20:16 |
Reporter: | Baron Schwartz (Basic Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Replication | Severity: | S3 (Non-critical) |
Version: | 5.0.24a-Debian_9-log, 4.1 BK, 5.1 BK, 5.2-falcon | OS: | Linux (Linux, Ubuntu) |
Assigned to: | Andrei Elkin | CPU Architecture: | Any |
Tags: | qc |
[25 Feb 2007 20:05]
Baron Schwartz
[26 Feb 2007 10:33]
Sveta Smirnova
test case
Attachment: rpl_bug26622.test (application/octet-stream, text), 171 bytes.
[26 Feb 2007 10:34]
Sveta Smirnova
Thank you for the report. Verified as described. All versions are affected.
[4 Sep 2007 16:15]
Andrei Elkin
As the help claims that "the function returns NULL if the slave SQL thread is not started" the result must be NULL not -1.
[4 Sep 2007 16:51]
Guilhem Bichot
For the bug fixer: this patch should fix the problem: ===== sql/rpl_rli.cc 1.12 vs edited ===== *** /tmp/bk_rpl_rli.cc-1.12_F40QVS 2007-06-09 08:29:43 +02:00 --- edited/sql/rpl_rli.cc 2007-09-04 18:50:01 +02:00 *************** *** 611,617 **** DBUG_ENTER("st_relay_log_info::wait_for_pos"); if (!inited) ! DBUG_RETURN(-1); DBUG_PRINT("enter",("log_name: '%s' log_pos: %lu timeout: %lu", log_name->c_ptr(), (ulong) log_pos, (ulong) timeout)); --- 611,617 ---- DBUG_ENTER("st_relay_log_info::wait_for_pos"); if (!inited) ! DBUG_RETURN(-2); DBUG_PRINT("enter",("log_name: '%s' log_pos: %lu timeout: %lu", log_name->c_ptr(), (ulong) log_pos, (ulong) timeout)); and something similar for 5.0.
[13 Dec 2007 16:08]
Daniel Saavedra
Any hint on when this bug will be fixed in 5.0 branch? We were planning to use 5.0.45 for a production environment with our own way to manage replication and we depend on MASTER_POS_WAIT to work as documented, otherwise we will have to work out a dirty workaround for this.
[14 Dec 2007 14:15]
Daniel Saavedra
We have implemented a workaround for this that stays in a while loop if master_pos_wait returns -1 but exits after n retries. Still after master_pos_wait returns -1 incorrectly and we decide to break the loop and go on using that DB, all subsequent writes are rejected. We are using apache commons pool with JDBC driver and we get this error: Can't execute the query because you have a conflicting read lock Could this be a side effect of the master_pos_wait erroneous return value? I know our setup is specific (master-master replication and using two connection pools to access the DBs), but don't know how to reproduce it using your test case.... We have even tried to execute an unlock tables after aborting the while loop but with no effect. Is something we might be doing wrong? The user has enough permission. Doing unlock tables with root user through mysql has no effect.
[6 Mar 2008 12:50]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/43517 ChangeSet@1.2595, 2008-03-06 14:49:21+02:00, aelkin@mysql1000.(none) +3 -0 Bug#26622 MASTER_POS_WAIT does not work as documented MASTER_POS_WAIT return values are different than expected when the server is not a slave. It returns -1 instead of NULL. Fixed with correcting st_relay_log_info::wait_for_pos() to return the proper value in the case of rli info is not inited.
[7 Mar 2008 19:16]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/43617 ChangeSet@1.2596, 2008-03-07 21:14:28+02:00, aelkin@mysql1000.(none) +6 -0 Bug #26622 MASTER_POS_WAIT does not work as documented Affected tests fixing. After the fix for st_relay_log_info::wait_for_pos() that handles widely used select('master-bin.xxxx',pos) invoked by mysqltest there appeared to be four tests that either tried synchronizing when the slave was stopped or used incorrect synchronization method like to call `sync_with_master' from the current connection being to the master itself. Fixed with correcting the current connection or/and using the correct synchronization macro when possible.
[25 Mar 2008 11:21]
Bugs System
Pushed into 5.0.60
[25 Mar 2008 11:22]
Bugs System
Pushed into 5.1.24-rc
[26 Mar 2008 19:00]
Bugs System
Pushed into 6.0.5-alpha
[26 Mar 2008 20:16]
Jon Stephens
Documented in the 5.0.60, 5.1.24, and 6.0.5 changelogs as follows: MASTER_POS_WAIT() did not return NULL when the server was not a slave.
[30 Mar 2008 0:36]
Jon Stephens
Also noted in the 5.1.23-ndb-6.3.11 changelog.
[30 Mar 2008 0:36]
Jon Stephens
Also documented in the 5.1.23-ndb-6.3.11 changelog.