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

Page split breaks a gap lock

    XMLWordPrintable

Details

    Description

      The INSERT statement in the following test wrongly succeeds when using the default innodb_page_size=16k:

      --source include/have_innodb.inc
      --source include/have_sequence.inc
      --source include/have_debug.inc
       
      SET @save_frequency=@@GLOBAL.innodb_purge_rseg_truncate_frequency;
      SET GLOBAL innodb_purge_rseg_truncate_frequency=1;
       
      CREATE TABLE t1(id INT PRIMARY key, val VARCHAR(16000)) ENGINE=InnoDB;
      INSERT INTO t1 (id,val) SELECT 2*seq,'x' FROM seq_0_to_1023;
       
      connect(con1,localhost,root,,);
      # Prevent purge.
      START TRANSACTION WITH CONSISTENT SNAPSHOT;
      connection default;
       
      DELETE FROM t1 WHERE id=1788;
       
      BEGIN;
      # This will return no result, but should acquire a gap lock.
      SELECT * FROM t1 WHERE id=1788 FOR UPDATE;
       
      connection con1;
      COMMIT;
      source include/wait_all_purged.inc;
      connection default;
       
      INSERT INTO t1 (id,val) VALUES (1787, REPEAT('x',2000));
       
      connection con1;
      SET innodb_lock_wait_timeout=0;
      --error ER_LOCK_WAIT_TIMEOUT
      INSERT INTO t1 (id,val) VALUES (1788, 'x');
      SELECT * FROM t1 WHERE id=1788 FOR UPDATE;
      disconnect con1;
       
      connection default;
      COMMIT;
      DROP TABLE t1;
      SET GLOBAL innodb_purge_rseg_truncate_frequency=@save_frequency;
      

      The above is a simplified version of a test in MySQL 8.0.29. With the fix adapted to MariaDB, the test passes.

      Attachments

        Issue Links

          Activity

            People

              marko Marko Mäkelä
              marko Marko Mäkelä
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

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