summaryrefslogtreecommitdiff
path: root/sql/sql_trigger.cc
diff options
context:
space:
mode:
authorSergey Vojtovich <svoj@mariadb.org>2018-02-13 19:51:13 +0400
committerSergey Vojtovich <svoj@mariadb.org>2018-02-14 22:39:24 +0400
commitb782971c58b5656820429b8ef3fae5fd82f5a0f7 (patch)
tree4444ff307ac0b6d05a0550881e9db8acdbc3e1a3 /sql/sql_trigger.cc
parentba125eca551e3f5faee9f6d7ebed290f04cfc8fd (diff)
downloadmariadb-git-b782971c58b5656820429b8ef3fae5fd82f5a0f7.tar.gz
MDEV-15246 - premature history data deletion
This is regression after bc7a1dc1fbd27e6064d3b40443fe242397668af7 of MDEV-15104 - Optimise MVCC snapshot. Aforementioned revision removes mutex lock around ReadView creation, which allows views to be created concurrently. Effectively it invalidates "oldest view" approach: no single view can be considered oldest anymore. Instead we have to iterate trx_sys.m_views to find min(m_low_limit_no), min(m_low_limit_id) and all transaction ids below min(m_low_limit_id), which would form oldest view. Second regression comes from c0d5d7c0efb6d2b9961da7fb813ff000a5d3e4c5 of MDEV-15104 - Optimise MVCC snapshot. It removes mutex protection around trx->no assignment, which opens up a gap between m_max_trx_id increment and transaction serialisation number becoming visible through rw_trx_hash. While we're in this gap concurrent thread may come and do MVCC snapshot without seeing allocated but not yet assigned serialisation number. Then at some point purge thread may clone this view. As a result it won't see newly allocated serialisation number and may remove "unnecessary" history data of this transaction from rollback segments.
Diffstat (limited to 'sql/sql_trigger.cc')
0 files changed, 0 insertions, 0 deletions