Bug #74495 No GTID- and MTS-specific values for Until_condition in SHOW SLAVE STATUS docs
Submitted: 22 Oct 2014 8:01 Modified: 4 Nov 2014 9:36
Reporter: Alexey Kopytov Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Documentation Severity:S3 (Non-critical)
Version:5.6 OS:Any
Assigned to: David Moss CPU Architecture:Any

[22 Oct 2014 8:01] Alexey Kopytov
Description:
The description of SHOW SLAVE STATUS in the manual lists the following possible values for Until_condition:

"
 Until_Condition, Until_Log_File, Until_Log_Pos

The values specified in the UNTIL clause of the START SLAVE statement.

Until_Condition has these values:

    None if no UNTIL clause was specified

    Master if the slave is reading until a given position in the master's binary log

    Relay if the slave is reading until a given position in its relay log 
"

However, code inspection shows there are other values that may appear in Until_condition, namely:

SQL_BEFORE_GTIDS
SQL_AFTER_GTIDS
SQL_AFTER_MTS_GAPS
DONE (this is one is only in debug builds)

How to repeat:
Check the following code in show_slave_status():

    switch (mi->rli->until_condition)
    {
    case Relay_log_info::UNTIL_NONE:
      until_type= "None";
      break;
    case Relay_log_info::UNTIL_MASTER_POS:
      until_type= "Master";
      break;
    case Relay_log_info::UNTIL_RELAY_POS:
      until_type= "Relay";
      break;
    case Relay_log_info::UNTIL_SQL_BEFORE_GTIDS:
      until_type= "SQL_BEFORE_GTIDS";
      break;
    case Relay_log_info::UNTIL_SQL_AFTER_GTIDS:
      until_type= "SQL_AFTER_GTIDS";
      break;
    case Relay_log_info::UNTIL_SQL_AFTER_MTS_GAPS:
      until_type= "SQL_AFTER_MTS_GAPS";
#ifndef DBUG_OFF
    case Relay_log_info::UNTIL_DONE:
      until_type= "DONE";
      break;
#endif
    default:
      DBUG_ASSERT(0);
    }
    protocol->store(until_type, &my_charset_bin);

Suggested fix:
Document SQL_BEFORE_GTIDS, SQL_AFTER_GTIDS, SQL_AFTER_MTS_GAPS and possibly DONE in the manual.
[22 Oct 2014 8:02] Alexey Kopytov
Link to the 5.6 manual page: http://dev.mysql.com/doc/refman/5.6/en/show-slave-status.html
[22 Oct 2014 13:40] MySQL Verification Team
Hello Alexey,

Thank you for the report.

// bzr source

/home/ushastry/bzr/mysql/server/mysql-5.6/sql/rpl_slave.cc:

 2935      const char *until_type= "";
 2936  
 2937:     switch (mi->rli->until_condition)
 2938      {
 2939      case Relay_log_info::UNTIL_NONE: 
	       until_type= "None";
	       break;
	     case Relay_log_info::UNTIL_MASTER_POS:
	       until_type= "Master";
	       break;
	     case Relay_log_info::UNTIL_RELAY_POS:
	       until_type= "Relay";
	       break;
	     case Relay_log_info::UNTIL_SQL_BEFORE_GTIDS:
	       until_type= "SQL_BEFORE_GTIDS";
	       break;
	     case Relay_log_info::UNTIL_SQL_AFTER_GTIDS:
	       until_type= "SQL_AFTER_GTIDS";
	       break;
	     case Relay_log_info::UNTIL_SQL_AFTER_MTS_GAPS:
	       until_type= "SQL_AFTER_MTS_GAPS";
	 #ifndef DBUG_OFF
	     case Relay_log_info::UNTIL_DONE:
	       until_type= "DONE";
	       break;
	 #endif
	     default:
	       DBUG_ASSERT(0);
	    }

Thanks,
Umesh
[3 Nov 2014 14:39] Erlend Dahl
This should be fixed now.
[3 Nov 2014 18:17] Alexey Kopytov
Hm, I don't see any changes in Until_condition description, neither in http://dev.mysql.com/doc/refman/5.6/en/show-slave-status.html nor in http://dev.mysql.com/doc/refman/5.7/en/show-slave-status.html

This is what I see now (I also tried resetting the browser cache):

"
 Until_Condition has these values:

    None if no UNTIL clause was specified

    Master if the slave is reading until a given position in the master's binary log

    Relay if the slave is reading until a given position in its relay log 

"

Is this because the relevant changes have not made it to the online manual yet?
[4 Nov 2014 8:15] David Moss
The updates to the online manuals are pending and you should see the changes soon. I will update the bug again once they are visible. Thanks in advance for your patience.
[4 Nov 2014 9:36] David Moss
Thanks for your feedback. The 5.6 and 5.7 documentation have been updated with the following:
Starting with MySQL 5.6.6 UNTIL clauses related to GTIDs were added that have these values:

SQL_BEFORE_GTIDS if the slave SQL thread is processing transactions until it has reached the first transaction whose GTID is listed in the gtid_set.

SQL_AFTER_GTIDS if the slave threads are processing all transactions until the last transaction in the gtid_set has been processed by both threads.

SQL_AFTER_MTS_GAPS if a multi-threaded slave's SQL threads are running until no more gaps are found in the relay log.