Commit 267e85e5 authored by unknown's avatar unknown

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
parent 63486907
source include/master-slave.inc; source include/master-slave.inc;
connection master; connection master;
create table t1(n int); create table t1(n int);
create table t2(n int);
insert into t1 values(get_lock("lock",2)); insert into t1 values(get_lock("lock",2));
dirty_close master; dirty_close master;
connection master1; connection master1;
select get_lock("lock",2); select get_lock("lock",2);
select release_lock("lock"); select release_lock("lock");
let $1=20000; let $1=2000;
while ($1) while ($1)
{ {
select get_lock("lock",2); do get_lock("lock",2);
select release_lock("lock"); do release_lock("lock");
dec $1; dec $1;
} }
save_master_pos; save_master_pos;
......
...@@ -1071,10 +1071,23 @@ mysql_execute_command(void) ...@@ -1071,10 +1071,23 @@ mysql_execute_command(void)
TABLE_LIST *tables=(TABLE_LIST*) lex->table_list.first; TABLE_LIST *tables=(TABLE_LIST*) lex->table_list.first;
DBUG_ENTER("mysql_execute_command"); DBUG_ENTER("mysql_execute_command");
if(table_rules_on && thd->slave_thread && tables && !tables_ok(thd,tables)) if (thd->slave_thread)
DBUG_VOID_RETURN; // skip if we are in the slave thread, some table {
// skip if we are in the slave thread, some table
// rules have been given and the table list says the query should not be // rules have been given and the table list says the query should not be
// replicated // 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); thread_safe_increment(com_stat[lex->sql_command],&LOCK_thread_count);
switch (lex->sql_command) { switch (lex->sql_command) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment