From: Date: April 3 2008 6:07pm Subject: bk commit into 5.1 tree (istruewing:1.2576) BUG#35807 List-Archive: http://lists.mysql.com/commits/44879 X-Bug: 35807 Message-Id: Below is the list of changes that have just been committed into a local 5.1 repository of istruewing. When istruewing does a push these changes will be propagated to the main repository and, within 24 hours after the push, to the public repository. For information on how to access the public repository see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ChangeSet@stripped, 2008-04-03 18:07:19+02:00, istruewing@stripped +5 -0 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@stripped, 2008-04-03 18:07:18+02:00, istruewing@stripped +17 -0 Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based New test result. mysql-test/suite/rpl/r/rpl_plugin_load.result@stripped, 2008-04-03 18:07:18+02:00, istruewing@stripped +0 -0 mysql-test/suite/rpl/t/rpl_plugin_load-master.opt@stripped, 2008-04-03 18:07:18+02:00, istruewing@stripped +1 -0 Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based New master options. mysql-test/suite/rpl/t/rpl_plugin_load-master.opt@stripped, 2008-04-03 18:07:18+02:00, istruewing@stripped +0 -0 mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt@stripped, 2008-04-03 18:07:18+02:00, istruewing@stripped +1 -0 Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based New slave options. mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt@stripped, 2008-04-03 18:07:18+02:00, istruewing@stripped +0 -0 mysql-test/suite/rpl/t/rpl_plugin_load.test@stripped, 2008-04-03 18:07:18+02:00, istruewing@stripped +51 -0 Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based New test case. mysql-test/suite/rpl/t/rpl_plugin_load.test@stripped, 2008-04-03 18:07:18+02:00, istruewing@stripped +0 -0 sql/sql_plugin.cc@stripped, 2008-04-03 18:07:18+02:00, istruewing@stripped +16 -1 Bug#35807 - INSTALL PLUGIN replicates row-based, but not stmt-based Suppress binlogging during insert and delete to/from the mysql.plugin table. diff -Nrup a/mysql-test/suite/rpl/r/rpl_plugin_load.result b/mysql-test/suite/rpl/r/rpl_plugin_load.result --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/mysql-test/suite/rpl/r/rpl_plugin_load.result 2008-04-03 18:07:18 +02:00 @@ -0,0 +1,17 @@ +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; +connection master +INSTALL PLUGIN example SONAME 'ha_example.so'; +connection slave +INSTALL PLUGIN example SONAME 'ha_example.so'; +connection master +End of 5.1 tests +connection master +UNINSTALL PLUGIN example; +connection slave +UNINSTALL PLUGIN example; +connection default diff -Nrup a/mysql-test/suite/rpl/t/rpl_plugin_load-master.opt b/mysql-test/suite/rpl/t/rpl_plugin_load-master.opt --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/mysql-test/suite/rpl/t/rpl_plugin_load-master.opt 2008-04-03 18:07:18 +02:00 @@ -0,0 +1 @@ +$EXAMPLE_PLUGIN_OPT diff -Nrup a/mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt b/mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/mysql-test/suite/rpl/t/rpl_plugin_load-slave.opt 2008-04-03 18:07:18 +02:00 @@ -0,0 +1 @@ +$EXAMPLE_PLUGIN_OPT diff -Nrup a/mysql-test/suite/rpl/t/rpl_plugin_load.test b/mysql-test/suite/rpl/t/rpl_plugin_load.test --- /dev/null Wed Dec 31 16:00:00 196900 +++ b/mysql-test/suite/rpl/t/rpl_plugin_load.test 2008-04-03 18:07:18 +02:00 @@ -0,0 +1,51 @@ +--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 + +# +# Check if server has support for loading udf's +# i.e it will support dlopen +# +--require r/have_dynamic_loading.require +disable_query_log; +show variables like "have_dynamic_loading"; +enable_query_log; + +--require r/true.require +disable_query_log; +select LENGTH("$EXAMPLE_PLUGIN") > 0 as `TRUE`; +enable_query_log; + + +source ./include/master-slave.inc; + +echo connection master; +connection master; +INSTALL PLUGIN example SONAME 'ha_example.so'; +# + echo connection slave; + connection slave; + INSTALL PLUGIN example SONAME 'ha_example.so'; +# +echo connection master; +connection master; + +# We have to sync with master, to ensure slave had time to start properly +# before we stop it. If not, we get errors about UNIX_TIMESTAMP() in the log. +connection master; +sync_slave_with_master; + + +--echo End of 5.1 tests + +echo connection master; +connection master; +UNINSTALL PLUGIN example; + +echo connection slave; +connection slave; +UNINSTALL PLUGIN example; + +echo connection default; +connection default; diff -Nrup a/sql/sql_plugin.cc b/sql/sql_plugin.cc --- a/sql/sql_plugin.cc 2008-03-14 18:50:33 +01:00 +++ b/sql/sql_plugin.cc 2008-04-03 18:07:18 +02:00 @@ -1666,11 +1666,18 @@ bool mysql_install_plugin(THD *thd, cons goto deinit; } + /* + We do not replicate the INSTALL PLUGIN statement. Disable binlogging + of the insert into the plugin table, so that it is not replicated in + row based mode. + */ + tmp_disable_binlog(thd); table->use_all_columns(); restore_record(table, s->default_values); table->field[0]->store(name->str, name->length, system_charset_info); table->field[1]->store(dl->str, dl->length, files_charset_info); error= table->file->ha_write_row(table->record[0]); + reenable_binlog(thd); if (error) { table->file->print_error(error, MYF(0)); @@ -1735,7 +1742,15 @@ bool mysql_uninstall_plugin(THD *thd, co HA_READ_KEY_EXACT)) { int error; - if ((error= table->file->ha_delete_row(table->record[0]))) + /* + We do not replicate the UNINSTALL PLUGIN statement. Disable binlogging + of the delete from the plugin table, so that it is not replicated in + row based mode. + */ + tmp_disable_binlog(thd); + error= table->file->ha_delete_row(table->record[0]); + reenable_binlog(thd); + if (error) { table->file->print_error(error, MYF(0)); DBUG_RETURN(TRUE);