Tarantool development patches archive
 help / color / mirror / Atom feed
From: Vladimir Davydov <vdavydov.dev@gmail.com>
To: kostja@tarantool.org
Cc: tarantool-patches@freelists.org
Subject: [PATCH v2 0/5] Prepare vylog for space alter
Date: Tue, 20 Mar 2018 14:29:00 +0300	[thread overview]
Message-ID: <cover.1521545062.git.vdavydov.dev@gmail.com> (raw)

The vinyl metadata log (vylog) has two idiosyncrasies that thwart
implementation of ALTER of vinyl spaces. The first one is the
callback-based recovery procedure (see vy_recovery_iterate): an
attempt to purge incomplete indexes from vylog after restart using the
recovery callback would result in extremely ugly and obfuscated code.
The second problem is the way indexes are identified in vylog: we
currently use LSN as a unique identifier, but it won't be unique if
more than one index is altered in one operation, which is the case
when the primary key definition is changed.

The patch set solves both these problems as follows:
 - Patch 1 refactors the recovery procedure so that it uses plain
   iterators instead of callbacks.
 - Patch 2 and 3 do some renames in preparation for patch 4.
 - Patch 4 ceases usage of LSN as unique index identifier. Instead
   it introduces a special unique index id, similar to range id or
   slice id we already have.
 - Patch 5 does some cleanup in ALTER code that becomes possible
   after patch 4 is applied.

https://github.com/tarantool/tarantool/tree/vy-prepare-vylog-for-alter

Changes in v2:
 - Introduce unique index id for identifying indexes in vylog
   instead of using space_id/index_id pair in v1. We still need
   a unique id, because during index rebuild (yet to be implemented),
   two indexes with the same space_id/index_id will coexist.
 - Do not use 'incarnation' counter for distinguishing different
   incarnations of the same index. Use LSN as before.

v1: https://www.freelists.org/post/tarantool-patches/PATCH-04-Prepare-vylog-for-space-alter

Vladimir Davydov (5):
  vinyl: refactor vylog recovery
  vinyl: rename vy_index::id to index_id
  vinyl: rename vy_log_record::index_id/space_id to
    index_def_id/space_def_id
  vinyl: do not use index lsn to identify indexes in vylog
  alter: rewrite space truncation using alter infrastructure

 src/box/alter.cc            | 107 +-------
 src/box/memtx_space.c       |  29 +-
 src/box/space.h             |  44 ----
 src/box/sysview_engine.c    |  17 --
 src/box/vinyl.c             | 611 +++++++++++++++---------------------------
 src/box/vy_index.c          | 416 +++++++++++++++--------------
 src/box/vy_index.h          |  36 +--
 src/box/vy_log.c            | 626 +++++++++++++++-----------------------------
 src/box/vy_log.h            | 282 ++++++++++++--------
 src/box/vy_point_lookup.c   |   2 +-
 src/box/vy_read_iterator.c  |   5 +-
 src/box/vy_scheduler.c      |  29 +-
 src/box/vy_tx.c             |   4 +-
 test/unit/vy_log_stub.c     |   8 +-
 test/unit/vy_point_lookup.c |   6 +-
 test/vinyl/layout.result    |  64 ++---
 16 files changed, 894 insertions(+), 1392 deletions(-)

-- 
2.11.0

             reply	other threads:[~2018-03-20 11:29 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-20 11:29 Vladimir Davydov [this message]
2018-03-20 11:29 ` [PATCH v2 1/5] vinyl: refactor vylog recovery Vladimir Davydov
2018-03-20 11:29 ` [PATCH v2 2/5] vinyl: rename vy_index::id to index_id Vladimir Davydov
2018-03-20 11:29 ` [PATCH v2 3/5] vinyl: rename vy_log_record::index_id/space_id to index_def_id/space_def_id Vladimir Davydov
2018-03-20 11:29 ` [PATCH v2 4/5] vinyl: do not use index lsn to identify indexes in vylog Vladimir Davydov
2018-03-22 15:08   ` Vladimir Davydov
2018-03-20 11:29 ` [PATCH v2 5/5] alter: rewrite space truncation using alter infrastructure 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.1521545062.git.vdavydov.dev@gmail.com \
    --to=vdavydov.dev@gmail.com \
    --cc=kostja@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='Re: [PATCH v2 0/5] Prepare vylog for space alter' \
    /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