[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