summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorSven Sandberg <sven@mysql.com>2008-08-19 17:35:56 +0200
committerSven Sandberg <sven@mysql.com>2008-08-19 17:35:56 +0200
commitbbb45c158fafd6409f4357751a8a4083c0ccce74 (patch)
treed4246fb07f2da7bbb611cfc625b38d9c1fffe3c2 /mysql-test
parentfd548d585d57b50cec1ffc785e160d9b154a9d15 (diff)
downloadmariadb-git-bbb45c158fafd6409f4357751a8a4083c0ccce74.tar.gz
Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based
INSTALL PLUGIN and UNINSTALL PLUGIN worked with statement-based and mixed-mode replication only, but not with row-based replication. There is no statement-based replication of these statements. But there was row-based replication of the inserts and deletes to and from the mysql.plugin table. The fix is to suppress binlogging during insert and delete to and from the mysql.plugin table. mysql-test/suite/rpl/r/rpl_plugin_load.result: new result file mysql-test/suite/rpl/t/rpl_plugin_load-master.opt: new opt file mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt: new opt file mysql-test/suite/rpl/t/rpl_plugin_load.test: new test sql/sql_plugin.cc: Suppress binlogging during insert and delete to/from the mysql.plugin table.
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/suite/rpl/r/rpl_plugin_load.result36
-rw-r--r--mysql-test/suite/rpl/t/rpl_plugin_load-master.opt1
-rw-r--r--mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt1
-rw-r--r--mysql-test/suite/rpl/t/rpl_plugin_load.test60
4 files changed, 98 insertions, 0 deletions
diff --git a/mysql-test/suite/rpl/r/rpl_plugin_load.result b/mysql-test/suite/rpl/r/rpl_plugin_load.result
new file mode 100644
index 00000000000..43e171a97c9
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_plugin_load.result
@@ -0,0 +1,36 @@
+stop slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+reset master;
+reset slave;
+drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
+start slave;
+Verify that example engine is not installed.
+SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
+ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
+Get binlog position before install plugin.
+Install example engine.
+INSTALL PLUGIN example SONAME 'ha_example.so';
+Get binlog position after install plugin.
+Compute the difference of the binlog positions.
+Should be zero as install plugin should not be replicated.
+Delta
+0
+Verify that example engine is installed.
+SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
+ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
+EXAMPLE YES Example storage engine NO NO NO
+connection slave: Verify that example engine is not installed.
+SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
+ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
+connection master: Uninstall example engine.
+Get binlog position before uninstall plugin.
+UNINSTALL PLUGIN example;
+Get binlog position after uninstall plugin.
+Compute the difference of the binlog positions.
+Should be zero as uninstall plugin should not be replicated.
+Delta
+0
+Verify that example engine is not installed.
+SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
+ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
+End of test
diff --git a/mysql-test/suite/rpl/t/rpl_plugin_load-master.opt b/mysql-test/suite/rpl/t/rpl_plugin_load-master.opt
new file mode 100644
index 00000000000..367d5233e0e
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_plugin_load-master.opt
@@ -0,0 +1 @@
+$EXAMPLE_PLUGIN_OPT
diff --git a/mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt b/mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt
new file mode 100644
index 00000000000..367d5233e0e
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt
@@ -0,0 +1 @@
+$EXAMPLE_PLUGIN_OPT
diff --git a/mysql-test/suite/rpl/t/rpl_plugin_load.test b/mysql-test/suite/rpl/t/rpl_plugin_load.test
new file mode 100644
index 00000000000..100683922ad
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_plugin_load.test
@@ -0,0 +1,60 @@
+#
+# Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based
+#
+# The test verifies that INSTALL PLUGIN and UNINSTALL PLUGIN
+# work with replication.
+#
+# The test tries to install and uninstall a plugin on master,
+# and verifies that it does not affect the slave,
+# and that it does not add anything to the binlog.
+
+--source include/not_embedded.inc
+--source include/have_log_bin.inc
+# Dynamic loading of Example does not work on Windows currently.
+--source include/not_windows.inc
+--source include/have_example_plugin.inc
+
+# Initialize replication.
+--source include/master-slave.inc
+--echo Verify that example engine is not installed.
+SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
+--echo Get binlog position before install plugin.
+let $before_pos = query_get_value("SHOW MASTER STATUS", Position, 1);
+--echo Install example engine.
+INSTALL PLUGIN example SONAME 'ha_example.so';
+--echo Get binlog position after install plugin.
+let $after_pos = query_get_value("SHOW MASTER STATUS", Position, 1);
+--echo Compute the difference of the binlog positions.
+--echo Should be zero as install plugin should not be replicated.
+--disable_query_log
+eval SELECT $after_pos - $before_pos AS Delta;
+--enable_query_log
+--echo Verify that example engine is installed.
+SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
+# Wait for slave to catch up with master.
+sync_slave_with_master;
+#
+ --echo connection slave: Verify that example engine is not installed.
+ connection slave;
+ SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
+#
+--echo connection master: Uninstall example engine.
+connection master;
+--echo Get binlog position before uninstall plugin.
+let $before_pos = query_get_value("SHOW MASTER STATUS", Position, 1);
+UNINSTALL PLUGIN example;
+--echo Get binlog position after uninstall plugin.
+let $after_pos = query_get_value("SHOW MASTER STATUS", Position, 1);
+--echo Compute the difference of the binlog positions.
+--echo Should be zero as uninstall plugin should not be replicated.
+--disable_query_log
+eval SELECT $after_pos - $before_pos AS Delta;
+--enable_query_log
+--echo Verify that example engine is not installed.
+SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='EXAMPLE';
+# Wait for slave to catch up with master.
+sync_slave_with_master;
+#
+# Cleanup
+--source include/master-slave-end.inc
+--echo End of test