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

Storage engine API improvements

    XMLWordPrintable

Details

    • Task
    • Status: Open (View Workflow)
    • Minor
    • Resolution: Unresolved
    • None
    • None
    • None

    Description

      Storage engine producers tend to do very similar mistakes, like:

      • including undesired server *.h files
      • doing #define MYSQL_SERVER
      • accessing members and methods of THD directly,
        without using engine plugin services.

      This typically makes such storage engine crash in case of
      embedded server, because THD definition varies between
      client-server and embedded versions.

      It would be nice to do take some steps to avoid this and help
      engine producers to write the code correctly.

      1. Create a file "se_api.h" which will include all *.h files that
      we allow to use in engines (e.g. handler.h, sql_class.h, etc).

      2. Remove the confusing "#define MYSQL_SERVER" from as
      many existing engines as possible:

      blackhole/ha_blackhole.cc:#define MYSQL_SERVER 1
      maria/ha_maria.cc:#define MYSQL_SERVER 1
      tokudb/ha_tokudb.cc:#define MYSQL_SERVER 1
      tokudb/hatoku_hton.cc:#define MYSQL_SERVER 1
      oqgraph/ha_oqgraph.cc:#define MYSQL_SERVER	// to have THD
      federatedx/ha_federatedx.cc:#define MYSQL_SERVER 1
      federatedx/federatedx_io_mysql.cc:#define MYSQL_SERVER 1
      federatedx/federatedx_io_null.cc:/*#define MYSQL_SERVER 1*/
      federatedx/federatedx_io.cc:/*#define MYSQL_SERVER 1*/
      federatedx/federatedx_txn.cc:#define MYSQL_SERVER 1
      connect/tabmysql.cpp:#define MYSQL_SERVER 1
      connect/ha_connect.cc:#define MYSQL_SERVER 1
      connect/user_connect.cc:#define MYSQL_SERVER
      spider/spd_db_conn.cc:#define MYSQL_SERVER 1
      spider/spd_table.cc:#define MYSQL_SERVER 1
      spider/spd_db_mysql.cc:#define MYSQL_SERVER 1
      spider/spd_malloc.cc:#define MYSQL_SERVER 1
      spider/ha_spider.cc:#define MYSQL_SERVER 1
      spider/spd_db_handlersocket.cc:#define MYSQL_SERVER 1
      spider/spd_conn.cc:#define MYSQL_SERVER 1
      spider/spd_i_s.cc:#define MYSQL_SERVER 1
      spider/spd_db_oracle.cc:#define MYSQL_SERVER 1
      spider/spd_ping_table.cc:#define MYSQL_SERVER 1
      spider/spd_trx.cc:#define MYSQL_SERVER 1
      spider/spd_param.cc:#define MYSQL_SERVER 1
      spider/spd_sys_table.cc:#define MYSQL_SERVER 1
      spider/spd_direct_sql.cc:#define MYSQL_SERVER 1
      spider/spd_udf.cc:#define MYSQL_SERVER 1
      spider/spd_copy_tables.cc:#define MYSQL_SERVER 1
      myisammrg/ha_myisammrg.cc:#define MYSQL_SERVER 1
      myisam/ha_myisam.cc:#define MYSQL_SERVER 1
      federated/ha_federated.cc:#define MYSQL_SERVER 1
      xtradb/handler/ha_innodb.cc:#define MYSQL_SERVER 1
      xtradb/handler/i_s.cc:#define MYSQL_SERVER /* For Item_* classes */
      heap/ha_heap.cc:#define MYSQL_SERVER 1

      3. Prevent direct inclusion of the server *.h files without using se_api.h.

      Attachments

        Activity

          People

            Unassigned Unassigned
            bar Alexander Barkov
            Votes:
            0 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.