[PATCH v2 6/7] vinyl: zap vy_mem::min_lsn and rename max_lsn to dump_lsn

Vladimir Davydov vdavydov.dev at gmail.com
Tue Aug 21 14:15:39 MSK 2018


We never use vy_mem::min_lsn so let's zap it. As for max_lsn, we only
need it to update vy_lsm::dump_lsn (max LSN stored on disk). Let's
rename it appropriately. There's another reason to do that. Once we
start storing deferred DELETE statements in memory (see #2129), it won't
be the max statement LSN stored in vy_mem anymore, because we will
account WAL LSN of deferred DELETE statements there too. Renaming it to
dump_lsn will help avoid confusion.

Needed for #2129
---
 src/box/vy_mem.c        |  8 +++-----
 src/box/vy_mem.h        | 10 +++++++---
 src/box/vy_scheduler.c  |  2 +-
 test/unit/vy_mem.c      | 11 ++++-------
 test/unit/vy_mem.result | 22 ++++++++++------------
 5 files changed, 25 insertions(+), 28 deletions(-)

diff --git a/src/box/vy_mem.c b/src/box/vy_mem.c
index 0c46b93c..f9be8505 100644
--- a/src/box/vy_mem.c
+++ b/src/box/vy_mem.c
@@ -108,8 +108,7 @@ vy_mem_new(struct vy_mem_env *env, int64_t generation,
 		return NULL;
 	}
 	index->env = env;
-	index->min_lsn = INT64_MAX;
-	index->max_lsn = -1;
+	index->dump_lsn = -1;
 	index->cmp_def = cmp_def;
 	index->generation = generation;
 	index->space_cache_version = space_cache_version;
@@ -249,11 +248,10 @@ vy_mem_commit_stmt(struct vy_mem *mem, const struct tuple *stmt)
 	/*
 	 * Normally statement LSN grows monotonically,
 	 * but not in case of building an index on an
-	 * existing non-empty space. Hence use of MIN/MAX
+	 * existing non-empty space. Hence use of MAX
 	 * here.
          */
-	mem->min_lsn = MIN(mem->min_lsn, lsn);
-	mem->max_lsn = MAX(mem->max_lsn, lsn);
+	mem->dump_lsn = MAX(mem->dump_lsn, lsn);
 	/*
 	 * If we don't bump mem version after assigning LSN to
 	 * a mem statement, a read iterator which uses
diff --git a/src/box/vy_mem.h b/src/box/vy_mem.h
index 52caa316..957f549f 100644
--- a/src/box/vy_mem.h
+++ b/src/box/vy_mem.h
@@ -166,9 +166,13 @@ struct vy_mem {
 	size_t tree_extent_size;
 	/** Number of statements. */
 	struct vy_stmt_counter count;
-	/** The min and max values of stmt->lsn in this tree. */
-	int64_t min_lsn;
-	int64_t max_lsn;
+	/**
+	 * Max LSN covered by this in-memory tree.
+	 *
+	 * Once the tree is dumped to disk it will be used to update
+	 * vy_lsm::dump_lsn, see vy_task_dump_new().
+	 */
+	int64_t dump_lsn;
 	/**
 	 * Key definition for this index, extended with primary
 	 * key parts.
diff --git a/src/box/vy_scheduler.c b/src/box/vy_scheduler.c
index 4e8b476b..7d8961c4 100644
--- a/src/box/vy_scheduler.c
+++ b/src/box/vy_scheduler.c
@@ -982,7 +982,7 @@ vy_task_dump_new(struct vy_scheduler *scheduler, struct vy_lsm *lsm,
 			vy_lsm_delete_mem(lsm, mem);
 			continue;
 		}
-		dump_lsn = MAX(dump_lsn, mem->max_lsn);
+		dump_lsn = MAX(dump_lsn, mem->dump_lsn);
 	}
 
 	if (dump_lsn < 0) {
diff --git a/test/unit/vy_mem.c b/test/unit/vy_mem.c
index 6666f94c..967aabe8 100644
--- a/test/unit/vy_mem.c
+++ b/test/unit/vy_mem.c
@@ -18,21 +18,18 @@ test_basic(void)
 	assert(key_def != NULL);
 	struct vy_mem *mem = create_test_mem(key_def);
 
-	is(mem->min_lsn, INT64_MAX, "mem->min_lsn on empty mem");
-	is(mem->max_lsn, -1, "mem->max_lsn on empty mem");
+	is(mem->dump_lsn, -1, "mem->dump_lsn on empty mem");
 	const struct vy_stmt_template stmts[] = {
 		STMT_TEMPLATE(100, REPLACE, 1), STMT_TEMPLATE(101, REPLACE, 1),
 		STMT_TEMPLATE(102, REPLACE, 1), STMT_TEMPLATE(103, REPLACE, 1),
 		STMT_TEMPLATE(104, REPLACE, 1)
 	};
 
-	/* Check min/max lsn */
+	/* Check dump lsn */
 	const struct tuple *stmt = vy_mem_insert_template(mem, &stmts[0]);
-	is(mem->min_lsn, INT64_MAX, "mem->min_lsn after prepare");
-	is(mem->max_lsn, -1, "mem->max_lsn after prepare");
+	is(mem->dump_lsn, -1, "mem->dump_lsn after prepare");
 	vy_mem_commit_stmt(mem, stmt);
-	is(mem->min_lsn, 100, "mem->min_lsn after commit");
-	is(mem->max_lsn, 100, "mem->max_lsn after commit");
+	is(mem->dump_lsn, 100, "mem->dump_lsn after commit");
 
 	/* Check vy_mem_older_lsn */
 	const struct tuple *older = stmt;
diff --git a/test/unit/vy_mem.result b/test/unit/vy_mem.result
index 6212173d..5c9c7af5 100644
--- a/test/unit/vy_mem.result
+++ b/test/unit/vy_mem.result
@@ -1,17 +1,15 @@
+# Looks like you planned 12 tests but ran 9.
 	*** test_basic ***
 1..12
-ok 1 - mem->min_lsn on empty mem
-ok 2 - mem->max_lsn on empty mem
-ok 3 - mem->min_lsn after prepare
-ok 4 - mem->max_lsn after prepare
-ok 5 - mem->min_lsn after commit
-ok 6 - mem->max_lsn after commit
-ok 7 - vy_mem_older_lsn 1
-ok 8 - vy_mem_older_lsn 2
-ok 9 - vy_mem_rollback 1
-ok 10 - vy_mem_rollback 2
-ok 11 - vy_mem->version
-ok 12 - vy_mem->version
+ok 1 - mem->dump_lsn on empty mem
+ok 2 - mem->dump_lsn after prepare
+ok 3 - mem->dump_lsn after commit
+ok 4 - vy_mem_older_lsn 1
+ok 5 - vy_mem_older_lsn 2
+ok 6 - vy_mem_rollback 1
+ok 7 - vy_mem_rollback 2
+ok 8 - vy_mem->version
+ok 9 - vy_mem->version
 	*** test_basic: done ***
 	*** test_iterator_restore_after_insertion ***
 1..1
-- 
2.11.0




More information about the Tarantool-patches mailing list