summaryrefslogtreecommitdiff
path: root/storage/innobase
diff options
context:
space:
mode:
authorJan Lindström <jan.lindstrom@mariadb.com>2021-07-02 08:56:23 +0300
committerJan Lindström <jan.lindstrom@mariadb.com>2021-07-26 15:55:58 +0300
commit0bd9f755b798718dab8e354d39238d5e1457fd39 (patch)
tree7eeb8789e9fc0b699bda7ce99641c227effc5131 /storage/innobase
parentce870b2a2a54a1cab844be40a3fabdc8a2a53ce2 (diff)
downloadmariadb-git-0bd9f755b798718dab8e354d39238d5e1457fd39.tar.gz
MDEV-26062 : InnoDB: WSREP: referenced FK check fail: Lock wait index `PRIMARY` table `schema`.`child_table`
Problem was that not all normal error codes where not handled after wsrep_row_upd_check_foreign_constraints() call. Furhermore, debug assertion did not contain all normal error cases. Changed ib:: calls to WSREP_ calls to use wsrep instrumentation.
Diffstat (limited to 'storage/innobase')
-rw-r--r--storage/innobase/row/row0upd.cc76
1 files changed, 41 insertions, 35 deletions
diff --git a/storage/innobase/row/row0upd.cc b/storage/innobase/row/row0upd.cc
index 429282906df..1f3e34d493a 100644
--- a/storage/innobase/row/row0upd.cc
+++ b/storage/innobase/row/row0upd.cc
@@ -52,6 +52,11 @@ Created 12/27/1996 Heikki Tuuri
#include <algorithm>
#include <mysql/plugin.h>
#include <mysql/service_wsrep.h>
+#ifdef WITH_WSREP
+#include "log.h"
+#include "wsrep.h"
+#endif /* WITH_WSREP */
+
/* What kind of latch and lock can we assume when the control comes to
-------------------------------------------------------------------
@@ -2461,34 +2466,30 @@ row_upd_sec_index_entry(
err = DB_SUCCESS;
break;
case DB_LOCK_WAIT:
- if (UNIV_UNLIKELY(wsrep_debug)) {
- ib::warn() << "WSREP: sec index FK lock wait"
- << " index " << index->name
- << " table " << index->table->name
- << " query " << wsrep_thd_query(trx->mysql_thd);
- }
- break;
case DB_DEADLOCK:
- if (UNIV_UNLIKELY(wsrep_debug)) {
- ib::warn() << "WSREP: sec index FK check fail for deadlock"
- << " index " << index->name
- << " table " << index->table->name
- << " query " << wsrep_thd_query(trx->mysql_thd);
- }
+ case DB_LOCK_WAIT_TIMEOUT:
+ WSREP_DEBUG("Foreign key check fail: "
+ "%s on table %s index %s query %s",
+ ut_strerr(err), index->name, index->table->name,
+ wsrep_thd_query(trx->mysql_thd));
break;
default:
- ib::error() << "WSREP: referenced FK check fail: " << err
- << " index " << index->name
- << " table " << index->table->name
- << " query " << wsrep_thd_query(trx->mysql_thd);
-
+ WSREP_ERROR("Foreign key check fail: "
+ "%s on table %s index %s query %s",
+ ut_strerr(err), index->name, index->table->name,
+ wsrep_thd_query(trx->mysql_thd));
break;
}
}
#endif /* WITH_WSREP */
}
+#ifdef WITH_WSREP
+ ut_ad(err == DB_SUCCESS || err == DB_LOCK_WAIT
+ || err == DB_DEADLOCK || err == DB_LOCK_WAIT_TIMEOUT);
+#else
ut_ad(err == DB_SUCCESS);
+#endif
if (referenced) {
@@ -2800,17 +2801,21 @@ check_fk:
case DB_NO_REFERENCED_ROW:
err = DB_SUCCESS;
break;
+ case DB_LOCK_WAIT:
case DB_DEADLOCK:
- if (UNIV_UNLIKELY(wsrep_debug)) {
- ib::warn() << "WSREP: sec index FK check fail for deadlock"
- << " index " << index->name
- << " table " << index->table->name;
- }
+ case DB_LOCK_WAIT_TIMEOUT:
+ WSREP_DEBUG("Foreign key check fail: "
+ "%s on table %s index %s query %s",
+ ut_strerr(err), index->name, index->table->name,
+ wsrep_thd_query(trx->mysql_thd));
+
goto err_exit;
default:
- ib::error() << "WSREP: referenced FK check fail: " << err
- << " index " << index->name
- << " table " << index->table->name;
+ WSREP_ERROR("Foreign key check fail: "
+ "%s on table %s index %s query %s",
+ ut_strerr(err), index->name, index->table->name,
+ wsrep_thd_query(trx->mysql_thd));
+
goto err_exit;
}
#endif /* WITH_WSREP */
@@ -3027,18 +3032,19 @@ row_upd_del_mark_clust_rec(
case DB_NO_REFERENCED_ROW:
err = DB_SUCCESS;
break;
+ case DB_LOCK_WAIT:
case DB_DEADLOCK:
- if (UNIV_UNLIKELY(wsrep_debug)) {
- ib::warn() << "WSREP: sec index FK check fail for deadlock"
- << " index " << index->name
- << " table " << index->table->name;
- }
+ case DB_LOCK_WAIT_TIMEOUT:
+ WSREP_DEBUG("Foreign key check fail: "
+ "%d on table %s index %s query %s",
+ err, index->name, index->table->name,
+ wsrep_thd_query(trx->mysql_thd));
break;
default:
- ib::error() << "WSREP: referenced FK check fail: " << err
- << " index " << index->name
- << " table " << index->table->name;
-
+ WSREP_ERROR("Foreign key check fail: "
+ "%d on table %s index %s query %s",
+ err, index->name, index->table->name,
+ wsrep_thd_query(trx->mysql_thd));
break;
}
#endif /* WITH_WSREP */