Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-10242

Non-transactional mysql.gtid_slave_pos breaks --slave-parallel-mode=[optimistic|aggressive] replication

Details

    Description

      See mail thread at https://lists.launchpad.net/maria-developers/msg09722.html.

      Optimistic parallel replication does not work when mysql.gtid_slave_pos is
      non-transactional. So either it needs to fallback to non-parallel (like for
      other non-transactional updates/DDL), or an error should be given.

      An error seems better, as silently falling back to all transactions being
      run serially does not seem very useful.

      Attachments

        Issue Links

          Activity

            Optimistic parallel replication is the default, and the issue described here can lead to odd sporadic and/or delayed errors, for example MDEV-34346.

            It would be great if this is fixed, especially in MTR, which currently uses Aria by default, and this makes for confusing test outcomes at times.

            Roel Roel Van de Paar added a comment - Optimistic parallel replication is the default, and the issue described here can lead to odd sporadic and/or delayed errors, for example MDEV-34346 . It would be great if this is fixed, especially in MTR, which currently uses Aria by default, and this makes for confusing test outcomes at times.

            Is there perhaps a simple way to ensure that mysql.gtid_slave_pos is always InnoDB?

            Roel Roel Van de Paar added a comment - Is there perhaps a simple way to ensure that mysql.gtid_slave_pos is always InnoDB?

            A simple way to ensure mysql.gtid_slave_pos is always innodb is to run on the master:

            ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB
            

            This is documented, and default for new installations that do not have InnoDB disabled..

            I think it would be good for mysql-test-run to do this by default, though it can only happen in tests that have innodb enabled. So it's a bit tricky. Maybe include/rpl_topology.inc (and include/master_slave.inc) could do it if innodb is enabled, and then include/have_innodb.inc could give an error if it is included after rpl_topology?

            knielsen Kristian Nielsen added a comment - A simple way to ensure mysql.gtid_slave_pos is always innodb is to run on the master: ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB This is documented, and default for new installations that do not have InnoDB disabled.. I think it would be good for mysql-test-run to do this by default, though it can only happen in tests that have innodb enabled. So it's a bit tricky. Maybe include/rpl_topology.inc (and include/master_slave.inc) could do it if innodb is enabled, and then include/have_innodb.inc could give an error if it is included after rpl_topology?

            People

              knielsen Kristian Nielsen
              knielsen Kristian Nielsen
              Votes:
              2 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.