mirror of
https://github.com/MariaDB/server.git
synced 2025-04-21 14:45:34 +02:00
MDEV-7129 : Galera duplicate error on autoincrement field primary key
Merged fix for https://github.com/codership/mysql-wsrep/issues/18.
This commit is contained in:
parent
952b575272
commit
743a28ea57
3 changed files with 48 additions and 5 deletions
|
@ -484,7 +484,8 @@ wsrep_run_wsrep_commit(THD *thd, handlerton *hton, bool all)
|
|||
case WSREP_BF_ABORT:
|
||||
DBUG_ASSERT(thd->wsrep_trx_meta.gtid.seqno != WSREP_SEQNO_UNDEFINED);
|
||||
case WSREP_TRX_FAIL:
|
||||
WSREP_DEBUG("commit failed for reason: %d", rcode);
|
||||
WSREP_DEBUG("commit failed for reason: %d %lu %s", rcode, thd->thread_id,
|
||||
thd->query());
|
||||
DBUG_PRINT("wsrep", ("replicating commit fail"));
|
||||
|
||||
thd->wsrep_query_state= QUERY_EXEC;
|
||||
|
|
|
@ -5901,6 +5901,14 @@ no_commit:
|
|||
#ifdef WITH_WSREP
|
||||
/* workaround for LP bug #355000, retrying the insert */
|
||||
case SQLCOM_INSERT:
|
||||
|
||||
WSREP_DEBUG("DUPKEY error for autoinc\n"
|
||||
"THD %ld, value %llu, off %llu inc %llu",
|
||||
wsrep_thd_thread_id(current_thd),
|
||||
auto_inc,
|
||||
prebuilt->autoinc_offset,
|
||||
prebuilt->autoinc_increment);
|
||||
|
||||
if (wsrep_on(current_thd) &&
|
||||
auto_inc_inserted &&
|
||||
wsrep_drupal_282555_workaround &&
|
||||
|
@ -7400,10 +7408,10 @@ wsrep_append_key(
|
|||
DBUG_ENTER("wsrep_append_key");
|
||||
bool const copy = true;
|
||||
#ifdef WSREP_DEBUG_PRINT
|
||||
fprintf(stderr, "%s conn %ld, trx %llu, keylen %d, table %s ",
|
||||
fprintf(stderr, "%s conn %ld, trx %llu, keylen %d, table %s\n Query: %s ",
|
||||
(shared) ? "Shared" : "Exclusive",
|
||||
wsrep_thd_thread_id(thd), trx->id, key_len,
|
||||
table_share->table_name.str);
|
||||
table_share->table_name.str, wsrep_thd_query(thd));
|
||||
for (int i=0; i<key_len; i++) {
|
||||
fprintf(stderr, "%hhX, ", key[i]);
|
||||
}
|
||||
|
@ -11473,7 +11481,20 @@ ha_innobase::get_auto_increment(
|
|||
next value in the series. */
|
||||
if (prebuilt->autoinc_increment > increment) {
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
WSREP_DEBUG("autoinc decrease: %llu -> %llu\n"
|
||||
"THD: %ld, current: %llu, autoinc: %llu",
|
||||
prebuilt->autoinc_increment,
|
||||
increment,
|
||||
wsrep_thd_thread_id(ha_thd()),
|
||||
current, autoinc);
|
||||
if (!wsrep_on(ha_thd()))
|
||||
{
|
||||
#endif /* WITH_WSREP */
|
||||
current = autoinc - prebuilt->autoinc_increment;
|
||||
#ifdef WITH_WSREP
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
current = innobase_next_autoinc(
|
||||
current, 1, increment, 1, col_max_value);
|
||||
|
|
|
@ -6871,6 +6871,14 @@ no_commit:
|
|||
#ifdef WITH_WSREP
|
||||
/* workaround for LP bug #355000, retrying the insert */
|
||||
case SQLCOM_INSERT:
|
||||
|
||||
WSREP_DEBUG("DUPKEY error for autoinc\n"
|
||||
"THD %ld, value %llu, off %llu inc %llu",
|
||||
wsrep_thd_thread_id(current_thd),
|
||||
auto_inc,
|
||||
prebuilt->autoinc_offset,
|
||||
prebuilt->autoinc_increment);
|
||||
|
||||
if (wsrep_on(current_thd) &&
|
||||
auto_inc_inserted &&
|
||||
wsrep_drupal_282555_workaround &&
|
||||
|
@ -8443,10 +8451,10 @@ wsrep_append_key(
|
|||
DBUG_ENTER("wsrep_append_key");
|
||||
bool const copy = true;
|
||||
#ifdef WSREP_DEBUG_PRINT
|
||||
fprintf(stderr, "%s conn %ld, trx %llu, keylen %d, table %s ",
|
||||
fprintf(stderr, "%s conn %ld, trx %llu, keylen %d, table %s\n Query: %s ",
|
||||
(shared) ? "Shared" : "Exclusive",
|
||||
wsrep_thd_thread_id(thd), trx->id, key_len,
|
||||
table_share->table_name.str);
|
||||
table_share->table_name.str, wsrep_thd_query(thd));
|
||||
for (int i=0; i<key_len; i++) {
|
||||
fprintf(stderr, "%hhX, ", key[i]);
|
||||
}
|
||||
|
@ -12591,7 +12599,20 @@ ha_innobase::get_auto_increment(
|
|||
next value in the series. */
|
||||
if (prebuilt->autoinc_increment > increment) {
|
||||
|
||||
#ifdef WITH_WSREP
|
||||
WSREP_DEBUG("autoinc decrease: %llu -> %llu\n"
|
||||
"THD: %ld, current: %llu, autoinc: %llu",
|
||||
prebuilt->autoinc_increment,
|
||||
increment,
|
||||
wsrep_thd_thread_id(ha_thd()),
|
||||
current, autoinc);
|
||||
if (!wsrep_on(ha_thd()))
|
||||
{
|
||||
#endif /* WITH_WSREP */
|
||||
current = autoinc - prebuilt->autoinc_increment;
|
||||
#ifdef WITH_WSREP
|
||||
}
|
||||
#endif /* WITH_WSREP */
|
||||
|
||||
current = innobase_next_autoinc(
|
||||
current, 1, increment, 1, col_max_value);
|
||||
|
|
Loading…
Add table
Reference in a new issue