diff options
author | Sergey Vojtovich <svoj@mariadb.org> | 2018-02-13 19:51:13 +0400 |
---|---|---|
committer | Sergey Vojtovich <svoj@mariadb.org> | 2018-02-14 22:39:24 +0400 |
commit | b782971c58b5656820429b8ef3fae5fd82f5a0f7 (patch) | |
tree | 4444ff307ac0b6d05a0550881e9db8acdbc3e1a3 /sql/sql_trigger.cc | |
parent | ba125eca551e3f5faee9f6d7ebed290f04cfc8fd (diff) | |
download | mariadb-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