This section describes how to write semisynchronous
replication server plugins, using the example plugins found in
the plugin/semisync directory of MySQL
source distributions. That directory contains the source files
for master and slave plugins named
rpl_semi_sync_master and
rpl_semi_sync_slave. The information here
covers only how to set up the plugin framework. For details
about how the plugins implement replication functions, see the
source.
To write a semisynchronous replication plugin, include the following header file in the plugin source file. Other MySQL or general header files might also be needed.
#include <mysql/plugin.h>
plugin.h defines the
MYSQL_REPLICATION_PLUGIN server plugin type
and the data structures needed to declare the plugin.
For the master side,
semisync_master_plugin.cc contains this
general descriptor for a plugin named
rpl_semi_sync_master:
mysql_declare_plugin(semi_sync_master)
{
MYSQL_REPLICATION_PLUGIN,
&semi_sync_master_plugin,
"rpl_semi_sync_master",
"He Zhenxing",
"Semi-synchronous replication master",
PLUGIN_LICENSE_GPL,
semi_sync_master_plugin_init, /* Plugin Init */
semi_sync_master_plugin_deinit, /* Plugin Deinit */
0x0100 /* 1.0 */,
semi_sync_master_status_vars, /* status variables */
semi_sync_master_system_vars, /* system variables */
NULL, /* config options */
0, /* flags */
}
mysql_declare_plugin_end;
For the slave side,
semisync_slave_plugin.cc contains this
general descriptor for a plugin named
rpl_semi_sync_slave:
mysql_declare_plugin(semi_sync_slave)
{
MYSQL_REPLICATION_PLUGIN,
&semi_sync_slave_plugin,
"rpl_semi_sync_slave",
"He Zhenxing",
"Semi-synchronous replication slave",
PLUGIN_LICENSE_GPL,
semi_sync_slave_plugin_init, /* Plugin Init */
semi_sync_slave_plugin_deinit, /* Plugin Deinit */
0x0100 /* 1.0 */,
semi_sync_slave_status_vars, /* status variables */
semi_sync_slave_system_vars, /* system variables */
NULL, /* config options */
0, /* flags */
}
mysql_declare_plugin_end;
For both the master and slave plugins, the general descriptor has pointers to the type-specific descriptor, the initialization and deinitialization functions, and to the status and system variables implemented by the plugin. For information about variable setup, see Section 23.2.4.2.2, “Server Plugin Status and System Variables”. The following remarks discuss the type-specific descriptor and the initialization and deinitialization functions for the master plugin but apply similarly to the slave plugin.
The semi_sync_master_plugin member of the
master general descriptor points to the type-specific
descriptor, which consists only of the type-specific API
version number:
struct Mysql_replication semi_sync_master_plugin= {
MYSQL_REPLICATION_INTERFACE_VERSION
};
The initialization and deinitialization function declarations look like this:
static int semi_sync_master_plugin_init(void *p); static int semi_sync_master_plugin_deinit(void *p);
The initialization function uses the pointer to register transaction and binary logging “observers” with the server. After successful initialization, the server takes care of invoking the observers at the appropriate times. (For details on the observers, see the source files.) The deinitialization function cleans up by deregistering the observers. Each function returns 0 for success or 1 if an error occurs.
To compile and install a plugin library object file, use the
instructions in Section 23.2.4.3, “Compiling and Installing Plugin Libraries”.
To use the library files, they must be installed in the plugin
directory (the directory named by the
plugin_dir system variable).
For the rpl_semi_sync_master and
rpl_semi_sync_slave plugins, they are
compiled and installed when you build MySQL from source. They
are also included in binary distributions. The build process
produces shared object libraries with names of
semisync_master.so and
semisync_slave.so (the extension might be
different depending on your platform).

User Comments
Add your own comment.