diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2021-03-26 14:12:39 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2021-03-26 14:12:39 +0200 |
commit | a6d66fe75e9ce3ea2c43c311d0c8298fecbacff3 (patch) | |
tree | 5b4737afbc7a9feed71243a6ad193409f93c6aee /support-files/my-innodb-heavy-4G.cnf.sh | |
parent | da26e2e673970761d5000501f6171910f248d829 (diff) | |
download | mariadb-git-st-10.2-MDEV-24786.tar.gz |
MDEV-24786: row_upd_clust_step() skips mtr_t::commit() on virtual column errorst-10.2-MDEV-24786
The function row_upd_clust_step() is invoking several static functions,
some of which used to commit the mini-transaction in some cases.
If innobase_get_computed_value() would fail due to some reason,
we would fail to invoke mtr_t::commit() and release buffer pool
page latches. This would likely lead to a hanging server later.
This regression was introduced in
commit 97db6c15ea3e83a21df137c222dbd5a40fbe7c82 (MDEV-20618).
row_upd_index_is_referenced(), row_upd_sec_index_entry(),
row_upd_sec_index_entry(): Cleanup: Replace some ibool with bool.
row_upd_clust_rec_by_insert(), row_upd_clust_rec(): Guarantee that
the mini-transaction will always remain in active state.
row_upd_del_mark_clust_rec(): Guarantee that
the mini-transaction will always remain in active state.
This fixes one "leak" of mini-transaction on DB_COMPUTE_VALUE_FAILED.
row_upd_clust_step(): Use only one return path, which will always
invoke mtr.commit(). After a failed row_upd_store_row() call, we
will no longer "leak" the mini-transaction.
This fix was verified by RQG on 10.6 (depending on MDEV-371 that
was introduced in 10.4). Unfortunately, it is challenging to
create a regression test for this, and a test case could soon become
invalid as more bugs in virtual column evaluation are fixed.
Diffstat (limited to 'support-files/my-innodb-heavy-4G.cnf.sh')
0 files changed, 0 insertions, 0 deletions