summaryrefslogtreecommitdiff
path: root/mit-pthreads/stdio/fvwrite.h
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2022-09-06 12:44:58 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2022-09-06 12:44:58 +0300
commit1c730da666ec50b131ca96a916a024c216632c28 (patch)
tree6fd90c7375fe15155fbe47745f13ee7090d73c76 /mit-pthreads/stdio/fvwrite.h
parent4318391346dfd3ebc43175aa24e880b0e74159d4 (diff)
downloadmariadb-git-bb-10.6-MDEV-29440.tar.gz
MDEV-29440 InnoDB instant ALTER TABLE recovery must use READ UNCOMMITTEDbb-10.6-MDEV-29440
In commit 8f8ba758559e473f643baa0a0601d321c42517b9 (MDEV-27234) the data dictionary recovery was changed to use READ COMMITTED so that table-rebuild operations (OPTIMIZE TABLE, TRUNCATE TABLE, some forms of ALTER TABLE) would be recovered correctly. However, for operations that avoid a table rebuild thanks to being able to instantly ADD, DROP or reorder columns, recovery must use the READ UNCOMMITTED isolation level so that changes to the hidden metadata record can be rolled back. We will detect instant operations by detecting uncommitted changes to SYS_COLUMNS in case there is no uncommitted change of SYS_TABLES.ID for the table. In any table-rebuilding DDL operation, the SYS_TABLES.ID (and likely also the table name) will be updated. As part of rolling back the instant ALTER TABLE operation, after the operation on the hidden metadata record has been rolled back, a rollback of an INSERT into SYS_COLUMNS in row_undo_ins_remove_clust_rec() will invoke trx_t::evict_table() to discard the READ UNCOMMITTED definition of the table. After that, subsequent recovery steps will load and use the correct table definition.
Diffstat (limited to 'mit-pthreads/stdio/fvwrite.h')
0 files changed, 0 insertions, 0 deletions