make replication work correctly if the master logs SELECT RELEASE_LOCK()

instead of DO RELEASE_LOCK()
parent 862cbdfe
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;
......
......@@ -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) {
......
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