[MDEV-9974] STOP SLAVE behavior with no connection_name doesn't match documentation Created: 2016-04-22  Updated: 2016-04-28  Resolved: 2016-04-28

Status: Closed
Project: MariaDB Server
Component/s: Documentation
Affects Version/s: N/A
Fix Version/s: N/A

Type: Bug Priority: Major
Reporter: Geoff Montee (Inactive) Assignee: Ian Gilfillan
Resolution: Fixed Votes: 0
Labels: replication


 Description   

The documentation about STOP SLAVE says the following:

If there is only one master, or the default master (as specified by the default_master_connection system variable) is intended, connection_name can be omitted. If provided, the STOP SLAVE statement will apply to the specified master. connection_name is case-insensitive.

https://mariadb.com/kb/en/mariadb/stop-slave/

Let's say that I have the following slave configured:

MariaDB [(none)]> show all slaves status\G
*************************** 1. row ***************************
              Connection_name: 172-31-19-192
              Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.31.19.192
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000002
          Read_Master_Log_Pos: 3085
               Relay_Log_File: ip-172-31-22-174-relay-bin-172@002d31@002d19@002d192.000002
                Relay_Log_Pos: 2530
        Relay_Master_Log_File: mariadb-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 3085
              Relay_Log_Space: 2865
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: Slave_Pos
                  Gtid_IO_Pos: 1-1-10,2-2-6
      Replicate_Do_Domain_Ids:
  Replicate_Ignore_Domain_Ids:
                Parallel_Mode: conservative
         Retried_transactions: 0
           Max_relay_log_size: 1073741824
         Executed_log_entries: 52
    Slave_received_heartbeats: 0
       Slave_heartbeat_period: 1800.000
               Gtid_Slave_Pos: 1-1-10,2-2-6
1 row in set (0.00 sec)

According to the documentation, I should be able to stop this slave by simply executing STOP SLAVE with no connection_name since there is only one master configured. However, this does not work:

MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
MariaDB [(none)]> SHOW WARNINGS;
+-------+------+--------------------------------+
| Level | Code | Message                        |
+-------+------+--------------------------------+
| Note  | 1255 | Slave already has been stopped |
+-------+------+--------------------------------+
1 row in set (0.00 sec)
 
MariaDB [(none)]> show all slaves status\G
*************************** 1. row ***************************
              Connection_name: 172-31-19-192
              Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.31.19.192
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000002
          Read_Master_Log_Pos: 3085
               Relay_Log_File: ip-172-31-22-174-relay-bin-172@002d31@002d19@002d192.000002
                Relay_Log_Pos: 2530
        Relay_Master_Log_File: mariadb-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 3085
              Relay_Log_Space: 2865
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: Slave_Pos
                  Gtid_IO_Pos: 1-1-10,2-2-6
      Replicate_Do_Domain_Ids:
  Replicate_Ignore_Domain_Ids:
                Parallel_Mode: conservative
         Retried_transactions: 0
           Max_relay_log_size: 1073741824
         Executed_log_entries: 52
    Slave_received_heartbeats: 0
       Slave_heartbeat_period: 1800.000
               Gtid_Slave_Pos: 1-1-10,2-2-6
1 row in set (0.00 sec)

Is the documentation incorrect, or is there a problem with the implementation?



 Comments   
Comment by Elena Stepanova [ 2016-04-22 ]

The documentation is inaccurate. It apparently assumes that if there is only one master, it will always be the old-fashioned nameless master, which of course is not necessarily the case.
It is so not only for STOP SLAVE, but for any other slave-related command which can have an optional master connection name – START SLAVE, RESET SLAVE, etc.

Comment by Ian Gilfillan [ 2016-04-28 ]

I clarified by specifying that it only works if there's one NAMELESS master, and added this to START SLAVE, STOP SLAVE, RESET SLAVE, CHANGE MASTER TO and SHOW RELAYLOG. I tested quite a few combinations, but not everything, but I think it should be correct as it stands. Let me know if I've missed anything.

Generated at Thu Feb 08 07:38:43 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.