summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2022-08-18 16:02:13 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2022-08-18 16:02:13 +0300
commitec37906646edf4d40ab920c9f2ae144c686221cb (patch)
tree4273ab9676db371d83be18893d321fa65220e353
parentaf552f2903b9764e3bc0634a0037c39d1a837f4f (diff)
downloadmariadb-git-ec37906646edf4d40ab920c9f2ae144c686221cb.tar.gz
MDEV-29321 Percona XtraDB 5.7 can't be upgrade to MariaDB 10.6 or above
In MySQL 5.7, rollback segments 1 to 32 are used for temporary tables, which is an unnecessary file format change from MySQL 5.6. This format change was avoided in MariaDB Server by commit 124bae082bf17e9af1fc77f78bbebd019635be5c (MDEV-12289). An upgrade from MySQL 5.7 would crash due to dereferencing a null pointer, which is a regression due to commit 0b47c126e31cddda1e94588799599e138400bcf8 (MDEV-13542). trx_rseg_t::get(): Return nullptr if no tablespace exists. This is where the upgrade would crash. trx_rseg_mem_restore(): Return DB_TABLESPACE_NOT_FOUND if the undo tablespace does not exist. This is likely dead code.
-rw-r--r--storage/innobase/trx/trx0rseg.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/storage/innobase/trx/trx0rseg.cc b/storage/innobase/trx/trx0rseg.cc
index 34ec21d6013..760c4e707ce 100644
--- a/storage/innobase/trx/trx0rseg.cc
+++ b/storage/innobase/trx/trx0rseg.cc
@@ -290,6 +290,11 @@ bool trx_rseg_read_wsrep_checkpoint(XID& xid)
buf_block_t *trx_rseg_t::get(mtr_t *mtr, dberr_t *err) const
{
+ if (!space)
+ {
+ if (err) *err= DB_TABLESPACE_NOT_FOUND;
+ return nullptr;
+ }
return buf_page_get_gen(page_id(), 0, RW_X_LATCH, nullptr,
BUF_GET, mtr, err);
}
@@ -435,6 +440,8 @@ static dberr_t trx_undo_lists_init(trx_rseg_t *rseg, trx_id_t &max_trx_id,
static dberr_t trx_rseg_mem_restore(trx_rseg_t *rseg, trx_id_t &max_trx_id,
mtr_t *mtr)
{
+ if (!rseg->space)
+ return DB_TABLESPACE_NOT_FOUND;
dberr_t err;
const buf_block_t *rseg_hdr=
buf_page_get_gen(rseg->page_id(), 0, RW_S_LATCH, nullptr, BUF_GET, mtr,