[PATCH 2/3] vinyl: link all indexes of the same space
Vladimir Davydov
vdavydov.dev at gmail.com
Fri Jul 13 13:53:53 MSK 2018
After generating a deferred DELETE, we need to insert it into all
secondary indexes. Let's link all LSM trees of the same space into
a list so that we can iterate over secondary indexes of a space
given the primary index.
Needed for #2129
---
src/box/vinyl.c | 1 +
src/box/vy_lsm.c | 7 ++++++-
src/box/vy_lsm.h | 2 ++
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/box/vinyl.c b/src/box/vinyl.c
index 2d1a6fc0..ba875040 100644
--- a/src/box/vinyl.c
+++ b/src/box/vinyl.c
@@ -1148,6 +1148,7 @@ vinyl_space_swap_index(struct space *old_space, struct space *new_space,
SWAP(old_lsm->opts, new_lsm->opts);
key_def_swap(old_lsm->key_def, new_lsm->key_def);
key_def_swap(old_lsm->cmp_def, new_lsm->cmp_def);
+ rlist_swap(&old_lsm->list, &new_lsm->list);
/* Update pointer to the primary key. */
vy_lsm_update_pk(old_lsm, vy_lsm(old_space->index_map[0]));
diff --git a/src/box/vy_lsm.c b/src/box/vy_lsm.c
index cb3c436f..2e3e7947 100644
--- a/src/box/vy_lsm.c
+++ b/src/box/vy_lsm.c
@@ -194,8 +194,12 @@ vy_lsm_new(struct vy_lsm_env *lsm_env, struct vy_cache_env *cache_env,
vy_range_heap_create(&lsm->range_heap);
rlist_create(&lsm->runs);
lsm->pk = pk;
- if (pk != NULL)
+ if (pk != NULL) {
vy_lsm_ref(pk);
+ rlist_add_tail(&pk->list, &lsm->list);
+ } else {
+ rlist_create(&lsm->list);
+ }
lsm->mem_format = format;
tuple_format_ref(lsm->mem_format);
lsm->in_dump.pos = UINT32_MAX;
@@ -253,6 +257,7 @@ vy_lsm_delete(struct vy_lsm *lsm)
lsm->env->lsm_count--;
+ rlist_del(&lsm->list);
if (lsm->pk != NULL)
vy_lsm_unref(lsm->pk);
diff --git a/src/box/vy_lsm.h b/src/box/vy_lsm.h
index f0b7ec9c..9849e455 100644
--- a/src/box/vy_lsm.h
+++ b/src/box/vy_lsm.h
@@ -204,6 +204,8 @@ struct vy_lsm {
* by each secondary index.
*/
struct vy_lsm *pk;
+ /** List of all LSM trees of the same space. */
+ struct rlist list;
/** LSM tree statistics. */
struct vy_lsm_stat stat;
/**
--
2.11.0
More information about the Tarantool-patches
mailing list