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

Can't read from I_S.INNODB_SYS_INDEXES when having a discarded tablesace

Details

    Description

      When having a discarded tablespace it is not possible to read from INNODB_SYS_INDEXES, the below will fail with ERROR 1105 (HY000): Unknown error, and no further details in SHOW WARNINGS output or the error log.

      CREATE TABLE test.t1(id INT PRIMARY KEY);
      ALTER TABLE test.t1 DISCARD TABLESPACE;
      SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES;
      

      Attachments

        Issue Links

          Activity

            Patch is in bb-10.4-thiru

            thiru Thirunarayanan Balathandayuthapani added a comment - Patch is in bb-10.4-thiru

            OK to push. Please make the test demonstrate that INFORMATION_SCHEMA.INNODB_SYS_TABLES.SPACE will not be invalidated during ALTER TABLE…DISCARD TABLESPACE.

            marko Marko Mäkelä added a comment - OK to push. Please make the test demonstrate that INFORMATION_SCHEMA.INNODB_SYS_TABLES.SPACE will not be invalidated during ALTER TABLE…DISCARD TABLESPACE .

            SELECT * FROM information_schema.innodb_sys_tablespaces where name="test/t1";
            SPACE	NAME	FLAG	ROW_FORMAT	PAGE_SIZE	ZIP_PAGE_SIZE	SPACE_TYPE	FS_BLOCK_SIZE	FILE_SIZE	ALLOCATED_SIZE
            5	test/t1	33	Dynamic	16384	16384	Single	4096	65536	65536
             
            ALTER TABLE test.t1 DISCARD TABLESPACE;
             
            SELECT * FROM information_schema.innodb_sys_tablespaces where file_size = 0;
            SPACE	NAME	FLAG	ROW_FORMAT	PAGE_SIZE	ZIP_PAGE_SIZE	SPACE_TYPE	FS_BLOCK_SIZE	FILE_SIZE	ALLOCATED_SIZE
            5	test/t1	33	Dynamic	16384	16384	Single	0	0	0
            

            By using file_size, I think we can find out whether the table is in discarded state. But the above query works only till 10.5. In 10.6, i_s view was changed
            to reflect the main memory structure. Prior to that, InnoDB was traversing the innodb dictionary table to create view.

            thiru Thirunarayanan Balathandayuthapani added a comment - SELECT * FROM information_schema.innodb_sys_tablespaces where name="test/t1"; SPACE NAME FLAG ROW_FORMAT PAGE_SIZE ZIP_PAGE_SIZE SPACE_TYPE FS_BLOCK_SIZE FILE_SIZE ALLOCATED_SIZE 5 test/t1 33 Dynamic 16384 16384 Single 4096 65536 65536   ALTER TABLE test.t1 DISCARD TABLESPACE;   SELECT * FROM information_schema.innodb_sys_tablespaces where file_size = 0; SPACE NAME FLAG ROW_FORMAT PAGE_SIZE ZIP_PAGE_SIZE SPACE_TYPE FS_BLOCK_SIZE FILE_SIZE ALLOCATED_SIZE 5 test/t1 33 Dynamic 16384 16384 Single 0 0 0 By using file_size, I think we can find out whether the table is in discarded state. But the above query works only till 10.5. In 10.6, i_s view was changed to reflect the main memory structure. Prior to that, InnoDB was traversing the innodb dictionary table to create view.

            People

              thiru Thirunarayanan Balathandayuthapani
              hholzgra Hartmut Holzgraefe
              Votes:
              0 Vote for this issue
              Watchers:
              4 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.