Bug #12752572 61579: REPLICATION FAILURE WHILE
INNODB_AUTOINC_LOCK_MODE=1 AND USING TRIGGER When an insert stmt like "insert into t values (1),(2),(3)" is executed, the autoincrement values assigned to these three rows are expected to be contiguous. In the given lock mode (innodb_autoinc_lock_mode=1), the auto inc lock will be released before the end of the statement. So to make the autoincrement contiguous for a given statement, we need to reserve the auto inc values at the beginning of the statement. rb://1074 approved by Alexander Nozdrin
This commit is contained in:
parent
8bb98d7535
commit
f23215ee9c
@ -2397,6 +2397,17 @@ int handler::update_auto_increment()
|
|||||||
reservation means potentially losing unused values).
|
reservation means potentially losing unused values).
|
||||||
Note that in prelocked mode no estimation is given.
|
Note that in prelocked mode no estimation is given.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
For multi-row inserts, if the bulk inserts cannot be started, the
|
||||||
|
handler::estimation_rows_to_insert will not be set. Set it here.
|
||||||
|
*/
|
||||||
|
if ((estimation_rows_to_insert == 0) &&
|
||||||
|
(thd->lex->many_values.elements > 0))
|
||||||
|
{
|
||||||
|
estimation_rows_to_insert= thd->lex->many_values.elements;
|
||||||
|
}
|
||||||
|
|
||||||
if ((auto_inc_intervals_count == 0) && (estimation_rows_to_insert > 0))
|
if ((auto_inc_intervals_count == 0) && (estimation_rows_to_insert > 0))
|
||||||
nb_desired_values= estimation_rows_to_insert;
|
nb_desired_values= estimation_rows_to_insert;
|
||||||
else /* go with the increasing defaults */
|
else /* go with the increasing defaults */
|
||||||
@ -4690,6 +4701,8 @@ int handler::ha_write_row(uchar *buf)
|
|||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
if (unlikely(error= binlog_log_row(table, 0, buf, log_func)))
|
if (unlikely(error= binlog_log_row(table, 0, buf, log_func)))
|
||||||
DBUG_RETURN(error); /* purecov: inspected */
|
DBUG_RETURN(error); /* purecov: inspected */
|
||||||
|
|
||||||
|
DEBUG_SYNC_C("ha_write_row_end");
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user