Skip to content

Commit 25c82d6

Browse files
author
Venkatesh Duggirala
committed
Bug #19286708 REPLICATION BROKEN AFTER CREATION OF SCHEDULED EVENTS
Reverting patch due to a regression caused by this patch
1 parent fef0769 commit 25c82d6

File tree

4 files changed

+24
-57
lines changed

4 files changed

+24
-57
lines changed

mysql-test/suite/rpl/r/rpl_events.result

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -169,17 +169,4 @@ DROP EVENT event44331_2;
169169
DROP EVENT event44331_3;
170170
DROP EVENT event44331_4;
171171
include/sync_slave_sql_with_master.inc
172-
call mtr.add_suppression("Unsafe statement written to the binary log");
173-
CREATE EVENT EVENT_WITH_SYSDATE
174-
ON SCHEDULE EVERY 30 MINUTE STARTS sysdate()
175-
ON COMPLETION PRESERVE
176-
DO BEGIN
177-
DECLARE EXIT HANDLER FOR SQLEXCEPTION
178-
SELECT CONCAT('SAMPLE MSG');
179-
END |
180-
ALTER EVENT EVENT_WITH_SYSDATE
181-
ON SCHEDULE
182-
EVERY 12 HOUR
183-
STARTS sysdate() |
184-
DROP EVENT EVENT_WITH_SYSDATE |
185172
include/rpl_end.inc

mysql-test/suite/rpl/t/rpl_events.test

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
##################################################################
66

77
--source include/master-slave.inc
8+
89
SET @old_event_scheduler = @@global.event_scheduler;
910
set global event_scheduler=1;
1011

@@ -100,29 +101,4 @@ DROP EVENT event44331_2;
100101
DROP EVENT event44331_3;
101102
DROP EVENT event44331_4;
102103
--source include/sync_slave_sql_with_master.inc
103-
#
104-
# Bug #19286708 REPLICATION BROKEN AFTER CREATION OF SCHEDULED EVENTS
105-
# Testing create/alter event that has sysdate() (which makes statement unsafe)
106-
#
107-
connection master;
108-
call mtr.add_suppression("Unsafe statement written to the binary log");
109-
--disable_warnings
110-
DELIMITER |;
111-
CREATE EVENT EVENT_WITH_SYSDATE
112-
ON SCHEDULE EVERY 30 MINUTE STARTS sysdate()
113-
ON COMPLETION PRESERVE
114-
DO BEGIN
115-
DECLARE EXIT HANDLER FOR SQLEXCEPTION
116-
SELECT CONCAT('SAMPLE MSG');
117-
END |
118-
119-
ALTER EVENT EVENT_WITH_SYSDATE
120-
ON SCHEDULE
121-
EVERY 12 HOUR
122-
STARTS sysdate() |
123-
124-
DROP EVENT EVENT_WITH_SYSDATE |
125-
--enable_warnings
126-
DELIMITER ;|
127-
128104
--source include/rpl_end.inc

sql/event_db_repository.cc

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,6 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data,
661661
{
662662
int ret= 1;
663663
TABLE *table= NULL;
664-
bool save_binlog_row_based= false;
665664
sp_head *sp= thd->lex->sphead;
666665
sql_mode_t saved_mode= thd->variables.sql_mode;
667666
/*
@@ -681,9 +680,6 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data,
681680

682681
if (open_event_table(thd, TL_WRITE, &table))
683682
goto end;
684-
/* Switch to the STATEMENT Format to replicate CREATE EVENT. */
685-
if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row()))
686-
thd->clear_current_stmt_binlog_format_row();
687683

688684
DBUG_PRINT("info", ("name: %.*s", (int) parse_data->name.length,
689685
parse_data->name.str));
@@ -755,11 +751,6 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data,
755751
thd->mdl_context.rollback_to_savepoint(mdl_savepoint);
756752

757753
thd->variables.sql_mode= saved_mode;
758-
759-
/* Restore the state of binlog format */
760-
if (save_binlog_row_based)
761-
thd->set_current_stmt_binlog_format_row();
762-
763754
DBUG_RETURN(MY_TEST(ret));
764755
}
765756

@@ -789,7 +780,6 @@ Event_db_repository::update_event(THD *thd, Event_parse_data *parse_data,
789780
{
790781
CHARSET_INFO *scs= system_charset_info;
791782
TABLE *table= NULL;
792-
bool save_binlog_row_based= false;
793783
sp_head *sp= thd->lex->sphead;
794784
sql_mode_t saved_mode= thd->variables.sql_mode;
795785
/*
@@ -811,10 +801,6 @@ Event_db_repository::update_event(THD *thd, Event_parse_data *parse_data,
811801
if (open_event_table(thd, TL_WRITE, &table))
812802
goto end;
813803

814-
/* Switch to the STATEMENT Format to replicate ALTER EVENT. */
815-
if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row()))
816-
thd->clear_current_stmt_binlog_format_row();
817-
818804
DBUG_PRINT("info", ("dbname: %s", parse_data->dbname.str));
819805
DBUG_PRINT("info", ("name: %s", parse_data->name.str));
820806
DBUG_PRINT("info", ("user: %s", parse_data->definer.str));
@@ -880,10 +866,6 @@ Event_db_repository::update_event(THD *thd, Event_parse_data *parse_data,
880866
thd->mdl_context.rollback_to_savepoint(mdl_savepoint);
881867

882868
thd->variables.sql_mode= saved_mode;
883-
/* Restore the state of binlog format */
884-
if (save_binlog_row_based)
885-
thd->set_current_stmt_binlog_format_row();
886-
887869
DBUG_RETURN(MY_TEST(ret));
888870
}
889871

sql/events.cc

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ Events::create_event(THD *thd, Event_parse_data *parse_data,
307307
bool if_not_exists)
308308
{
309309
bool ret;
310-
bool event_already_exists;
310+
bool save_binlog_row_based, event_already_exists;
311311
DBUG_ENTER("Events::create_event");
312312

313313
if (check_if_system_tables_error())
@@ -335,6 +335,12 @@ Events::create_event(THD *thd, Event_parse_data *parse_data,
335335

336336
if (parse_data->do_not_create)
337337
DBUG_RETURN(FALSE);
338+
/*
339+
Turn off row binlogging of this statement and use statement-based
340+
so that all supporting tables are updated for CREATE EVENT command.
341+
*/
342+
if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row()))
343+
thd->clear_current_stmt_binlog_format_row();
338344

339345
if (lock_object_name(thd, MDL_key::EVENT,
340346
parse_data->dbname.str, parse_data->name.str))
@@ -393,6 +399,10 @@ Events::create_event(THD *thd, Event_parse_data *parse_data,
393399
}
394400
}
395401
}
402+
/* Restore the state of binlog format */
403+
DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row());
404+
if (save_binlog_row_based)
405+
thd->set_current_stmt_binlog_format_row();
396406

397407
DBUG_RETURN(ret);
398408
}
@@ -422,6 +432,7 @@ Events::update_event(THD *thd, Event_parse_data *parse_data,
422432
LEX_STRING *new_dbname, LEX_STRING *new_name)
423433
{
424434
int ret;
435+
bool save_binlog_row_based;
425436
Event_queue_element *new_element;
426437

427438
DBUG_ENTER("Events::update_event");
@@ -464,6 +475,13 @@ Events::update_event(THD *thd, Event_parse_data *parse_data,
464475
}
465476
}
466477

478+
/*
479+
Turn off row binlogging of this statement and use statement-based
480+
so that all supporting tables are updated for UPDATE EVENT command.
481+
*/
482+
if ((save_binlog_row_based= thd->is_current_stmt_binlog_format_row()))
483+
thd->clear_current_stmt_binlog_format_row();
484+
467485
if (lock_object_name(thd, MDL_key::EVENT,
468486
parse_data->dbname.str, parse_data->name.str))
469487
DBUG_RETURN(TRUE);
@@ -501,6 +519,10 @@ Events::update_event(THD *thd, Event_parse_data *parse_data,
501519
ret= write_bin_log(thd, TRUE, thd->query(), thd->query_length());
502520
}
503521
}
522+
/* Restore the state of binlog format */
523+
DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row());
524+
if (save_binlog_row_based)
525+
thd->set_current_stmt_binlog_format_row();
504526

505527
DBUG_RETURN(ret);
506528
}

0 commit comments

Comments
 (0)