From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Vladimir Davydov Subject: [PATCH 0/4] Fix DML vs DDL race Date: Sun, 24 Mar 2019 00:07:20 +0300 Message-Id: To: kostja@tarantool.org Cc: tarantool-patches@freelists.org List-ID: 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 NOTE the branch is based on top of https://github.com/tarantool/tarantool/commits/dv/gh-4070-vy-fail-aborted-transactions-early which was submitted for review earlier: https://www.freelists.org/post/tarantool-patches/PATCH-12-vinyl-drop-useless-vy-read-viewis-aborted-flag https://www.freelists.org/post/tarantool-patches/PATCH-22-vinyl-fail-aborted-transactions-early Vladimir Davydov (4): vinyl: introduce hash of spaces affected by transaction vinyl: don't abort transactions that modify only local spaces for ro 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 | 45 ++++++++++++++--- src/box/vy_tx.h | 44 +++++++++++++++-- test/vinyl/ddl.skipcond | 6 --- test/vinyl/errinj_ddl.result | 110 +++++++++++++++++++++++++++++++++++++++++ test/vinyl/errinj_ddl.test.lua | 51 +++++++++++++++++++ test/vinyl/misc.result | 38 ++++++++++++++ test/vinyl/misc.test.lua | 16 ++++++ 17 files changed, 376 insertions(+), 23 deletions(-) delete mode 100644 test/vinyl/ddl.skipcond -- 2.11.0