Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.3.1, 10.4.0
Description
If an undo log page is reused after upgrading from an earlier version to MariaDB 10.3 or 10.4, the TRX_UNDO_PAGE_HDR + TRX_UNDO_PAGE_TYPE in that page could contain the value 1 (TRX_UNDO_INSERT), identifying that undo log page as insert_undo. This would cause an assertion failure on subsequent InnoDB startup if a transaction that was logged to such a page was persisted in an incomplete state:
10.3 397b6b13d062b28d12e9263710224bfb2269f19f |
mysqld: /mariadb/10.3/storage/innobase/trx/trx0roll.cc:1034: trx_undo_rec_t *trx_roll_pop_top_rec_of_trx(trx_t *, roll_ptr_t *, mem_heap_t *): Assertion `undo == update || undo == temp' failed.
|
This can be prevented by initializing the field in trx_undo_reuse_cached(). Unfortunately, we cannot initialize the entire undo log page, because multiple undo log headers may coexist in the same page.
Attachments
Issue Links
- is caused by
-
MDEV-12288 Reset DB_TRX_ID when the history is removed, to speed up MVCC
- Closed
- relates to
-
MDEV-15912 InnoDB: Failing assertion: purge_sys.tail.commit <= purge_sys.rseg->last_commit upon upgrade from 10.0 or 10.1 to 10.3
- Closed
-
MDEV-18960 Assertion `!omits_virtual_cols(*form->s)' failed after upgrade from 10.0/10.1 with PERSISTENT generated column
- Closed