From 1a4c63238ce08e4dcf8dc66697fee4894dbb87e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Mon, 9 Oct 2017 08:47:54 +0300 Subject: [PATCH] MDEV-14022 Upgrade from 10.0/10.1 fails on assertion rec_offs_validate(), rec_get_offsets_func(): Tolerate SYS_INDEXES records where the last column MERGE_THRESHOLD is missing. This column was added in MySQL 5.7 and MariaDB 10.2.2. For tables that were created earlier, the column will be missing. --- storage/innobase/rem/rem0rec.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/storage/innobase/rem/rem0rec.cc b/storage/innobase/rem/rem0rec.cc index 9e3d3e4be9d1b..3fed98f0f3dc9 100644 --- a/storage/innobase/rem/rem0rec.cc +++ b/storage/innobase/rem/rem0rec.cc @@ -515,7 +515,8 @@ rec_offs_validate( ut_ad(is_user_rec || n == 1); ut_ad(is_user_rec || i == 1); ut_ad(!is_user_rec || n >= i || !index - || n >= index->n_core_fields); + || (n + (index->id == DICT_INDEXES_ID)) + >= index->n_core_fields); for (; n < i; n++) { ut_ad(rec_offs_base(offsets)[1 + n] & REC_OFFS_DEFAULT); @@ -842,7 +843,8 @@ rec_get_offsets_func( ut_ad(!is_user_rec || !leaf || index->is_dummy || dict_index_is_ibuf(index) || n == n_fields /* btr_pcur_restore_position() */ - || (n >= index->n_core_fields && n <= index->n_fields)); + || (n + (index->id == DICT_INDEXES_ID) + >= index->n_core_fields && n <= index->n_fields)); if (is_user_rec && leaf && n < index->n_fields) { ut_ad(!index->is_dummy);