mirror of
https://github.com/MariaDB/server.git
synced 2025-11-08 00:28:29 +03:00
Problem: Some system functions that could return different values on
master and slave were not marked unsafe. In particular:
GET_LOCK
IS_FREE_LOCK
IS_USED_LOCK
MASTER_POS_WAIT
RELEASE_LOCK
SLEEP
SYSDATE
VERSION
Fix: Mark these functions unsafe.
mysql-test/extra/rpl_tests/rpl_stm_000001.test:
- The test does not work in mixed mode any more, since it tries to
simulate an error in the sql thread in a query that uses get_lock.
Since get_lock now causes the query to be logged in row format,
the error didn't happen. Hence, we now force statement mode.
- Warnings must be disabled when the unsafe query is issued.
- Replaced some save_master_pos+connection slave+sync_with_master
by sync_slave_with_master.
mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
updated result file
mysql-test/suite/binlog/r/binlog_stm_row.result:
updated result file
mysql-test/suite/binlog/r/binlog_unsafe.result:
updated result file
mysql-test/suite/binlog/t/binlog_killed.test:
binlog_killed only works in statement format now, since
it switches to row mode in mixed mode.
mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam.test:
suppress warnings for unsafe statements
mysql-test/suite/binlog/t/binlog_stm_row.test:
- Suppress warnings in test that causes warnings.
- The test sets binlog format explicitly, so no need to execute it
twice.
mysql-test/suite/binlog/t/binlog_unsafe.test:
Added test for all unsafe system functions. This test also includes
system functions that were unsafe prior to BUG#47995.
mysql-test/suite/rpl/r/rpl_err_ignoredtable.result:
updated result file
mysql-test/suite/rpl/r/rpl_get_lock.result:
updated result file
mysql-test/suite/rpl/r/rpl_nondeterministic_functions.result:
new result file
mysql-test/suite/rpl/r/rpl_stm_000001.result:
updated result file
mysql-test/suite/rpl/r/rpl_trigger.result:
updated result file
mysql-test/suite/rpl/t/rpl_err_ignoredtable.test:
- suppress warnings for unsafe statement
- replaced save_master_pos+connection slave+sync_with_master
with sync_slave_with_master
mysql-test/suite/rpl/t/rpl_get_lock.test:
update test case that causes new warnings
mysql-test/suite/rpl/t/rpl_nondeterministic_functions.test:
Added new test case for nondeterministic functions.
mysql-test/suite/rpl/t/rpl_trigger.test:
update test case that causes new warnings
sql/item_create.cc:
Marked some system functions unsafe.
sql/item_strfunc.cc:
Clarified comment related to this bug.
sql/sql_yacc.yy:
Marked sysdate unsafe.
65 lines
2.0 KiB
Plaintext
65 lines
2.0 KiB
Plaintext
# Test for
|
|
# Bug #797: If a query is ignored on slave (replicate-ignore-table) the slave
|
|
# still checks that it has the same error as on the master.
|
|
##########################################################################
|
|
# 2006-02-07 JBM Added error code 1022 for NDB Engine + ORDER BY
|
|
##########################################################################
|
|
|
|
-- source include/master-slave.inc
|
|
|
|
CALL mtr.add_suppression("Statement may not be safe to log in statement format.");
|
|
|
|
connection master;
|
|
create table t1 (a int primary key);
|
|
create table t4 (a int primary key);
|
|
# generate an error that goes to the binlog
|
|
--error 1022, ER_DUP_ENTRY
|
|
insert into t1 values (1),(1);
|
|
insert into t4 values (1),(2);
|
|
# as the t1 table is ignored on the slave, the slave should be able to sync
|
|
sync_slave_with_master;
|
|
# check that the table has been ignored, because otherwise the test is nonsense
|
|
show tables like 't1';
|
|
show tables like 't4';
|
|
SELECT * FROM test.t4 ORDER BY a;
|
|
connection master;
|
|
drop table t1;
|
|
sync_slave_with_master;
|
|
|
|
# Now test that even critical errors (connection killed)
|
|
# are ignored if rules allow it.
|
|
# The "kill" idea was copied from rpl000001.test.
|
|
|
|
connection master1;
|
|
select get_lock('crash_lock%20C', 10);
|
|
|
|
connection master;
|
|
create table t2 (a int primary key);
|
|
insert into t2 values(1);
|
|
create table t3 (id int);
|
|
insert into t3 values(connection_id());
|
|
send update t2 set a = a + 1 + get_lock('crash_lock%20C', 10);
|
|
|
|
connection master1;
|
|
let $wait_condition= SELECT a > 1 FROM t2;
|
|
source include/wait_condition.inc;
|
|
select (@id := id) - id from t3;
|
|
kill @id;
|
|
drop table t2,t3;
|
|
insert into t4 values (3),(4);
|
|
connection master;
|
|
# The get_lock function causes warning for unsafe statement.
|
|
--disable_warnings
|
|
--error 0,1317,2013
|
|
reap;
|
|
--enable_warnings
|
|
connection master1;
|
|
sync_slave_with_master;
|
|
SELECT * FROM test.t4 ORDER BY a;
|
|
|
|
connection master1;
|
|
DROP TABLE test.t4;
|
|
sync_slave_with_master;
|
|
# End of 4.1 tests
|
|
# Adding comment for force manual merge 5.0 -> wl1012. delete me if needed
|