diff options
| author | unknown <sasha@mysql.sashanet.com> | 2001-12-18 21:56:36 -0700 |
|---|---|---|
| committer | unknown <sasha@mysql.sashanet.com> | 2001-12-18 21:56:36 -0700 |
| commit | 267e85e5e3bf7288171018fa28070b12fa88863a (patch) | |
| tree | 9af06852639f8e7affcc06db7a78eeeea194c42d | |
| parent | 634869071e4d61559eecfffdc3ab46d8928fa725 (diff) | |
| download | mariadb-git-267e85e5e3bf7288171018fa28070b12fa88863a.tar.gz | |
make replication work correctly if the master logs SELECT RELEASE_LOCK()
instead of DO RELEASE_LOCK()
mysql-test/t/rpl_get_lock.test:
test for SELECT RELEASE() replication bug
| -rw-r--r-- | mysql-test/t/rpl_get_lock.test | 7 | ||||
| -rw-r--r-- | sql/sql_parse.cc | 21 |
2 files changed, 20 insertions, 8 deletions
diff --git a/mysql-test/t/rpl_get_lock.test b/mysql-test/t/rpl_get_lock.test index 8bbeeade468..3c33103e4c7 100644 --- a/mysql-test/t/rpl_get_lock.test +++ b/mysql-test/t/rpl_get_lock.test @@ -1,17 +1,16 @@ source include/master-slave.inc; connection master; create table t1(n int); -create table t2(n int); insert into t1 values(get_lock("lock",2)); dirty_close master; connection master1; select get_lock("lock",2); select release_lock("lock"); -let $1=20000; +let $1=2000; while ($1) { - select get_lock("lock",2); - select release_lock("lock"); + do get_lock("lock",2); + do release_lock("lock"); dec $1; } save_master_pos; diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index dd627017ead..48b48dc77a7 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1071,10 +1071,23 @@ mysql_execute_command(void) TABLE_LIST *tables=(TABLE_LIST*) lex->table_list.first; DBUG_ENTER("mysql_execute_command"); - if(table_rules_on && thd->slave_thread && tables && !tables_ok(thd,tables)) - DBUG_VOID_RETURN; // skip if we are in the slave thread, some table - // rules have been given and the table list says the query should not be - // replicated + if (thd->slave_thread) + { + // skip if we are in the slave thread, some table + // rules have been given and the table list says the query should not be + // replicated + if(table_rules_on && tables && !tables_ok(thd,tables)) + DBUG_VOID_RETURN; + // this is a workaround to deal with the shortcoming + // in 3.23.44-3.23.46 masters + // in RELEASE_LOCK() logging. We re-write SELECT RELEASE_LOCK() as + // DO RELEASE_LOCK() + if (lex->sql_command == SQLCOM_SELECT) + { + lex->sql_command = SQLCOM_DO; + lex->insert_list = &lex->item_list; + } + } thread_safe_increment(com_stat[lex->sql_command],&LOCK_thread_count); switch (lex->sql_command) { |
