[MDEV-5305] Storage engine API improvements Created: 2013-11-18  Updated: 2015-10-30

Status: Open
Project: MariaDB Server
Component/s: None
Fix Version/s: None

Type: Task Priority: Minor
Reporter: Alexander Barkov Assignee: Unassigned
Resolution: Unresolved Votes: 0
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.



 Comments   
Comment by Arjen Lentz [ 2014-03-18 ]

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

Comment by Alexander Barkov [ 2014-03-20 ]

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

Generated at Thu Feb 08 07:03:16 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.