[Commits] 5a87e3ee874: Revert offending part of MDEV-9519: Data corruption will happen on the Galera cluster size change
revision-id: 5a87e3ee874d04325bc6f106c9862c96a6a35172 (mariadb-10.1.38-14-g5a87e3ee874) parent(s): 243f829c1c772c1b8e9e0717fbf5839e84244559 author: Jan Lindström committer: Jan Lindström timestamp: 2019-02-28 09:29:19 +0200 message: Revert offending part of MDEV-9519: Data corruption will happen on the Galera cluster size change This will allow test binlog.binlog_stm_binlog to pass more often. Note that this is not a real fix to that test failure. --- sql/handler.cc | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/sql/handler.cc b/sql/handler.cc index ba3f7f3e16a..f307b3895bc 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -3016,7 +3016,7 @@ int handler::update_auto_increment() bool append= FALSE; THD *thd= table->in_use; struct system_variables *variables= &thd->variables; - int tmp; + int result=0, tmp; enum enum_check_fields save_count_cuted_fields; DBUG_ENTER("handler::update_auto_increment"); @@ -3152,18 +3152,27 @@ int handler::update_auto_increment() */ if (thd->killed == KILL_BAD_DATA || nr > table->next_number_field->get_max_int_value()) - DBUG_RETURN(HA_ERR_AUTOINC_ERANGE); - /* - Field refused this value (overflow) and truncated it, use the result - of the truncation (which is going to be inserted); however we try to - decrease it to honour auto_increment_* variables. - That will shift the left bound of the reserved interval, we don't - bother shifting the right bound (anyway any other value from this - interval will cause a duplicate key). - */ - nr= prev_insert_id(table->next_number_field->val_int(), variables); - if (unlikely(table->next_number_field->store((longlong)nr, TRUE))) - nr= table->next_number_field->val_int(); + { + /* + It's better to return an error here than getting a confusing + 'duplicate key error' later. + */ + result= HA_ERR_AUTOINC_ERANGE; + } + else + { + /* + Field refused this value (overflow) and truncated it, use the result + of the truncation (which is going to be inserted); however we try to + decrease it to honour auto_increment_* variables. + That will shift the left bound of the reserved interval, we don't + bother shifting the right bound (anyway any other value from this + interval will cause a duplicate key). + */ + nr= prev_insert_id(table->next_number_field->val_int(), variables); + if (unlikely(table->next_number_field->store((longlong)nr, TRUE))) + nr= table->next_number_field->val_int(); + } } if (append) { @@ -3188,6 +3197,9 @@ int handler::update_auto_increment() */ insert_id_for_cur_row= nr; + if (result) // overflow + DBUG_RETURN(result); + /* Set next insert id to point to next auto-increment value to be able to handle multi-row statements.
participants (1)
-
jan