mariadb/storage
Marko Mäkelä 0635088deb MDEV-27800: Avoid garbage TRX_UNDO_TRX_NO on TRX_UNDO_CACHED pages
In commit c7d0448797 (MDEV-15132)
MariaDB Server 10.3 stopped writing the latest transaction identifier
to the TRX_SYS page. Instead, the transaction identifier will be
recovered from undo log pages.

Unfortunately, before commit 3926673ce7
and mysql/mysql-server@dc29792ff2
(MySQL 5.1.48 or MariaDB 5.1.48) InnoDB did not always initialize all
data fields, but some garbage could be left behind in unused parts
of data pages.

In undo log pages that are essentially free, but added to a list for
reuse (TRX_UNDO_CACHED) the TRX_UNDO_TRX_NO fields could contain garbage,
instead of 0. As long as such undo pages are being reused and never
marked completely free, the garbage contents may remain forever.
In fact, the function trx_undo_header_create() and the record
MLOG_UNDO_HDR_CREATE will only initialize TRX_UNDO_TRX_ID, but leave
TRX_UNDO_TRX_NO uninitialized.

trx_undo_mem_create_at_db_start(): Only read the TRX_UNDO_TRX_NO
fields of TRX_UNDO_CACHED pages if the TRX_UNDO_PAGE_TYPE is 0,
that is, the page was updated by MariaDB Server 10.3. Earlier versions
would always write the TRX_UNDO_PAGE_TYPE as 1 or 2.

trx_undo_header_create(): Zero out the TRX_UNDO_TRX_NO field.
Strictly speaking, this will change the semantics of the
MLOG_UNDO_HDR_CREATE record, but it should not do any harm to
overwrite a potentially garbage field with zeroes.

Note: This fix will only help future upgrades straight from
MariaDB Server 10.2 or MySQL 5.6 or earlier. If such an upgrade has
already been made, then an earlier server startup could have
fast-forwarded the transaction ID sequence to a large value.
If this large value cannot be represented in 48 bits (the size of
the DB_TRX_ID column in clustered index records), then various
strange things can happen.
2022-02-28 12:12:12 +02:00
..
archive MDEV-17556 Assertion `bitmap_is_set_all(&table->s->all_set)' failed 2021-01-27 00:50:55 +10:00
blackhole Merge branch '10.2' into 10.3 2020-10-30 17:23:53 +01:00
cassandra Merge 10.2 into 10.3 2021-11-29 10:33:06 +02:00
connect Merge branch '10.2' into 10.3 2022-01-29 15:41:05 +01:00
csv MDEV-17556 Assertion `bitmap_is_set_all(&table->s->all_set)' failed 2021-01-27 00:50:55 +10:00
example MDEV-27730 Add PLUGIN_VAR_DEPRECATED flag to plugin variables 2022-02-18 13:10:20 +09:00
federated MDEV-17556 Assertion `bitmap_is_set_all(&table->s->all_set)' failed 2021-01-27 00:50:55 +10:00
federatedx MDEV-17556 Assertion `bitmap_is_set_all(&table->s->all_set)' failed 2021-01-27 00:50:55 +10:00
heap MDEV-21373 DBUG compilation - bad synchronization in ha_heap::external_lock() 2021-06-04 15:02:48 +02:00
innobase MDEV-27800: Avoid garbage TRX_UNDO_TRX_NO on TRX_UNDO_CACHED pages 2022-02-28 12:12:12 +02:00
maria MDEV-17223 Assertion `thd->killed != 0' failed in ha_maria::enable_indexes 2022-02-16 17:16:10 +02:00
mroonga MDEV-21108 Add option for setting install paths of groonga 2021-12-02 16:40:29 +02:00
myisam Merge branch '10.2' into 10.3 2021-11-12 00:08:53 +01:00
myisammrg
oqgraph Merge 10.2 into 10.3 2021-11-29 10:33:06 +02:00
perfschema Merge branch '10.2' into 10.3 2021-09-07 16:32:35 +03:00
rocksdb Merge branch '10.2' into 10.3 2022-01-29 15:41:05 +01:00
sequence MDEV-17556 Assertion `bitmap_is_set_all(&table->s->all_set)' failed 2021-01-27 00:50:55 +10:00
sphinx MDEV-17556 Assertion `bitmap_is_set_all(&table->s->all_set)' failed 2021-01-27 00:50:55 +10:00
spider MDEV-26768 Spider table crashes the server after the mysql_list_fields() client's call and produces weird result for SHOW FIELDS. 2022-01-20 14:44:56 +04:00
test_sql_discovery Merge 10.2 into 10.3 2021-10-28 07:50:05 +03:00
tokudb Merge 10.2 into 10.3 2021-11-29 10:33:06 +02:00