-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDEV-24786: row_upd_clust_step() skips mtr_t::commit() on virtual col…
…umn error 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 97db6c1 (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.
- Loading branch information
Showing
1 changed file
with
46 additions
and
80 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters