diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index 2978fb1..820c494 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -173,10 +173,14 @@ MACRO(MYSQL_ADD_PLUGIN) SET (mysql_mandatory_plugins "${mysql_mandatory_plugins} builtin_maria_${target}_plugin," PARENT_SCOPE) + SET (mysql_mandatory_plugins + "${mysql_mandatory_plugins} builtin_maria_${target}_plugin,") ELSE() SET (mysql_optional_plugins "${mysql_optional_plugins} builtin_maria_${target}_plugin," PARENT_SCOPE) + SET (mysql_optional_plugins + "${mysql_optional_plugins} builtin_maria_${target}_plugin,") ENDIF() ELSEIF(NOT WITHOUT_${plugin} AND NOT ARG_STATIC_ONLY AND NOT WITHOUT_DYNAMIC_PLUGINS) diff --git a/plugin/semisync/CMakeLists.txt b/plugin/semisync/CMakeLists.txt index f1ada50..ff475ec 100644 --- a/plugin/semisync/CMakeLists.txt +++ b/plugin/semisync/CMakeLists.txt @@ -17,11 +17,15 @@ SET(SEMISYNC_MASTER_SOURCES semisync.cc semisync_master.cc semisync_master_plugin.cc semisync.h semisync_master.h) -MYSQL_ADD_PLUGIN(semisync_master ${SEMISYNC_MASTER_SOURCES} - MODULE_ONLY MODULE_OUTPUT_NAME "semisync_master") +MYSQL_ADD_PLUGIN(semi_sync_master ${SEMISYNC_MASTER_SOURCES} + DEFAULT MANDATORY RECOMPILE_FOR_EMBEDDED + MODULE_OUTPUT_NAME "semisync_master" + STATIC_OUTPUT_NAME "semi_sync_master") SET(SEMISYNC_SLAVE_SOURCES semisync.cc semisync_slave.cc semisync_slave_plugin.cc semisync.h semisync_slave.h ) -MYSQL_ADD_PLUGIN(semisync_slave ${SEMISYNC_SLAVE_SOURCES} - MODULE_ONLY MODULE_OUTPUT_NAME "semisync_slave") +MYSQL_ADD_PLUGIN(semi_sync_slave ${SEMISYNC_SLAVE_SOURCES} + DEFAULT MANDATORY RECOMPILE_FOR_EMBEDDED + MODULE_OUTPUT_NAME "semisync_slave" + STATIC_OUTPUT_NAME "semi_sync_slave") diff --git a/plugin/semisync/semisync.h b/plugin/semisync/semisync.h index 4208048..00bf8b5 100644 --- a/plugin/semisync/semisync.h +++ b/plugin/semisync/semisync.h @@ -18,8 +18,12 @@ #ifndef SEMISYNC_H #define SEMISYNC_H +#ifndef MYSQL_SERVER #define MYSQL_SERVER +#endif +#ifndef HAVE_REPLICATION #define HAVE_REPLICATION +#endif #include #include #include "unireg.h" diff --git a/plugin/semisync/semisync_master_plugin.cc b/plugin/semisync/semisync_master_plugin.cc index 70aa744..e1e3a4c 100644 --- a/plugin/semisync/semisync_master_plugin.cc +++ b/plugin/semisync/semisync_master_plugin.cc @@ -19,7 +19,9 @@ #include "semisync_master.h" #include "sql_class.h" // THD -ReplSemiSyncMaster repl_semisync; +#ifndef EMBEDDED_LIBRARY + +ReplSemiSyncMaster *repl_semisync_master; C_MODE_START @@ -29,14 +31,14 @@ int repl_semi_report_binlog_update(Binlog_storage_param *param, { int error= 0; - if (repl_semisync.getMasterEnabled()) + if (repl_semisync_master->getMasterEnabled()) { /* Let us store the binlog file name and the position, so that we know how long to wait for the binlog to the replicated to the slave in synchronous replication. */ - error= repl_semisync.writeTranxInBinlog(log_file, + error= repl_semisync_master->writeTranxInBinlog(log_file, log_pos); } @@ -56,7 +58,7 @@ int repl_semi_report_commit(Trans_param *param) if (is_real_trans && param->log_pos) { const char *binlog_name= param->log_file; - return repl_semisync.commitTrx(binlog_name, param->log_pos); + return repl_semisync_master->commitTrx(binlog_name, param->log_pos); } return 0; } @@ -70,18 +72,18 @@ int repl_semi_binlog_dump_start(Binlog_transmit_param *param, const char *log_file, my_off_t log_pos) { - bool semi_sync_slave= repl_semisync.is_semi_sync_slave(); + bool semi_sync_slave= repl_semisync_master->is_semi_sync_slave(); if (semi_sync_slave) { /* One more semi-sync slave */ - repl_semisync.add_slave(); + repl_semisync_master->add_slave(); /* Let's assume this semi-sync slave has already received all binlog events before the filename and position it requests. */ - repl_semisync.reportReplyBinlog(param->server_id, log_file, log_pos); + repl_semisync_master->reportReplyBinlog(param->server_id, log_file, log_pos); } sql_print_information("Start %s binlog_dump to slave (server_id: %d), pos(%s, %lu)", semi_sync_slave ? "semi-sync" : "asynchronous", @@ -92,7 +94,7 @@ int repl_semi_binlog_dump_start(Binlog_transmit_param *param, int repl_semi_binlog_dump_end(Binlog_transmit_param *param) { - bool semi_sync_slave= repl_semisync.is_semi_sync_slave(); + bool semi_sync_slave= repl_semisync_master->is_semi_sync_slave(); sql_print_information("Stop %s binlog_dump to slave (server_id: %d)", semi_sync_slave ? "semi-sync" : "asynchronous", @@ -100,7 +102,7 @@ int repl_semi_binlog_dump_end(Binlog_transmit_param *param) if (semi_sync_slave) { /* One less semi-sync slave */ - repl_semisync.remove_slave(); + repl_semisync_master->remove_slave(); } return 0; } @@ -109,7 +111,7 @@ int repl_semi_reserve_header(Binlog_transmit_param *param, unsigned char *header, unsigned long size, unsigned long *len) { - *len += repl_semisync.reserveSyncHeader(header, size); + *len += repl_semisync_master->reserveSyncHeader(header, size); return 0; } @@ -117,7 +119,7 @@ int repl_semi_before_send_event(Binlog_transmit_param *param, unsigned char *packet, unsigned long len, const char *log_file, my_off_t log_pos) { - return repl_semisync.updateSyncHeader(packet, + return repl_semisync_master->updateSyncHeader(packet, log_file, log_pos, param->server_id); @@ -126,7 +128,7 @@ int repl_semi_before_send_event(Binlog_transmit_param *param, int repl_semi_after_send_event(Binlog_transmit_param *param, const char *event_buf, unsigned long len) { - if (repl_semisync.is_semi_sync_slave()) + if (repl_semisync_master->is_semi_sync_slave()) { THD *thd= current_thd; /* @@ -134,7 +136,7 @@ int repl_semi_after_send_event(Binlog_transmit_param *param, because we do not want dump thread to quit on this. Error messages are already reported. */ - (void) repl_semisync.readSlaveReply(&thd->net, + (void) repl_semisync_master->readSlaveReply(&thd->net, param->server_id, event_buf); thd->clear_error(); } @@ -143,7 +145,7 @@ int repl_semi_after_send_event(Binlog_transmit_param *param, int repl_semi_reset_master(Binlog_transmit_param *param) { - if (repl_semisync.resetMaster()) + if (repl_semisync_master->resetMaster()) return 1; return 0; } @@ -211,7 +213,7 @@ static void fix_rpl_semi_sync_master_timeout(MYSQL_THD thd, const void *val) { *(unsigned long *)ptr= *(unsigned long *)val; - repl_semisync.setWaitTimeout(rpl_semi_sync_master_timeout); + repl_semisync_master->setWaitTimeout(rpl_semi_sync_master_timeout); return; } @@ -221,7 +223,7 @@ static void fix_rpl_semi_sync_master_trace_level(MYSQL_THD thd, const void *val) { *(unsigned long *)ptr= *(unsigned long *)val; - repl_semisync.setTraceLevel(rpl_semi_sync_master_trace_level); + repl_semisync_master->setTraceLevel(rpl_semi_sync_master_trace_level); return; } @@ -233,12 +235,12 @@ static void fix_rpl_semi_sync_master_enabled(MYSQL_THD thd, *(char *)ptr= *(char *)val; if (rpl_semi_sync_master_enabled) { - if (repl_semisync.enableMaster() != 0) + if (repl_semisync_master->enableMaster() != 0) rpl_semi_sync_master_enabled = false; } else { - if (repl_semisync.disableMaster() != 0) + if (repl_semisync_master->disableMaster() != 0) rpl_semi_sync_master_enabled = true; } @@ -276,7 +278,7 @@ Binlog_transmit_observer transmit_observer = { #define DEF_SHOW_FUNC(name, show_type) \ static int SHOW_FNAME(name)(MYSQL_THD thd, SHOW_VAR *var, char *buff) \ { \ - repl_semisync.setExportStats(); \ + repl_semisync_master->setExportStats(); \ var->type= show_type; \ var->value= (char *)&rpl_semi_sync_master_##name; \ return 0; \ @@ -387,7 +389,8 @@ static int semi_sync_master_plugin_init(void *p) init_semisync_psi_keys(); #endif - if (repl_semisync.initObject()) + repl_semisync_master= new ReplSemiSyncMaster(); + if (repl_semisync_master->initObject()) return 1; if (register_trans_observer(&trans_observer, p)) return 1; @@ -415,6 +418,9 @@ static int semi_sync_master_plugin_deinit(void *p) sql_print_error("unregister_binlog_transmit_observer failed"); return 1; } + delete repl_semisync_master; + repl_semisync_master= NULL; + sql_print_information("unregister_replicator OK"); return 0; } @@ -426,7 +432,7 @@ struct Mysql_replication semi_sync_master_plugin= { /* Plugin library descriptor */ -mysql_declare_plugin(semi_sync_master) +maria_declare_plugin(semi_sync_master) { MYSQL_REPLICATION_PLUGIN, &semi_sync_master_plugin, @@ -442,4 +448,26 @@ mysql_declare_plugin(semi_sync_master) NULL, /* config options */ 0, /* flags */ } -mysql_declare_plugin_end; +maria_declare_plugin_end; + +#else // EMBEDDED_SERVER + +maria_declare_plugin(semi_sync_master) +{ + MYSQL_REPLICATION_PLUGIN, + NULL, + "rpl_semi_sync_master", + "He Zhenxing", + "Semi-synchronous replication master", + PLUGIN_LICENSE_GPL, + NULL, /* Plugin Init */ + NULL, /* Plugin Deinit */ + 0x0100 /* 1.0 */, + NULL, /* status variables */ + NULL, /* system variables */ + NULL, /* config options */ + 0, /* flags */ +} +maria_declare_plugin_end; + +#endif diff --git a/plugin/semisync/semisync_slave.h b/plugin/semisync/semisync_slave.h index 1bf8cf3..bccf06b 100644 --- a/plugin/semisync/semisync_slave.h +++ b/plugin/semisync/semisync_slave.h @@ -27,7 +27,7 @@ class ReplSemiSyncSlave :public ReplSemiSyncBase { public: ReplSemiSyncSlave() - :slave_enabled_(false) + : init_done_(false), slave_enabled_(false), mysql_reply(NULL) {} ~ReplSemiSyncSlave() {} diff --git a/plugin/semisync/semisync_slave_plugin.cc b/plugin/semisync/semisync_slave_plugin.cc index 5d373fa..8f4c517 100644 --- a/plugin/semisync/semisync_slave_plugin.cc +++ b/plugin/semisync/semisync_slave_plugin.cc @@ -18,7 +18,9 @@ #include "semisync_slave.h" #include -ReplSemiSyncSlave repl_semisync; +#ifndef EMBEDDED_LIBRARY + +ReplSemiSyncSlave *repl_semisync_slave; /* indicate whether or not the slave should send a reply to the master. @@ -45,7 +47,7 @@ int repl_semi_slave_request_dump(Binlog_relay_IO_param *param, MYSQL_ROW row; const char *query; - if (!repl_semisync.getSlaveEnabled()) + if (!repl_semisync_slave->getSlaveEnabled()) return 0; /* Check if master server has semi-sync plugin installed */ @@ -89,7 +91,7 @@ int repl_semi_slave_read_event(Binlog_relay_IO_param *param, const char **event_buf, unsigned long *event_len) { if (rpl_semi_sync_slave_status) - return repl_semisync.slaveReadSyncHeader(packet, len, + return repl_semisync_slave->slaveReadSyncHeader(packet, len, &semi_sync_need_reply, event_buf, event_len); *event_buf= packet; @@ -109,7 +111,7 @@ int repl_semi_slave_queue_event(Binlog_relay_IO_param *param, should not cause the slave IO thread to stop, and the error messages are already reported. */ - (void) repl_semisync.slaveReply(param->mysql, + (void) repl_semisync_slave->slaveReply(param->mysql, param->master_log_name, param->master_log_pos); } @@ -118,12 +120,12 @@ int repl_semi_slave_queue_event(Binlog_relay_IO_param *param, int repl_semi_slave_io_start(Binlog_relay_IO_param *param) { - return repl_semisync.slaveStart(param); + return repl_semisync_slave->slaveStart(param); } int repl_semi_slave_io_end(Binlog_relay_IO_param *param) { - return repl_semisync.slaveStop(param); + return repl_semisync_slave->slaveStop(param); } C_MODE_END @@ -134,7 +136,7 @@ static void fix_rpl_semi_sync_slave_enabled(MYSQL_THD thd, const void *val) { *(char *)ptr= *(char *)val; - repl_semisync.setSlaveEnabled(rpl_semi_sync_slave_enabled != 0); + repl_semisync_slave->setSlaveEnabled(rpl_semi_sync_slave_enabled != 0); return; } @@ -144,7 +146,7 @@ static void fix_rpl_semi_sync_trace_level(MYSQL_THD thd, const void *val) { *(unsigned long *)ptr= *(unsigned long *)val; - repl_semisync.setTraceLevel(rpl_semi_sync_slave_trace_level); + repl_semisync_slave->setTraceLevel(rpl_semi_sync_slave_trace_level); return; } @@ -190,7 +192,8 @@ Binlog_relay_IO_observer relay_io_observer = { static int semi_sync_slave_plugin_init(void *p) { - if (repl_semisync.initObject()) + repl_semisync_slave= new ReplSemiSyncSlave(); + if (repl_semisync_slave->initObject()) return 1; if (register_binlog_relay_io_observer(&relay_io_observer, p)) return 1; @@ -201,6 +204,8 @@ static int semi_sync_slave_plugin_deinit(void *p) { if (unregister_binlog_relay_io_observer(&relay_io_observer, p)) return 1; + delete repl_semisync_slave; + repl_semisync_slave= NULL; return 0; } @@ -212,7 +217,7 @@ struct Mysql_replication semi_sync_slave_plugin= { /* Plugin library descriptor */ -mysql_declare_plugin(semi_sync_slave) +maria_declare_plugin(semi_sync_slave) { MYSQL_REPLICATION_PLUGIN, &semi_sync_slave_plugin, @@ -228,4 +233,26 @@ mysql_declare_plugin(semi_sync_slave) NULL, /* config options */ 0, /* flags */ } -mysql_declare_plugin_end; +maria_declare_plugin_end; + +#else // EMBEDDED_SERVER + +maria_declare_plugin(semi_sync_slave) +{ + MYSQL_REPLICATION_PLUGIN, + NULL, + "rpl_semi_sync_slave", + "He Zhenxing", + "Semi-synchronous replication slave", + PLUGIN_LICENSE_GPL, + NULL, /* Plugin Init */ + NULL, /* Plugin Deinit */ + 0x0100 /* 1.0 */, + NULL, /* status variables */ + NULL, /* system variables */ + NULL, /* config options */ + 0, /* flags */ +} +maria_declare_plugin_end; + +#endif