From 18e3463d2837b870aea1e36c3c7f918cec81f1b5 Mon Sep 17 00:00:00 2001
From: Vladimir Davydov <vdavydov.dev@gmail.com>
Date: Tue, 27 Jun 2017 20:04:56 +0300
Subject: [PATCH] vinyl: move index options from index.info to index.options

index.info() is supposed to show index stats, not options.
box.space.<space_name>.index.<index_name>.options looks like
a better place for reporting index options.

Needed for #1662
---
 src/box/lua/space.cc         | 27 +++++++++++++++++++++++++--
 src/box/vinyl.c              |  4 ----
 test/vinyl/coalesce.result   |  4 ++--
 test/vinyl/coalesce.test.lua |  4 ++--
 test/vinyl/ddl.result        | 14 +++++++-------
 test/vinyl/ddl.test.lua      | 14 +++++++-------
 test/vinyl/recover.result    |  4 ++--
 test/vinyl/recover.test.lua  |  4 ++--
 test/vinyl/split.result      |  4 ++--
 test/vinyl/split.test.lua    |  4 ++--
 10 files changed, 51 insertions(+), 32 deletions(-)

diff --git a/src/box/lua/space.cc b/src/box/lua/space.cc
index 604cee10c5..5c62e872ba 100644
--- a/src/box/lua/space.cc
+++ b/src/box/lua/space.cc
@@ -162,14 +162,15 @@ lbox_fillspace(struct lua_State *L, struct space *space, int i)
 		if (index == NULL)
 			continue;
 		struct index_def *index_def = index->index_def;
+		struct index_opts *index_opts = &index_def->opts;
 		lua_pushnumber(L, index_def->iid);
 		lua_newtable(L);		/* space.index[k] */
 
 		if (index_def->type == HASH || index_def->type == TREE) {
-			lua_pushboolean(L, index_def->opts.is_unique);
+			lua_pushboolean(L, index_opts->is_unique);
 			lua_setfield(L, -2, "unique");
 		} else if (index_def->type == RTREE) {
-			lua_pushnumber(L, index_def->opts.dimension);
+			lua_pushnumber(L, index_opts->dimension);
 			lua_setfield(L, -2, "dimension");
 		}
 
@@ -204,6 +205,28 @@ lbox_fillspace(struct lua_State *L, struct space *space, int i)
 
 		lua_settable(L, -3); /* space.index[k].parts */
 
+		if (space_is_vinyl(space)) {
+			lua_pushstring(L, "options");
+			lua_newtable(L);
+
+			lua_pushnumber(L, index_opts->range_size);
+			lua_setfield(L, -2, "range_size");
+
+			lua_pushnumber(L, index_opts->page_size);
+			lua_setfield(L, -2, "page_size");
+
+			lua_pushnumber(L, index_opts->run_count_per_level);
+			lua_setfield(L, -2, "run_count_per_level");
+
+			lua_pushnumber(L, index_opts->run_size_ratio);
+			lua_setfield(L, -2, "run_size_ratio");
+
+			lua_pushnumber(L, index_opts->bloom_fpr);
+			lua_setfield(L, -2, "bloom_fpr");
+
+			lua_settable(L, -3);
+		}
+
 		lua_settable(L, -3); /* space.index[k] */
 		lua_rawgeti(L, -1, index_def->iid);
 		lua_setfield(L, -2, index_def->name);
diff --git a/src/box/vinyl.c b/src/box/vinyl.c
index f2a9006bc5..a134657e6e 100644
--- a/src/box/vinyl.c
+++ b/src/box/vinyl.c
@@ -4589,10 +4589,6 @@ vy_index_info(struct vy_index *index, struct info_handler *h)
 	histogram_snprint(buf, sizeof(buf), index->run_hist);
 	info_append_str(h, "run_histogram", buf);
 
-	info_append_double(h, "bloom_fpr", index->opts.bloom_fpr);
-	info_append_int(h, "range_size", index->opts.range_size);
-	info_append_int(h, "page_size", index->opts.page_size);
-
 	info_end(h);
 }
 
diff --git a/test/vinyl/coalesce.result b/test/vinyl/coalesce.result
index a2778380ed..b6478d302b 100644
--- a/test/vinyl/coalesce.result
+++ b/test/vinyl/coalesce.result
@@ -16,7 +16,7 @@ function vyinfo() return box.space.test.index.primary:info() end
 range_count = 4
 ---
 ...
-tuple_size = math.ceil(vyinfo().page_size / 4)
+tuple_size = math.ceil(s.index.primary.options.page_size / 4)
 ---
 ...
 pad_size = tuple_size - 30
@@ -26,7 +26,7 @@ assert(pad_size >= 16)
 ---
 - true
 ...
-keys_per_range = math.floor(vyinfo().range_size / tuple_size)
+keys_per_range = math.floor(s.index.primary.options.range_size / tuple_size)
 ---
 ...
 key_count = range_count * keys_per_range
diff --git a/test/vinyl/coalesce.test.lua b/test/vinyl/coalesce.test.lua
index 04d6efe39b..c41e22702e 100644
--- a/test/vinyl/coalesce.test.lua
+++ b/test/vinyl/coalesce.test.lua
@@ -8,10 +8,10 @@ _ = s:create_index('primary', {unique=true, parts={1, 'unsigned'}, page_size=256
 function vyinfo() return box.space.test.index.primary:info() end
 
 range_count = 4
-tuple_size = math.ceil(vyinfo().page_size / 4)
+tuple_size = math.ceil(s.index.primary.options.page_size / 4)
 pad_size = tuple_size - 30
 assert(pad_size >= 16)
-keys_per_range = math.floor(vyinfo().range_size / tuple_size)
+keys_per_range = math.floor(s.index.primary.options.range_size / tuple_size)
 key_count = range_count * keys_per_range
 
 -- Rewrite the space until enough ranges are created.
diff --git a/test/vinyl/ddl.result b/test/vinyl/ddl.result
index 092a61c5a2..a1aab739e5 100644
--- a/test/vinyl/ddl.result
+++ b/test/vinyl/ddl.result
@@ -259,15 +259,15 @@ sec = space:create_index('sec', {bloom_fpr = 0.2})
 third = space:create_index('third', {bloom_fpr = 0.3})
 ---
 ...
-pk:info().bloom_fpr
+pk.options.bloom_fpr
 ---
 - 0.1
 ...
-sec:info().bloom_fpr
+sec.options.bloom_fpr
 ---
 - 0.2
 ...
-third:info().bloom_fpr
+third.options.bloom_fpr
 ---
 - 0.3
 ...
@@ -318,7 +318,7 @@ pk:info().disk.pages
 ---
 - 4
 ...
-pk:info().page_size
+space.index.pk.options.page_size
 ---
 - 8192
 ...
@@ -326,7 +326,7 @@ pk:info().run_count
 ---
 - 1
 ...
-pk:info().bloom_fpr
+space.index.pk.options.bloom_fpr
 ---
 - 0.1
 ...
@@ -365,7 +365,7 @@ pk:info().disk.pages
 ---
 - 6
 ...
-pk:info().page_size
+space.index.pk.options.page_size
 ---
 - 16384
 ...
@@ -373,7 +373,7 @@ pk:info().run_count
 ---
 - 1
 ...
-pk:info().bloom_fpr
+space.index.pk.options.bloom_fpr
 ---
 - 0.2
 ...
diff --git a/test/vinyl/ddl.test.lua b/test/vinyl/ddl.test.lua
index 752b22eff6..1808f38bcb 100644
--- a/test/vinyl/ddl.test.lua
+++ b/test/vinyl/ddl.test.lua
@@ -103,9 +103,9 @@ space = box.schema.space.create('test', {engine='vinyl'})
 pk = space:create_index('pk', {bloom_fpr = 0.1})
 sec = space:create_index('sec', {bloom_fpr = 0.2})
 third = space:create_index('third', {bloom_fpr = 0.3})
-pk:info().bloom_fpr
-sec:info().bloom_fpr
-third:info().bloom_fpr
+pk.options.bloom_fpr
+sec.options.bloom_fpr
+third.options.bloom_fpr
 space:drop()
 
 --
@@ -128,9 +128,9 @@ for i = 1, 20 do space:replace{i, pad} end
 est_bsize = pad_size * 20
 box.snapshot()
 pk:info().disk.pages
-pk:info().page_size
+space.index.pk.options.page_size
 pk:info().run_count
-pk:info().bloom_fpr
+space.index.pk.options.bloom_fpr
 
 -- Change page_size and trigger compaction
 page_size = page_size * 2
@@ -145,9 +145,9 @@ box.snapshot()
 -- Wait for compaction
 while pk:info().run_count ~= 1 do fiber.sleep(0.01) end
 pk:info().disk.pages
-pk:info().page_size
+space.index.pk.options.page_size
 pk:info().run_count
-pk:info().bloom_fpr
+space.index.pk.options.bloom_fpr
 est_bsize / page_size == pk:info().disk.pages
 space:drop()
 
diff --git a/test/vinyl/recover.result b/test/vinyl/recover.result
index c6142ef80a..4c3325bf22 100644
--- a/test/vinyl/recover.result
+++ b/test/vinyl/recover.result
@@ -26,7 +26,7 @@ function vyinfo() return box.space.test.index.primary:info() end
 range_count = 4
 ---
 ...
-tuple_size = math.ceil(vyinfo().page_size / 4)
+tuple_size = math.ceil(s.index.primary.options.page_size / 4)
 ---
 ...
 pad_size = tuple_size - 30
@@ -36,7 +36,7 @@ assert(pad_size >= 16)
 ---
 - true
 ...
-keys_per_range = math.floor(vyinfo().range_size / tuple_size)
+keys_per_range = math.floor(s.index.primary.options.range_size / tuple_size)
 ---
 ...
 key_count = range_count * keys_per_range
diff --git a/test/vinyl/recover.test.lua b/test/vinyl/recover.test.lua
index 046b016c20..e88563535e 100644
--- a/test/vinyl/recover.test.lua
+++ b/test/vinyl/recover.test.lua
@@ -14,10 +14,10 @@ _ = s:create_index('primary', {page_size=256, range_size=2048, run_count_per_lev
 function vyinfo() return box.space.test.index.primary:info() end
 
 range_count = 4
-tuple_size = math.ceil(vyinfo().page_size / 4)
+tuple_size = math.ceil(s.index.primary.options.page_size / 4)
 pad_size = tuple_size - 30
 assert(pad_size >= 16)
-keys_per_range = math.floor(vyinfo().range_size / tuple_size)
+keys_per_range = math.floor(s.index.primary.options.range_size / tuple_size)
 key_count = range_count * keys_per_range
 
 -- Add a number of tuples to the test space to trigger range splitting.
diff --git a/test/vinyl/split.result b/test/vinyl/split.result
index 25ed1615aa..222d49ae4c 100644
--- a/test/vinyl/split.result
+++ b/test/vinyl/split.result
@@ -13,10 +13,10 @@ _= space:create_index('primary', { parts = { 1, 'unsigned' }, run_count_per_leve
 function vyinfo() return space.index.primary:info() end
 ---
 ...
-range_size = vyinfo().range_size
+range_size = space.index.primary.options.range_size
 ---
 ...
-tuple_size = vyinfo().page_size / 2
+tuple_size = space.index.primary.options.page_size / 2
 ---
 ...
 tuples_per_range = math.ceil(range_size / tuple_size + 1)
diff --git a/test/vinyl/split.test.lua b/test/vinyl/split.test.lua
index 18ba9bb1c8..6f2d8e1402 100644
--- a/test/vinyl/split.test.lua
+++ b/test/vinyl/split.test.lua
@@ -6,8 +6,8 @@ _= space:create_index('primary', { parts = { 1, 'unsigned' }, run_count_per_leve
 
 function vyinfo() return space.index.primary:info() end
 
-range_size = vyinfo().range_size
-tuple_size = vyinfo().page_size / 2
+range_size = space.index.primary.options.range_size
+tuple_size = space.index.primary.options.page_size / 2
 tuples_per_range = math.ceil(range_size / tuple_size + 1)
 
 test_run:cmd("setopt delimiter ';'")
-- 
GitLab