[PATCH v3 0/3] Fix DML vs DDL race
Vladimir Davydov
vdavydov.dev at gmail.com
Thu Mar 28 20:53:20 MSK 2019
On Thu, Mar 28, 2019 at 07:17:47PM +0300, Vladimir Davydov wrote:
> In Vinyl a DML request may yield on disk read while still having a
> pointer to the target space saved on stack. If the space is altered
> during this time window, the DML request will most certainly crash
> while trying to dereference the stale pointer when it resumes. The
> solution is simple: abort all affected transactions whenever we delete
> a space from the cache.
>
> https://github.com/tarantool/tarantool/issues/3420
> https://github.com/tarantool/tarantool/commits/dv/gh-3420-vy-abort-tx-in-ddl
>
> Changes in v3:
> - Keep track of the *space* affected by the last prepared statement
> rather than the LSM tree.
>
> v2: https://www.freelists.org/post/tarantool-patches/PATCH-v2-03-Fix-DML-vs-DDL-race
>
> Changes in v2:
> - Instead of introducing a per transaction space hash, simply remember
> the pointer to the last prepared index. Thanks to Kostja for the tip.
> - Drop the patch allowing transactions affecting only replica local
> spaces outlast a switch to read-only mode, as we can't easily
> implement it without a per transaction space hash. Anyway, it was out
> of the scope of this issue.
>
> v1: https://www.freelists.org/post/tarantool-patches/PATCH-04-Fix-DML-vs-DDL-race
>
> Vladimir Davydov (3):
> vinyl: make tx_manager_abort_writers_for_ddl more thorough
> vinyl: abort affected transactions when space is removed from cache
> Revert "test: skip ddl test for vinyl on travis"
>
> rpm/tarantool.spec | 2 -
> src/box/blackhole.c | 1 +
> src/box/memtx_space.c | 1 +
> src/box/schema.cc | 3 ++
> src/box/space.c | 6 +++
> src/box/space.h | 15 ++++++
> src/box/sysview.c | 1 +
> src/box/vinyl.c | 33 ++++++++++---
> src/box/vy_point_lookup.c | 14 ++++++
> src/box/vy_read_iterator.c | 13 +++++
> src/box/vy_tx.c | 14 ++++--
> src/box/vy_tx.h | 15 ++++--
> test/vinyl/ddl.skipcond | 6 ---
> test/vinyl/errinj_ddl.result | 110 +++++++++++++++++++++++++++++++++++++++++
> test/vinyl/errinj_ddl.test.lua | 51 +++++++++++++++++++
> 15 files changed, 265 insertions(+), 20 deletions(-)
> delete mode 100644 test/vinyl/ddl.skipcond
Pushed to master, 2.1, 1.10.
More information about the Tarantool-patches
mailing list