Commit 3dd88fbd authored by Nirbhay Choubey's avatar Nirbhay Choubey

MDEV-10714: Could not execute Delete_rows event on table; wsrep_max_ws_rows...

MDEV-10714: Could not execute Delete_rows event on table; wsrep_max_ws_rows exceeded. Error_Code 1180

The wsrep_max_ws_rows related implementation should be skipped
when server is running with wsrep disabled.
parent 616271b7
include/master-slave.inc
[connection master]
#
# MDEV-10714: Could not execute Delete_rows event on table;
# wsrep_max_ws_rows exceeded. Error_Code 1180
#
CREATE TABLE t1(i INT) ENGINE = INNODB;
SET @@GLOBAL.wsrep_max_ws_rows = 1;
INSERT INTO t1 VALUES(1), (2);
SELECT COUNT(*) = 2 FROM t1;
COUNT(*) = 2
1
SET @@GLOBAL.wsrep_max_ws_rows = 1;
DELETE FROM t1;
SELECT COUNT(*) = 0 FROM t1;
COUNT(*) = 0
1
DROP TABLE t1;
SET @@GLOBAL.wsrep_max_ws_rows = 0;
SET @@GLOBAL.wsrep_max_ws_rows = 0;
include/rpl_end.inc
# End of test.
--source include/have_wsrep.inc
--source include/have_innodb.inc
--source include/master-slave.inc
--echo #
--echo # MDEV-10714: Could not execute Delete_rows event on table;
--echo # wsrep_max_ws_rows exceeded. Error_Code 1180
--echo #
# Save wsrep_max_ws_rows on master and slave.
connection master;
let $wsrep_max_ws_rows_master = `SELECT @@GLOBAL.wsrep_max_ws_rows`;
connection slave;
let $wsrep_max_ws_rows_slave = `SELECT @@GLOBAL.wsrep_max_ws_rows`;
connection master;
CREATE TABLE t1(i INT) ENGINE = INNODB;
# Setting wsrep_max_ws_rows should have no impact on replication master
# unless its a cluster node.
SET @@GLOBAL.wsrep_max_ws_rows = 1;
INSERT INTO t1 VALUES(1), (2);
sync_slave_with_master;
SELECT COUNT(*) = 2 FROM t1;
connection slave;
# Setting wsrep_max_ws_rows should have no impact on replication slave
# unless its a cluster node.
SET @@GLOBAL.wsrep_max_ws_rows = 1;
connection master;
DELETE FROM t1;
sync_slave_with_master;
SELECT COUNT(*) = 0 FROM t1;
connection master;
DROP TABLE t1;
sync_slave_with_master;
# Restore wsrep_max_ws_rows on master and slave
connection master;
eval SET @@GLOBAL.wsrep_max_ws_rows = $wsrep_max_ws_rows_master;
connection slave;
eval SET @@GLOBAL.wsrep_max_ws_rows = $wsrep_max_ws_rows_slave;
--source include/rpl_end.inc
--echo # End of test.
......@@ -6109,14 +6109,17 @@ int handler::ha_write_row(uchar *buf)
if (unlikely(error= binlog_log_row(table, 0, buf, log_func)))
DBUG_RETURN(error); /* purecov: inspected */
#ifdef WITH_WSREP
current_thd->wsrep_affected_rows++;
if (wsrep_max_ws_rows &&
current_thd->wsrep_exec_mode != REPL_RECV &&
current_thd->wsrep_affected_rows > wsrep_max_ws_rows)
if (WSREP(current_thd))
{
trans_rollback_stmt(current_thd) || trans_rollback(current_thd);
my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0));
DBUG_RETURN(ER_ERROR_DURING_COMMIT);
current_thd->wsrep_affected_rows++;
if (wsrep_max_ws_rows &&
current_thd->wsrep_exec_mode != REPL_RECV &&
current_thd->wsrep_affected_rows > wsrep_max_ws_rows)
{
trans_rollback_stmt(current_thd) || trans_rollback(current_thd);
my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0));
DBUG_RETURN(ER_ERROR_DURING_COMMIT);
}
}
#endif /* WITH_WSREP */
......@@ -6153,14 +6156,17 @@ int handler::ha_update_row(const uchar *old_data, uchar *new_data)
if (unlikely(error= binlog_log_row(table, old_data, new_data, log_func)))
return error;
#ifdef WITH_WSREP
current_thd->wsrep_affected_rows++;
if (wsrep_max_ws_rows &&
current_thd->wsrep_exec_mode != REPL_RECV &&
current_thd->wsrep_affected_rows > wsrep_max_ws_rows)
if (WSREP(current_thd))
{
trans_rollback_stmt(current_thd) || trans_rollback(current_thd);
my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0));
return ER_ERROR_DURING_COMMIT;
current_thd->wsrep_affected_rows++;
if (wsrep_max_ws_rows &&
current_thd->wsrep_exec_mode != REPL_RECV &&
current_thd->wsrep_affected_rows > wsrep_max_ws_rows)
{
trans_rollback_stmt(current_thd) || trans_rollback(current_thd);
my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0));
return ER_ERROR_DURING_COMMIT;
}
}
#endif /* WITH_WSREP */
return 0;
......@@ -6191,14 +6197,17 @@ int handler::ha_delete_row(const uchar *buf)
if (unlikely(error= binlog_log_row(table, buf, 0, log_func)))
return error;
#ifdef WITH_WSREP
current_thd->wsrep_affected_rows++;
if (wsrep_max_ws_rows &&
current_thd->wsrep_exec_mode != REPL_RECV &&
current_thd->wsrep_affected_rows > wsrep_max_ws_rows)
{
trans_rollback_stmt(current_thd) || trans_rollback(current_thd);
my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0));
return ER_ERROR_DURING_COMMIT;
if (WSREP(current_thd))
{
current_thd->wsrep_affected_rows++;
if (wsrep_max_ws_rows &&
current_thd->wsrep_exec_mode != REPL_RECV &&
current_thd->wsrep_affected_rows > wsrep_max_ws_rows)
{
trans_rollback_stmt(current_thd) || trans_rollback(current_thd);
my_message(ER_ERROR_DURING_COMMIT, "wsrep_max_ws_rows exceeded", MYF(0));
return ER_ERROR_DURING_COMMIT;
}
}
#endif /* WITH_WSREP */
return 0;
......
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