Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-18966

Transaction recovery may be broken after upgrade to 10.3

    Details

      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

            Activity

              People

              • Assignee:
                marko Marko Mäkelä
                Reporter:
                marko Marko Mäkelä
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: