Bug #83537 | WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS timeout value handles some inputs badly | ||
---|---|---|---|
Submitted: | 25 Oct 2016 22:33 | Modified: | 31 Mar 2017 19:18 |
Reporter: | Dan Reif | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Replication | Severity: | S3 (Non-critical) |
Version: | 5.6, 5.6.34 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[25 Oct 2016 22:33]
Dan Reif
[31 Oct 2016 6:48]
MySQL Verification Team
Hello Dan Reif, Thank you for the report and feedback. Thanks, Umesh
[31 Oct 2016 6:49]
MySQL Verification Team
-- 5.6.32 -- Setup simple gtid enabled master-slave replication rm -rf master scripts/mysql_install_db --basedir=/export/umesh/server/binaries/GABuilds/mysql-5.6.34 --datadir=/export/umesh/server/binaries/GABuilds/mysql-5.6.34/master -v bin/mysqld --no-defaults --basedir=/export/umesh/server/binaries/GABuilds/mysql-5.6.34 --datadir=/export/umesh/server/binaries/GABuilds/mysql-5.6.34/master --core-file --socket=/tmp/mysql_master.sock --port=3306 --log-error=/export/umesh/server/binaries/GABuilds/mysql-5.6.34/master/log.err --gtid_mode=ON --log-bin --log-slave-updates --enforce-gtid-consistency --server-id=1 2>&1 & rm -rf slave scripts/mysql_install_db --basedir=/export/umesh/server/binaries/GABuilds/mysql-5.6.34 --datadir=/export/umesh/server/binaries/GABuilds/mysql-5.6.34/slave -v bin/mysqld --no-defaults --basedir=/export/umesh/server/binaries/GABuilds/mysql-5.6.34 --datadir=/export/umesh/server/binaries/GABuilds/mysql-5.6.34/slave --core-file --socket=/tmp/mysql_slave.sock --port=3307 --log-error=/export/umesh/server/binaries/GABuilds/mysql-5.6.34/slave/log.err --gtid_mode=ON --log-bin --log-slave-updates --enforce-gtid-consistency --server-id=2 2>&1 & -- Master mysql> show master status; +------------------+----------+--------------+------------------+-------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------------------------------+ | hod03-bin.000001 | 1918 | | | 462648d7-9f34-11e6-a100-0010e05f3e06:1-11 | +------------------+----------+--------------+------------------+-------------------------------------------+ 1 row in set (0.00 sec) -- Slave mysql> SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('462648d7-9f34-11e6-a100-0010e05f3e06:1-11',1.5); +------------------------------------------------------------------------------------+ | WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('462648d7-9f34-11e6-a100-0010e05f3e06:1-11',1.5) | +------------------------------------------------------------------------------------+ | 0 | +------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('462648d7-9f34-11e6-a100-0010e05f3e06:1-12',1.5); +------------------------------------------------------------------------------------+ | WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('462648d7-9f34-11e6-a100-0010e05f3e06:1-12',1.5) | +------------------------------------------------------------------------------------+ | -1 | +------------------------------------------------------------------------------------+ 1 row in set (2.00 sec) mysql> SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('462648d7-9f34-11e6-a100-0010e05f3e06:1-12',0.5); +------------------------------------------------------------------------------------+ | WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('462648d7-9f34-11e6-a100-0010e05f3e06:1-12',0.5) | +------------------------------------------------------------------------------------+ | -1 | +------------------------------------------------------------------------------------+ 1 row in set (1.00 sec) mysql> SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('462648d7-9f34-11e6-a100-0010e05f3e06:1-12',0.01); ^^ waits forever mysql> SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('462648d7-9f34-11e6-a100-0010e05f3e06:1-13',-1); ^^ waits forever
[2 Nov 2016 8:57]
Sven Sandberg
Posted by developer: Thank you for the bug report. Yes, it would be nice to handle negative and fractional numbers better. If you are only after a non-blocking way to check if a GTID or set of GTIDs has been executed, note that there is: SELECT GTID_SUBSET('gtid_set', @@GLOBAL.GTID_EXECUTED)
[31 Mar 2017 19:18]
Daniel So
Posted by developer: Added the following entry to the MySQL server 5.6.36, 5.7.18, 8.0.1 changelogs: "When a negative or fractional timeout parameter was supplied to WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(), the server behaved in unexpected ways. With this fix: + A fractional timeout value is read as-is, with no round-off. + A negative timeout value is rejected with an error if the server is on a strict SQL mode; if the server is not on a strict SQL mode, the value makes the function return NULL immediately without any waiting and then issue a warning."