diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2022-08-18 16:02:13 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2022-08-18 16:02:13 +0300 |
commit | ec37906646edf4d40ab920c9f2ae144c686221cb (patch) | |
tree | 4273ab9676db371d83be18893d321fa65220e353 | |
parent | af552f2903b9764e3bc0634a0037c39d1a837f4f (diff) | |
download | mariadb-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.cc | 7 |
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, |