<NME> mariadb_gtid.py
<BEF> # Copyright 2016 Tesora, Inc.
# All Rights Reserved.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.
#

from oslo_log import log as logging

from trove.common import cfg
from trove.guestagent.strategies.replication import mysql_base

CONF = cfg.CONF
LOG = logging.getLogger(__name__)


class MariaDBGTIDReplication(mysql_base.MysqlReplicationBase):
    """MariaDB Replication coordinated by GTIDs."""

    def get_replica_context(self, service, adm):
        """Get replication information as master."""
        master_info = super(MariaDBGTIDReplication, self).get_replica_context(
            service, adm)

        replica_conf = master_info['replica_conf']
        get_pos_cmd = 'SELECT @@global.gtid_binlog_pos;'
        gtid_pos = service.execute_sql(get_pos_cmd).first()[0]
        LOG.debug('gtid_binlog_pos: %s', gtid_pos)
        replica_conf['log_position']['gtid_pos'] = gtid_pos

        return master_info

        logging_config = master_info['log_position']
        last_gtid = ''

        if 'gtid_pos' in logging_config:
            # This will happen during master failover.
            last_gtid = logging_config['gtid_pos']
        elif 'dataset' in master_info:
            # This will happen when initial replication is set up.
            last_gtid = self.read_last_master_gtid(service)

        set_gtid_cmd = "SET GLOBAL gtid_slave_pos='%s';" % last_gtid
        service.execute_sql(set_gtid_cmd)

        change_master_cmd = (
            "CHANGE MASTER TO "
            "CHANGE MASTER TO "
            "MASTER_HOST='%(host)s', "
            "MASTER_PORT=%(port)s, "
            "MASTER_USER='%(user)s', "
            "MASTER_PASSWORD='%(password)s', "
            "MASTER_CONNECT_RETRY=15, "
            "MASTER_USE_GTID=slave_pos" %
            {
                'host': master_info['master']['host'],
                'port': master_info['master']['port'],
                'user': replica_conf['replication_user']['name'],
                'password': replica_conf['replication_user']['password']
            })
        service.execute_sql(change_master_cmd)

        service.start_slave()

<MSG> Merge "Use current slave_pos of slave to continue replicate"
<DFF> @@ -42,15 +42,11 @@ class MariaDBGTIDReplication(mysql_base.MysqlReplicationBase):
         logging_config = master_info['log_position']
         last_gtid = ''
 
-        if 'gtid_pos' in logging_config:
-            # This will happen during master failover.
-            last_gtid = logging_config['gtid_pos']
-        elif 'dataset' in master_info:
+        if 'dataset' in master_info:
             # This will happen when initial replication is set up.
             last_gtid = self.read_last_master_gtid(service)
-
-        set_gtid_cmd = "SET GLOBAL gtid_slave_pos='%s';" % last_gtid
-        service.execute_sql(set_gtid_cmd)
+            set_gtid_cmd = "SET GLOBAL gtid_slave_pos='%s';" % last_gtid
+            service.execute_sql(set_gtid_cmd)
 
         change_master_cmd = (
             "CHANGE MASTER TO "

{'commit': 'diff --git a/trove/guestagent/strategies/replication/mariadb_gtid.py b/trove/guestagent/strategies/replication/mariadb_gtid.py\nindex b95853bb..4909ee66 100644\n--- a/trove/guestagent/strategies/replication/mariadb_gtid.py\n+++ b/trove/guestagent/strategies/replication/mariadb_gtid.py\n@@ -42,15 +42,11 @@ class MariaDBGTIDReplication(mysql_base.MysqlReplicationBase):\n         logging_config = master_info[\'log_position\']\n         last_gtid = \'\'\n \n-        if \'gtid_pos\' in logging_config:\n-            # This will happen during master failover.\n-            last_gtid = logging_config[\'gtid_pos\']\n-        elif \'dataset\' in master_info:\n+        if \'dataset\' in master_info:\n             # This will happen when initial replication is set up.\n             last_gtid = self.read_last_master_gtid(service)\n-\n-        set_gtid_cmd = "SET GLOBAL gtid_slave_pos=\'%s\';" % last_gtid\n-        service.execute_sql(set_gtid_cmd)\n+            set_gtid_cmd = "SET GLOBAL gtid_slave_pos=\'%s\';" % last_gtid\n+            service.execute_sql(set_gtid_cmd)\n \n         change_master_cmd = (\n             "CHANGE MASTER TO "\n', 'commit_subject': 'Merge "Use current slave_pos of slave to continue replicate"', 'repo_name': 'openstack/trove', 'committer': {'name': 'Gerrit Code Review', 'email': '61e62b213a1a56f7695845df4fc372a10cb0a73e@openstack.org', 'time_sec': '1606562807', 'tz_offset': '0', 'date': {'seconds': '1606562807'}}, 'commit_tree': '3be245aaf4dff4c326ce37b47b8287f88cabc411', 'commit_message': 'Merge "Use current slave_pos of slave to continue replicate"', 'language_name': 'Shell', 'license': 'apache-2.0', 'hunks': '@@ -42,15 +42,11 @@ class MariaDBGTIDReplication(mysql_base.MysqlReplicationBase):\n         logging_config = master_info[\'log_position\']\n         last_gtid = \'\'\n \n-        if \'gtid_pos\' in logging_config:\n-            # This will happen during master failover.\n-            last_gtid = logging_config[\'gtid_pos\']\n-        elif \'dataset\' in master_info:\n+        if \'dataset\' in master_info:\n             # This will happen when initial replication is set up.\n             last_gtid = self.read_last_master_gtid(service)\n-\n-        set_gtid_cmd = "SET GLOBAL gtid_slave_pos=\'%s\';" % last_gtid\n-        service.execute_sql(set_gtid_cmd)\n+            set_gtid_cmd = "SET GLOBAL gtid_slave_pos=\'%s\';" % last_gtid\n+            service.execute_sql(set_gtid_cmd)\n \n         change_master_cmd = (\n             "CHANGE MASTER TO "\n', 'addition_count': 3, 'deletion_count': 7, 'src_file': 'a/trove/guestagent/strategies/replication/mariadb_gtid.py', 'tgt_file': 'b/trove/guestagent/strategies/replication/mariadb_gtid.py', 'file_extension': '.py', 'before_file': '# Copyright 2016 Tesora, Inc.\n# All Rights Reserved.\n#\n#    Licensed under the Apache License, Version 2.0 (the "License"); you may\n#    not use this file except in compliance with the License. You may obtain\n#    a copy of the License at\n#\n#         http://www.apache.org/licenses/LICENSE-2.0\n#\n#    Unless required by applicable law or agreed to in writing, software\n#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT\n#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n#    License for the specific language governing permissions and limitations\n#    under the License.\n#\n\nfrom oslo_log import log as logging\n\nfrom trove.common import cfg\nfrom trove.guestagent.strategies.replication import mysql_base\n\nCONF = cfg.CONF\nLOG = logging.getLogger(__name__)\n\n\nclass MariaDBGTIDReplication(mysql_base.MysqlReplicationBase):\n    """MariaDB Replication coordinated by GTIDs."""\n\n    def get_replica_context(self, service, adm):\n        """Get replication information as master."""\n        master_info = super(MariaDBGTIDReplication, self).get_replica_context(\n            service, adm)\n\n        replica_conf = master_info[\'replica_conf\']\n        get_pos_cmd = \'SELECT @@global.gtid_binlog_pos;\'\n        gtid_pos = service.execute_sql(get_pos_cmd).first()[0]\n        LOG.debug(\'gtid_binlog_pos: %s\', gtid_pos)\n        replica_conf[\'log_position\'][\'gtid_pos\'] = gtid_pos\n\n        return master_info\n\n        logging_config = master_info[\'log_position\']\n        last_gtid = \'\'\n\n        if \'gtid_pos\' in logging_config:\n            # This will happen during master failover.\n            last_gtid = logging_config[\'gtid_pos\']\n        elif \'dataset\' in master_info:\n            # This will happen when initial replication is set up.\n            last_gtid = self.read_last_master_gtid(service)\n\n        set_gtid_cmd = "SET GLOBAL gtid_slave_pos=\'%s\';" % last_gtid\n        service.execute_sql(set_gtid_cmd)\n\n        change_master_cmd = (\n            "CHANGE MASTER TO "\n            "CHANGE MASTER TO "\n            "MASTER_HOST=\'%(host)s\', "\n            "MASTER_PORT=%(port)s, "\n            "MASTER_USER=\'%(user)s\', "\n            "MASTER_PASSWORD=\'%(password)s\', "\n            "MASTER_CONNECT_RETRY=15, "\n            "MASTER_USE_GTID=slave_pos" %\n            {\n                \'host\': master_info[\'master\'][\'host\'],\n                \'port\': master_info[\'master\'][\'port\'],\n                \'user\': replica_conf[\'replication_user\'][\'name\'],\n                \'password\': replica_conf[\'replication_user\'][\'password\']\n            })\n        service.execute_sql(change_master_cmd)\n\n        service.start_slave()\n', 'message': 'Merge "Use current slave_pos of slave to continue replicate"', 'author_name': 'Gerrit Code Review', 'lang': 'py'}