From: Vladimir Davydov <vdavydov.dev@gmail.com> To: kostja@tarantool.org Cc: tarantool-patches@freelists.org Subject: [PATCH 0/6] Get rid of the schema lock Date: Sun, 30 Jun 2019 22:40:13 +0300 [thread overview] Message-ID: <cover.1561922496.git.vdavydov.dev@gmail.com> (raw) The schema lock was initially introduced to prevent a space from being dropped while the memtx checkpoint thread dumps its content to a snap file. Later on it was reused for syncing DDL-vs-DDL. Now we take it before any statement involving _space, _index, and _truncate spaces. This prevents us from batching several non-yielding DDL statements in the same transaction (see #4083). For instance, suppose we want to create a space and then an index for the space in the same transaction. Then we would deadlock while trying to take the schema lock before executing the second statement. We could, of course, make the lock reentrant, but that would rather look like a hack. Actually, we don't really need this lock for syncing checkpointing vs DDL - we can simply postpone index destruction until after checkpointing is complete. Moreover, all the necessary infrastructure has already been implemented in the scope of #3408 ("Free tuples on space drop/truncate in background fiber"). It also seems that we don't need this lock for syncing DDL vs DDL, either, since instead we can lock individual spaces. So this patch removes the schema lock altogether. This is a preparation for transaction DDL (see #4083). https://github.com/tarantool/tarantool/issues/4083 https://github.com/tarantool/tarantool/commits/dv/zap-schema-lock Vladimir Davydov (6): Add ERROR_INJECT_YIELD and ERROR_INJECT_SLEEP helpers Replace ERRINJ_SNAP_WRITE_ROW_TIMEOUT with ERRINJ_SNAP_WRITE_DELAY Don't take schema lock for checkpointing test: make vinyl/replica_rejoin more stable vinyl: don't yield while logging index creation Replace schema lock with fine-grained locking src/box/alter.cc | 68 +++-------------- src/box/alter.h | 3 - src/box/gc.c | 8 -- src/box/memtx_engine.c | 64 +++++++++------- src/box/memtx_engine.h | 5 ++ src/box/memtx_space.c | 79 +++++++------------ src/box/relay.cc | 6 +- src/box/schema.cc | 41 +++++----- src/box/schema.h | 6 -- src/box/space.c | 2 - src/box/space.h | 7 +- src/box/txn.c | 3 - src/box/vinyl.c | 23 +----- src/box/vy_log.c | 6 +- src/box/vy_lsm.c | 4 +- src/box/vy_run.c | 6 +- src/box/vy_scheduler.c | 22 ++---- src/box/wal.c | 4 +- src/curl.c | 7 +- src/lib/core/errinj.h | 12 ++- src/lib/core/latch.h | 10 --- test/app-tap/snapshot.test.lua | 5 +- test/box/errinj.result | 38 +++++----- test/box/errinj.test.lua | 6 +- test/box/on_replace.result | 8 +- test/box/transaction.result | 2 +- test/engine/errinj_ddl.result | 152 +++++++++++++++++++++++++++++++++++++ test/engine/errinj_ddl.test.lua | 62 +++++++++++++++ test/unit/vy_log_stub.c | 3 + test/vinyl/errinj_vylog.result | 23 +++++- test/vinyl/errinj_vylog.test.lua | 10 ++- test/vinyl/replica_rejoin.result | 119 ++++++++++++++--------------- test/vinyl/replica_rejoin.test.lua | 34 +++++---- test/xlog/errinj.result | 4 +- test/xlog/errinj.test.lua | 4 +- 35 files changed, 489 insertions(+), 367 deletions(-) -- 2.11.0
next reply other threads:[~2019-06-30 19:40 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-30 19:40 Vladimir Davydov [this message] 2019-06-30 19:40 ` [PATCH 1/6] Add ERROR_INJECT_YIELD and ERROR_INJECT_SLEEP helpers Vladimir Davydov 2019-07-03 19:12 ` Konstantin Osipov 2019-07-04 15:50 ` Vladimir Davydov 2019-06-30 19:40 ` [PATCH 2/6] Replace ERRINJ_SNAP_WRITE_ROW_TIMEOUT with ERRINJ_SNAP_WRITE_DELAY Vladimir Davydov 2019-07-03 19:13 ` Konstantin Osipov 2019-07-04 15:51 ` Vladimir Davydov 2019-06-30 19:40 ` [PATCH 3/6] Don't take schema lock for checkpointing Vladimir Davydov 2019-07-03 19:21 ` Konstantin Osipov 2019-07-03 20:05 ` Vladimir Davydov 2019-06-30 19:40 ` [PATCH 4/6] test: make vinyl/replica_rejoin more stable Vladimir Davydov 2019-07-03 19:23 ` Konstantin Osipov 2019-07-04 15:51 ` Vladimir Davydov 2019-06-30 19:40 ` [PATCH 5/6] vinyl: don't yield while logging index creation Vladimir Davydov 2019-06-30 19:40 ` [PATCH 6/6] Replace schema lock with fine-grained locking Vladimir Davydov 2019-07-03 19:35 ` Konstantin Osipov 2019-07-03 19:56 ` Vladimir Davydov 2019-07-04 8:09 ` Konstantin Osipov 2019-07-04 17:06 ` Vladimir Davydov 2019-07-08 7:40 ` Konstantin Osipov 2019-07-08 8:41 ` Vladimir Davydov 2019-07-05 8:53 ` [PATCH 0/6] Get rid of the schema lock Vladimir Davydov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=cover.1561922496.git.vdavydov.dev@gmail.com \ --to=vdavydov.dev@gmail.com \ --cc=kostja@tarantool.org \ --cc=tarantool-patches@freelists.org \ --subject='Re: [PATCH 0/6] Get rid of the schema lock' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox