mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
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
This commit is contained in:
parent
dea21438b4
commit
836c5cac84
2 changed files with 20 additions and 8 deletions
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue