Bug #87225 assert failure: !sdi_insert_failed || trx_is_interrupted(trx)
| Submitted: | 27 Jul 2017 15:38 | Modified: | 23 Oct 2017 18:07 |
|---|---|---|---|
| Reporter: | Naga Satyanarayana Bodapati | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: InnoDB storage engine | Severity: | S3 (Non-critical) |
| Version: | 8.0.3 | OS: | Any |
| Assigned to: | CPU Architecture: | Any |
[27 Jul 2017 15:38]
Naga Satyanarayana Bodapati
[27 Jul 2017 17:16]
Naga Satyanarayana Bodapati
Posted by developer:
while waiting for reply from runtime team:
This is the workaround:
diff --git a/storage/innobase/api/api0api.cc b/storage/innobase/api/api0api.cc
index bfdad8c0484..2629fc23441 100644
--- a/storage/innobase/api/api0api.cc
+++ b/storage/innobase/api/api0api.cc
@@ -3272,6 +3272,64 @@ ib_sdi_open_table(
return(err);
}
+
+/* TODO: remove this hack after discussing with runtime team */
+static
+dberr_t
+ib_sdi_insert_schema(
+ uint32_t space_id,
+ const ib_sdi_key_t* ib_sdi_key,
+ uint32_t uncomp_len,
+ uint32_t comp_len,
+ const void* sdi)
+{
+ /* use separate trx for schema SDI */
+ /* do non-locking MVCC read to see schema SDI already exists */
+ /* If exists, just return, we never update schema SDI */
+ /* If doesn't exist and we get DB_LOCK_WAIT/DB_DEADLOCK due to
+ concurrent inserts of same schema SDI, retry until success */
+ trx_t* trx = trx_allocate_for_mysql();
+ trx_start_internal(trx);
+
+ ib_crsr_t ib_crsr = NULL;
+ ib_err_t err = ib_sdi_open_table(
+ space_id, trx, &ib_crsr);
+
+ if (err != DB_SUCCESS) {
+ trx_commit_for_mysql(trx);
+ trx_free_for_mysql(trx);
+ return(err);
+ }
+
+ ib_tpl_t schema_tuple = ib_sdi_create_insert_tuple(
+ ib_crsr, ib_sdi_key->sdi_key, uncomp_len,
+ comp_len, sdi);
+
+ ib_cursor_set_lock_mode(ib_crsr, IB_LOCK_X);
+ ib_tpl_t key_tpl = ib_sdi_create_search_tuple(
+ ib_crsr, ib_sdi_key->sdi_key);
+
+ ib_cursor_set_match_mode(ib_crsr, IB_EXACT_MATCH);
+ ib_cursor_set_lock_mode(ib_crsr, IB_LOCK_NONE);
+ err = ib_cursor_moveto(ib_crsr, key_tpl, IB_CUR_LE, 0);
+
+ if (err == DB_RECORD_NOT_FOUND) {
+ do {
+ /* Do insert. handle lock wait timeout and deadlock */
+ err = ib_cursor_insert_row(ib_crsr, schema_tuple);
+ } while (err == DB_LOCK_WAIT_TIMEOUT || err == DB_DEADLOCK);
+ }
+
+ ut_ad(err == DB_SUCCESS || err == DB_DUPLICATE_KEY);
+
+ ib_tuple_delete(key_tpl);
+ ib_tuple_delete(schema_tuple);
+ ib_cursor_close(ib_crsr);
+ trx_commit_for_mysql(trx);
+ trx_free_for_mysql(trx);
+ return(DB_SUCCESS);
+}
+
/** Insert/Update SDI in tablespace
@param[in] tablespace_id tablespace id
@param[in] ib_sdi_key SDI key to uniquely identify the tablespace
@@ -3300,6 +3358,11 @@ ib_sdi_set(
<< " sdi_len: " << comp_len;
);
+ /* TODO: remove this hack for handling Schema SDI */
+ if (ib_sdi_key->sdi_key->type == 0) {
+ return(ib_sdi_insert_schema(tablespace_id, ib_sdi_key, uncomp_len, comp_len, sdi));
+ }
+
ib_crsr_t ib_crsr = NULL;
ib_err_t err = ib_sdi_open_table(
tablespace_id, trx, &ib_crsr);
[27 Sep 2017 14:07]
Naga Satyanarayana Bodapati
Posted by developer:
Requesting re-triage:
1. It is no longer WL bug(so SRFEATURE doesn't make sense)
2. It is 8.0 & trunk bug now
Last I heard from Dyre:
"
Hi Satya,
we have decided that we want to stop writing schema SDIs altogether.
As soon as we get the approval from Rune, will file a bug for this and work to get that into RC2.
"
As part of this bug fix, workaround has to removed:
See storage/innobase/api/api0api.cc
ib_sdi_set():
/* TODO: remove this workaround for handling Schema SDI
(Bug#26539665) */
if (ib_sdi_key->sdi_key->type == 0) {
return(ib_sdi_insert_schema(tablespace_id, ib_sdi_key,
uncomp_len, comp_len, sdi));
}
Remove ib_sdi_insert_schema() completely.
[23 Oct 2017 18:07]
Paul DuBois
Posted by developer: Fixed in 8.0.4, 9.0.0. Parallel inserts of schema SDI into the SDI B-tree could raise an assertion when creating tables in the same schema in parallal.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.041 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.