Commit e979417c authored by Annamalai Gurusami's avatar Annamalai Gurusami

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.  

Modified the fix based on review comment by Svoj.  
parent 781137c0
......@@ -2398,18 +2398,18 @@ int handler::update_auto_increment()
Note that in prelocked mode no estimation is given.
*/
if ((auto_inc_intervals_count == 0) && (estimation_rows_to_insert > 0))
nb_desired_values= estimation_rows_to_insert;
else if ((auto_inc_intervals_count == 0) &&
(thd->lex->many_values.elements > 0))
{
/*
For multi-row inserts, if the bulk inserts cannot be started, the
handler::estimation_rows_to_insert will not be set. Set it here.
handler::estimation_rows_to_insert will not be set. But we still
want to reserve the autoinc values.
*/
if ((estimation_rows_to_insert == 0) &&
(thd->lex->many_values.elements > 0))
{
estimation_rows_to_insert= thd->lex->many_values.elements;
nb_desired_values= thd->lex->many_values.elements;
}
if ((auto_inc_intervals_count == 0) && (estimation_rows_to_insert > 0))
nb_desired_values= estimation_rows_to_insert;
else /* go with the increasing defaults */
{
/* avoid overflow in formula, with this if() */
......
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