Details

    • Type: Task
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Fix Version/s: 10.1
    • Component/s: None
    • Labels:
      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.

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            arjen Arjen Lentz added a comment -

            Sounds like a fine plan, Bar - do you have a full overview of the issues involved, so that individual storage engine people can at least fix that bit?
            Of course, if a single storage engine include with the appropriate defines/include were to be provided, that's even better - but we'd still need to get rid of the superfluous/bad stuff from the storage engines themselves, so it'll be good to see a list.
            thanks

            Show
            arjen Arjen Lentz added a comment - Sounds like a fine plan, Bar - do you have a full overview of the issues involved, so that individual storage engine people can at least fix that bit? Of course, if a single storage engine include with the appropriate defines/include were to be provided, that's even better - but we'd still need to get rid of the superfluous/bad stuff from the storage engines themselves, so it'll be good to see a list. thanks
            Hide
            bar Alexander Barkov added a comment -

            Arjien, thanks for your comments!
            At this point, this is a raw idea only. I have no details yet unfortunately.

            Show
            bar Alexander Barkov added a comment - Arjien, thanks for your comments! At this point, this is a raw idea only. I have no details yet unfortunately.

              People

              • Assignee:
                Unassigned
                Reporter:
                bar Alexander Barkov
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated: