[PATCH 00/12] vinyl: do not fill secondary tuples with nulls

Vladimir Davydov vdavydov.dev at gmail.com
Thu Feb 21 13:26:00 MSK 2019


The goal of this patch set is to teach vinyl operate on key statements
like on regular tuples so that we can avoid filling tuples read from
secondary index runs with nulls (aka tuple surrogate). This is required
to implement multikey indexes in vinyl.

The first seven patches are preparatory - they do some cleanup that
stand on the way and can probably be applied even if the rest of the
patch set is rejected. The real work is done by the last 5 patches,
which should be reviewed with scrutiny. I'm far not sure this is the
right way to go, but I've failed to find a better solution so far.

https://github.com/tarantool/tarantool/commits/dv/vy-dont-store-nulls-in-sk

Vladimir Davydov (12):
  vinyl: use vy_lsm_env::empty_key where appropriate
  vinyl: make vy_tuple_delete static
  key_def: cleanup virtual function initialization
  key_def: move cmp and hash functions declarations to key_def.h
  vinyl: move vy_tuple_key_contains_null to generic code
  vinyl: move vy_key_dup to generic code
  vinyl: sanitize full/empty key stmt detection
  vinyl: remove optimized comparators
  vinyl: introduce statement environment
  vinyl: rename key stmt construction routine
  vinyl: don't use IPROTO_SELECT type for key statements
  vinyl: do not fill secondary tuples with nulls when decoded

 src/box/key_def.c               |  52 ++++++--
 src/box/key_def.h               |  97 ++++++++++++++
 src/box/memtx_hash.c            |   1 -
 src/box/sql/analyze.c           |   1 -
 src/box/tuple.c                 |  15 +++
 src/box/tuple.h                 |   9 ++
 src/box/tuple_bloom.c           |  65 +++++++---
 src/box/tuple_bloom.h           |  15 +++
 src/box/tuple_compare.cc        |  35 ++++-
 src/box/tuple_compare.h         |  34 +----
 src/box/tuple_extract_key.cc    |  18 ++-
 src/box/tuple_extract_key.h     |   2 +-
 src/box/tuple_hash.cc           |   1 +
 src/box/tuple_hash.h            |  58 +--------
 src/box/vinyl.c                 | 118 ++++++++---------
 src/box/vy_cache.c              |  22 ++--
 src/box/vy_cache.h              |   2 +-
 src/box/vy_lsm.c                |  80 ++++++------
 src/box/vy_lsm.h                |   8 +-
 src/box/vy_mem.c                |  17 ++-
 src/box/vy_mem.h                |   2 +-
 src/box/vy_point_lookup.c       |   5 +-
 src/box/vy_range.c              |  18 ++-
 src/box/vy_read_iterator.c      |  28 ++--
 src/box/vy_read_set.c           |  18 +--
 src/box/vy_run.c                | 135 +++++++++++---------
 src/box/vy_scheduler.c          |   6 +-
 src/box/vy_stmt.c               | 121 +++++++++---------
 src/box/vy_stmt.h               | 277 ++++++++++++++++------------------------
 src/box/vy_tx.c                 |  20 ++-
 src/box/vy_tx.h                 |   4 +-
 src/box/vy_upsert.c             |   2 +-
 src/box/vy_write_iterator.c     |   2 +-
 test/unit/vy_iterators_helper.c |  23 +---
 test/unit/vy_iterators_helper.h |   3 +-
 test/unit/vy_mem.c              |   8 +-
 test/unit/vy_point_lookup.c     |   9 +-
 37 files changed, 730 insertions(+), 601 deletions(-)

-- 
2.11.0




More information about the Tarantool-patches mailing list