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

'show table status' does not immediately show tokudb tables

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 10.0.9
    • Fix Version/s: 10.0.10
    • Component/s: None
    • Labels:
      None
    • Environment:
      centos 6.2 debug build of mariadb 10.0.9

      Description

      mysql> install plugin tokudb soname 'ha_tokudb.so';
      Query OK, 0 rows affected (0.07 sec)
      
      mysql> create table t (id int primary key) engine=tokudb;
      Query OK, 0 rows affected (0.11 sec)
      
      mysql> show table status;
      Empty set (0.00 sec)
      
      and no data/test/t.frm file
      
      mysql> show create table t;
      +-------+---------------------------------------------------------------------------------------------------------+
      | Table | Create Table                                                                                            |
      +-------+---------------------------------------------------------------------------------------------------------+
      | t     | CREATE TABLE `t` (
        `id` int(11) NOT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=TokuDB DEFAULT CHARSET=latin1 |
      +-------+---------------------------------------------------------------------------------------------------------+
      1 row in set (0.00 sec)
      
      mysql> show table status;
      +------+--------+---------+------------+------+----------------+-------------+---------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
      | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length     | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation         | Checksum | Create_options | Comment |
      +------+--------+---------+------------+------+----------------+-------------+---------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
      | t    | TokuDB |      10 | Fixed      |    1 |              0 |           0 | 9223372036854775807 |            0 |     12288 |           NULL | 2014-03-24 16:36:21 | 2014-03-24 16:36:22 | NULL       | latin1_swedish_ci |     NULL
      

      now, data/test/t.frm exists.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

              Hide
              serg Sergei Golubchik added a comment -

              Here's the explanation (everything below applies only to engines that support discover):

              • In 10.0 .frm files are nothing more than the metadata cache, they do not define whether a table exists
              • .frm file isn't automatically created by the server — as the server cannot know whether an engine would want it or not
              • the first time the table is used — discovered — the engine can pass a write_frm=true flag to the server, if it wants table metadata to be cached in the .frm file
              • if no .frm file exists, the server relies on discover_table_names handlerton method to get the list of tables for SHOW TABLES, DROP DATABASE (MDEV-5839) and other statements
              • if the engine does not provide its own discover_table_names method, the server uses a default implementation that looks for files with declared extensions (bas_ext())
              • but tokudb doesn't store table files in the database directory, so the default discover_table_names doesn't work

              as a fix, I force .frm to disk from ha_tokudb::create().

              Show
              serg Sergei Golubchik added a comment - Here's the explanation (everything below applies only to engines that support discover): In 10.0 .frm files are nothing more than the metadata cache, they do not define whether a table exists .frm file isn't automatically created by the server — as the server cannot know whether an engine would want it or not the first time the table is used — discovered — the engine can pass a write_frm=true flag to the server, if it wants table metadata to be cached in the .frm file if no .frm file exists, the server relies on discover_table_names handlerton method to get the list of tables for SHOW TABLES , DROP DATABASE ( MDEV-5839 ) and other statements if the engine does not provide its own discover_table_names method, the server uses a default implementation that looks for files with declared extensions ( bas_ext() ) but tokudb doesn't store table files in the database directory, so the default discover_table_names doesn't work as a fix, I force .frm to disk from ha_tokudb::create() .

                People

                • Assignee:
                  serg Sergei Golubchik
                  Reporter:
                  prohaska7 Rich Prohaska
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  2 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved:

                    Time Tracking

                    Estimated:
                    Original Estimate - Not Specified
                    Not Specified
                    Remaining:
                    Remaining Estimate - 0 minutes
                    0m
                    Logged:
                    Time Spent - 50 minutes
                    50m