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

LOAD INDEX may cause rollback of prepared XA transaction

    XMLWordPrintable

    Details

      Description

      A statement such as LOAD INDEX INTO may cause a prepared XA to rollback.
      For instance, consider the following case:

      CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) Engine=Innodb;
      SHOW CREATE TABLE t1;
      Table	Create Table
      t1	CREATE TABLE `t1` (
        `f1` int(11) NOT NULL,
        PRIMARY KEY (`f1`)
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1
      XA START 'a';
      INSERT INTO t1 VALUES (1);
      XA END 'a';
      XA PREPARE 'a';
      LOAD INDEX INTO cache t1 KEY(PRIMARY);
      Table	Op	Msg_type	Msg_text
      test.t1	preload_keys	Error	XAER_RMFAIL: The command cannot be executed when global transaction is in the  PREPARED state
      test.t1	preload_keys	error	Corrupt
      XA COMMIT 'a';
      SELECT COUNT(*) FROM t1;
      COUNT(*)
      0
      

      After XA PREPARE the user attempts to LOAD INDEX, internally, it causes a trans_rollback_implicit(), which will roll back the underlying XA transaction. After XA COMMIT the transaction left no side effects.
      I would expect LOAD INDEX to not rollback the underlying XA transaction, and fail immediately with "XAER_RMFAIL: The command cannot be executed when global transaction is in PREPARED state".

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              serg Sergei Golubchik
              Reporter:
              sciascid Daniele Sciascia
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Dates

                Created:
                Updated:

                  Git Integration