403Webshell
Server IP : 88.99.149.37  /  Your IP : 216.73.216.141
Web Server : nginx/1.31.2
System : Linux server-88-99-149-37 6.12.0-124.56.5.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Fri May 15 06:12:08 EDT 2026 x86_64
User : muralimurth ( 1015)
PHP Version : 8.4.23
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/local/mysql/mysql-test/suite/rpl/t/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/local/mysql/mysql-test/suite/rpl/t/rpl_row_rollback_to_savepoint.test
###############################################################################
# Bug#76727: SLAVE ASSERTION IN UNPACK_ROW WITH ROLLBACK TO
# SAVEPOINT IN ERROR HANDLER
#
# Problem:
# ========
# "SAVEPOINT", "ROLLBACK TO savepoint" wipe out table map on slave during
# execution binary log events. For trigger the map is written to binary log once
# for all trigger body and if trigger contains "SAVEPOINT" or
# "ROLLBACK TO savepoint" statements any trigger's events after these
# statements will not have table map. This results in an assert on slave.
#
# Test:
# =====
# Test case 1:
# Create a trigger with exception handler which rolls back to a savepoint.
# Test proves that there will not be any assert during execution of rolling
# back to savepoint.
#
# Test case 2:
# Create a trigger which calls a procedure which in turn calls an exception
# handler which rolls back to a savepoint. Prove that it doesn't cause any
# assertion during execution.
#
# Test case 3:
# Create a simple trigger which does SAVEPOINT and ROLLBACK TO SAVEPOINT
# and doesn't follow with any other DML statement. Prove that it doesn't cause
# any assertion during execution.
#
# Test case 4:
# Create a trigger with SAVEPOINT and follows with a DML without ROLLBACK TO
# savepoint. Ensure that data is replicated properly.
#
# Test case 5:
# Create a trigger with SAVEPOINT and it does nothing. Do few DMLs following
# the trigger ensure that the data is replicated properly
#
# Test case 6:
# Create a stored function which does SAVEPOINT and ROLLBACK TO
# SAVEPOINT. Do few inserts following the stored function call and ensure that
# no assert is generated on slave and all the rows are replicated to slave.
#
# Test case 7:
# Create a stored function which creates a SAVEPOINT alone and follows with
# DMLs without ROLLBACK TO savepoint. Ensure that data is replicated properly.
#
# Test case 8:
# Create a stored function which has SAVEPOINT inside it and does noting. It
# should follow with other DMLs. Ensure that data is replicated properly.
###############################################################################
--source include/have_binlog_format_row.inc
--source include/have_innodb.inc
--source include/master-slave.inc

--echo #Test case 1:
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=INNODB;
CREATE TABLE t2 (f1 INTEGER PRIMARY KEY) ENGINE=INNODB;
CREATE TABLE t3 (f1 INTEGER PRIMARY KEY) ENGINE=INNODB;
DELIMITER |;

CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW
BEGIN
        DECLARE EXIT HANDLER FOR SQLEXCEPTION
                BEGIN
                        ROLLBACK TO event_logging_1;
                        INSERT t3 VALUES (1);
                END;
        SAVEPOINT event_logging_1;
        INSERT INTO t2 VALUES (1);
        RELEASE SAVEPOINT event_logging_1;
END|
DELIMITER ;|

INSERT INTO t2 VALUES (1);
INSERT INTO t1 VALUES (1);

--source include/show_binlog_events.inc

--sync_slave_with_master

connection master;

DROP TRIGGER tr1;
DELETE FROM t1;
DELETE FROM t2;
DELETE FROM t3;

--echo # Test case 2:

DELIMITER |;

CREATE PROCEDURE p1()
BEGIN
        DECLARE EXIT HANDLER FOR SQLEXCEPTION
                BEGIN
                        ROLLBACK TO event_logging_2;
                        INSERT t3 VALUES (3);
                END;
        SAVEPOINT event_logging_2;
        INSERT INTO t2 VALUES (1);
        RELEASE SAVEPOINT event_logging_2;
END|

CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW CALL p1()|

DELIMITER ;|

INSERT INTO t2 VALUES (1);
INSERT INTO t1 VALUES (1);

--source include/show_binlog_events.inc

--sync_slave_with_master

connection master;

DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;

DROP PROCEDURE p1;

--echo # Test case 3:
--source include/rpl_reset.inc
connection master;

CREATE TABLE t (f1 int(10) unsigned NOT NULL, PRIMARY KEY (f1)) ENGINE=InnoDB;

--delimiter |
CREATE TRIGGER t_insert_trig AFTER INSERT ON t FOR EACH ROW
BEGIN
  SAVEPOINT savepoint_1;
  ROLLBACK TO savepoint_1;
END |
--delimiter ;

INSERT INTO t VALUES (2);
INSERT INTO t VALUES (3);

--source include/show_binlog_events.inc

SELECT * FROM t;

--source include/sync_slave_sql_with_master.inc

SELECT * FROM t;

connection master;
DROP TABLE t;

--echo # Test case 4:
--source include/rpl_reset.inc
connection master;
CREATE TABLE t (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB;
CREATE TABLE t1 (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB;

--delimiter |
CREATE TRIGGER t_insert_trig BEFORE INSERT ON t FOR EACH ROW
BEGIN
  SAVEPOINT savepoint_1;
  INSERT INTO t1 VALUES (5);
END |
--delimiter ;

INSERT INTO t VALUES (2), (3);
INSERT INTO t1 VALUES (30);
--source include/show_binlog_events.inc

SELECT * FROM t;
SELECT * FROM t1;
--source include/sync_slave_sql_with_master.inc

SELECT * FROM t;
SELECT * FROM t1;

connection master;
DROP TABLE t;
DROP TABLE t1;

--echo # Test case 5:
--source include/rpl_reset.inc
connection master;
CREATE TABLE t (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB;
CREATE TABLE t1 (f1 int(10) unsigned NOT NULL) ENGINE=InnoDB;

--delimiter |
CREATE TRIGGER t_insert_trig BEFORE INSERT ON t
FOR EACH ROW
BEGIN

SAVEPOINT savepoint_1;
END |

--delimiter ;

INSERT INTO t VALUES (2), (3);
INSERT INTO t1 VALUES (30);
--source include/show_binlog_events.inc

SELECT * FROM t;
SELECT * FROM t1;
--source include/sync_slave_sql_with_master.inc

SELECT * FROM t;
SELECT * FROM t1;

connection master;
DROP TABLE t;
DROP TABLE t1;

--echo # Test case 6:
--source include/rpl_reset.inc
connection master;
CREATE TABLE t1 (f1 INTEGER ) ENGINE=INNODB;
CREATE TABLE t2 (f1 INTEGER ) ENGINE=INNODB;

--delimiter |

CREATE FUNCTION f1() RETURNS INT
BEGIN
        SAVEPOINT event_logging_2;
        INSERT INTO t1 VALUES (1);
        ROLLBACK TO event_logging_2;
        RETURN 0;
END|

--delimiter ;

BEGIN;
INSERT INTO t2 VALUES (1), (f1()), (2), (4);
COMMIT;
INSERT INTO t2 VALUES (10);
--source include/show_binlog_events.inc

connection master;
SELECT * FROM t2;
SELECT * FROM t1;
--source include/sync_slave_sql_with_master.inc
SELECT * FROM t2;
SELECT * FROM t1;

connection master;
DROP TABLE t1;
DROP TABLE t2;
DROP FUNCTION f1;

--echo # Test case 7:
--source include/rpl_reset.inc
connection master;
CREATE TABLE t1 (f1 INTEGER ) ENGINE=INNODB;
CREATE TABLE t2 (f1 INTEGER ) ENGINE=INNODB;

--delimiter |

CREATE FUNCTION f1() RETURNS INT
BEGIN
        SAVEPOINT event_logging_2;
        INSERT INTO t1 VALUES (1);
        RETURN 0;
END|

--delimiter ;

BEGIN;
INSERT INTO t2 VALUES (1), (f1()), (2), (4);
COMMIT;
INSERT INTO t2 VALUES (10);
--source include/show_binlog_events.inc

connection master;
SELECT * FROM t2;
SELECT * FROM t1;
--source include/sync_slave_sql_with_master.inc
SELECT * FROM t2;
SELECT * FROM t1;

connection master;
DROP TABLE t1;
DROP TABLE t2;
DROP FUNCTION f1;

--echo # Test case 8:
--source include/rpl_reset.inc
connection master;
CREATE TABLE t1 (f1 INTEGER ) ENGINE=INNODB;

--delimiter |

CREATE FUNCTION f1() RETURNS INT
BEGIN
        SAVEPOINT event_logging_2;
        RETURN 0;
END|

--delimiter ;

BEGIN;
INSERT INTO t1 VALUES (1), (f1()), (2), (4);
COMMIT;
INSERT INTO t1 VALUES (10);
--source include/show_binlog_events.inc

connection master;
SELECT * FROM t1;
--source include/sync_slave_sql_with_master.inc
SELECT * FROM t1;

connection master;
DROP TABLE t1;
DROP FUNCTION f1;

--source include/rpl_end.inc

Youez - 2016 - github.com/yon3zu
LinuXploit