From 1a5e2f1693af9c72de2317ba31f9013eba0108e0 Mon Sep 17 00:00:00 2001
From: Dmitry Simonenko <pmwkaa@gmail.com>
Date: Wed, 26 Nov 2014 20:02:51 +0400
Subject: [PATCH] sophia: update master to the latest sophia changes (macosx
 build)

---
 src/box/engine_sophia.cc         | 10 +++++
 src/box/lua/load_cfg.lua         | 12 ++---
 src/box/sophia_index.cc          | 76 ++++++++------------------------
 test/sophia/box.lua              | 40 +++++++++--------
 test/sophia/crud.result          |  7 ---
 test/sophia/crud.test.lua        |  6 ---
 test/sophia/dml.result           |  6 ---
 test/sophia/dml.test.lua         |  4 --
 test/sophia/gh.result            |  6 ---
 test/sophia/gh.test.lua          |  4 --
 test/sophia/info.result          |  8 +---
 test/sophia/info.test.lua        |  7 +--
 test/sophia/options.result       |  8 +---
 test/sophia/options.test.lua     |  4 --
 test/sophia/recover.result       |  6 ---
 test/sophia/recover.test.lua     |  4 --
 test/sophia/transaction.result   |  6 ---
 test/sophia/transaction.test.lua |  4 --
 third_party/sophia               |  2 +-
 19 files changed, 60 insertions(+), 160 deletions(-)

diff --git a/src/box/engine_sophia.cc b/src/box/engine_sophia.cc
index b69e0d8fed..db4655752c 100644
--- a/src/box/engine_sophia.cc
+++ b/src/box/engine_sophia.cc
@@ -124,6 +124,16 @@ SophiaFactory::init()
 	env = sp_env();
 	if (env == NULL)
 		panic("failed to create sophia environment");
+	void *c = sp_ctl(env);
+	sp_set(c, "sophia.path", cfg_gets("sophia_dir"));
+	sp_set(c, "scheduler.threads", cfg_gets("sophia.threads"));
+	sp_set(c, "memory.limit", cfg_gets("sophia.memory_limit"));
+	sp_set(c, "compaction.node_size", cfg_gets("sophia.node_size"));
+	sp_set(c, "compaction.node_branch_wm", cfg_gets("sophia.node_branch_wm"));
+	sp_set(c, "compaction.node_compact_wm", cfg_gets("sophia.node_compact_wm"));
+	sp_set(c, "log.enable", "0");
+	sp_set(c, "log.two_phase_recover", "1");
+	sp_set(c, "log.commit_lsn", "1");
 	int rc = sp_open(env);
 	if (rc == -1)
 		sophia_raise(env);
diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua
index 80e7a2aa56..029acb276f 100644
--- a/src/box/lua/load_cfg.lua
+++ b/src/box/lua/load_cfg.lua
@@ -25,12 +25,12 @@ local wrapper_cfg = {
 }
 
 local default_sophia_cfg = {
-    memory_limit   = 0,
-    threads        = 5,
-    node_size      = 134217728,
-    node_page_size = 131072,
-    node_branch_wm = 10485760,
-    node_merge_wm  = 1
+    memory_limit    = 0,
+    threads         = 5,
+    node_size       = 134217728,
+    node_page_size  = 131072,
+    node_branch_wm  = 10485760,
+    node_compact_wm = 1
 }
 
 -- all available options
diff --git a/src/box/sophia_index.cc b/src/box/sophia_index.cc
index c0a401590b..8ec12ac135 100644
--- a/src/box/sophia_index.cc
+++ b/src/box/sophia_index.cc
@@ -129,66 +129,16 @@ sophia_configure(struct space *space, struct key_def *key_def)
 		(SophiaFactory*)space->engine->factory;
 	void *env = factory->env;
 	void *c = sp_ctl(env);
-
-	const char *sophia_dir = cfg_gets("sophia_dir");
-	mkdir(sophia_dir, 0755);
-
-	const char *on = "1";
-	char path[PATH_MAX];
 	char name[128];
-	snprintf(path, sizeof(path), "%s/%" PRIu32,
-	         sophia_dir, key_def->space_id);
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".dir",
-	         key_def->space_id);
-	sp_set(c, name, path);
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".cmp",
+	snprintf(name, sizeof(name), "db.%" PRIu32, key_def->space_id);
+	sp_set(c, name);
+	snprintf(name, sizeof(name), "db.%" PRIu32 ".index.cmp",
 	         key_def->space_id);
 	sp_set(c, name, sophia_index_compare);
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".cmp_arg",
+	snprintf(name, sizeof(name), "db.%" PRIu32 ".index.cmp_arg",
 	         key_def->space_id);
 	sp_set(c, name, key_def);
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".threads",
-	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia.threads"));
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".memory_limit",
-	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia.memory_limit"));
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_size",
-	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia.node_size"));
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_page_size",
-	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia.node_page_size"));
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_branch_wm",
-	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia.node_branch_wm"));
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".node_merge_wm",
-	         key_def->space_id);
-	sp_set(c, name, cfg_gets("sophia.node_merge_wm"));
-
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".commit_lsn",
-	         key_def->space_id);
-	sp_set(c, name, on);
-
-	engine_recovery *r = &space->engine->recovery;
-	if (r->recover != space_noop) {
-		/* start two-phase recovery for a space:
-		 * a. created after snapshot recovery
-		 * b. created during log recovery
-		*/
-		snprintf(name, sizeof(name), "db.%" PRIu32 ".two_phase_recover",
-				 key_def->space_id);
-		sp_set(c, name, on);
-	}
-	snprintf(name, sizeof(name), "db.%" PRIu32,
-	         key_def->space_id);
+	snprintf(name, sizeof(name), "db.%" PRIu32, key_def->space_id);
 	void *db = sp_get(c, name);
 	if (db == NULL)
 		sophia_raise(env);
@@ -205,9 +155,21 @@ SophiaIndex::SophiaIndex(struct key_def *key_def_arg __attribute__((unused)))
 	db = sophia_configure(space, key_def);
 	if (db == NULL)
 		sophia_raise(env);
+	/* start two-phase recovery for a space:
+	 * a. created after snapshot recovery
+	 * b. created during log recovery
+	*/
 	int rc = sp_open(db);
 	if (rc == -1)
 		sophia_raise(env);
+	/* auto-complete any space created
+	 * after recovery */
+	engine_recovery *r = &factory->recovery;
+	if (r->recover == space_noop) {
+		rc = sp_open(db);
+		if (rc == -1)
+			sophia_raise(env);
+	}
 	tuple_format_ref(space->format, 1);
 }
 
@@ -270,7 +232,7 @@ SophiaIndex::size() const
 {
 	void *c = sp_ctl(env);
 	char name[128];
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".profiler.index_count",
+	snprintf(name, sizeof(name), "db.%" PRIu32 ".index.count",
 	         key_def->space_id);
 	void *o = sp_get(c, name);
 	if (o == NULL)
@@ -285,7 +247,7 @@ SophiaIndex::memsize() const
 {
 	void *c = sp_ctl(env);
 	char name[128];
-	snprintf(name, sizeof(name), "db.%" PRIu32 ".profiler.index_memory_used",
+	snprintf(name, sizeof(name), "db.%" PRIu32 ".index.memory_used",
 	         key_def->space_id);
 	void *o = sp_get(c, name);
 	if (o == NULL)
diff --git a/test/sophia/box.lua b/test/sophia/box.lua
index 1b615c7c7f..4fb8af9dfe 100644
--- a/test/sophia/box.lua
+++ b/test/sophia/box.lua
@@ -1,33 +1,35 @@
 #!/usr/bin/env tarantool
 os = require('os')
 
+function sophia_printdir()
+	f = io.popen("ls -1 sophia_test")
+	ls = f:read("*all")
+	unused = f:close()
+	return ls
+end
+
+function sophia_rmdir(dir)
+	os.execute("rm -rf sophia_test")
+end
+
+sophia_rmdir()
+
 local sophia = {
-	memory_limit   = 0,
-	threads        = 3, -- test case
-	node_size      = 134217728,
-	node_page_size = 131072,
-	node_branch_wm = 10485760,
-    node_merge_wm  = 1
+	memory_limit    = 0,
+	threads         = 3, -- test case
+	node_size       = 134217728,
+	node_page_size  = 131072,
+	node_branch_wm  = 10485760,
+	node_compact_wm = 1
 }
 
-box.cfg{
+box.cfg {
     listen           = os.getenv("LISTEN"),
     slab_alloc_arena = 0.1,
     pid_file         = "tarantool.pid",
     rows_per_wal     = 50,
     sophia_dir       = "sophia_test",
-    sophia   = sophia
+    sophia           = sophia
 }
 
 require('console').listen(os.getenv('ADMIN'))
-
-function sophia_printdir()
-	f = io.popen("ls -1 sophia_test")
-	ls = f:read("*all")
-	unused = f:close()
-	return ls
-end
-
-function sophia_rmdir(dir)
-	os.execute("rm -rf sophia_test")
-end
diff --git a/test/sophia/crud.result b/test/sophia/crud.result
index 4ebfdc36ff..548a312a5e 100644
--- a/test/sophia/crud.result
+++ b/test/sophia/crud.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 -- insert
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
 ---
@@ -1172,7 +1169,3 @@ index_random_test(space, 'primary')
 space:drop()
 ---
 ...
---
-sophia_rmdir()
----
-...
diff --git a/test/sophia/crud.test.lua b/test/sophia/crud.test.lua
index 39109a25e4..fea140c1ae 100644
--- a/test/sophia/crud.test.lua
+++ b/test/sophia/crud.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 -- insert
 
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
@@ -49,7 +47,3 @@ dofile('index_random_test.lua')
 index_random_test(space, 'primary')
 
 space:drop()
-
---
-
-sophia_rmdir()
diff --git a/test/sophia/dml.result b/test/sophia/dml.result
index b2a433a257..10ce0b15df 100644
--- a/test/sophia/dml.result
+++ b/test/sophia/dml.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 -- space create/drop
 space = box.schema.create_space('test', { id = 100, engine = 'sophia' })
 ---
@@ -166,6 +163,3 @@ primary:len()
 space:drop()
 ---
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/dml.test.lua b/test/sophia/dml.test.lua
index ebd6ce8f64..6f5531674d 100644
--- a/test/sophia/dml.test.lua
+++ b/test/sophia/dml.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 -- space create/drop
 
 space = box.schema.create_space('test', { id = 100, engine = 'sophia' })
@@ -67,5 +65,3 @@ space:insert({14})
 space:insert({15})
 primary:len()
 space:drop()
-
-sophia_rmdir()
diff --git a/test/sophia/gh.result b/test/sophia/gh.result
index f1a3315a7e..45d9befc9f 100644
--- a/test/sophia/gh.result
+++ b/test/sophia/gh.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 -- gh-283: Sophia: hang after three creates and drops
 s = box.schema.create_space('space0', {id = 33, engine='sophia'})
 ---
@@ -150,6 +147,3 @@ box.space['name_of_space']:select{'a'}
 s:drop()
 ---
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/gh.test.lua b/test/sophia/gh.test.lua
index 239385dc2d..01763075f1 100644
--- a/test/sophia/gh.test.lua
+++ b/test/sophia/gh.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 -- gh-283: Sophia: hang after three creates and drops
 
 s = box.schema.create_space('space0', {id = 33, engine='sophia'})
@@ -61,5 +59,3 @@ box.space['name_of_space']:select{'a'}
 box.space['name_of_space']:truncate()
 box.space['name_of_space']:select{'a'}
 s:drop()
-
-sophia_rmdir()
diff --git a/test/sophia/info.result b/test/sophia/info.result
index 24c4379dfc..b8a3baaa1f 100644
--- a/test/sophia/info.result
+++ b/test/sophia/info.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 box.info().sophia['sophia.version']
 ---
 - '1.2'
@@ -14,13 +11,10 @@ index = space:create_index('primary', { type = 'tree', parts = {1, 'num'} })
 for key = 1, 10 do space:insert({key}) end
 ---
 ...
-box.info().sophia['db.100.profiler.index_count']
+box.info().sophia['db.100.index.count']
 ---
 - '10'
 ...
 space:drop()
 ---
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/info.test.lua b/test/sophia/info.test.lua
index d287afa0e4..c1c7958aea 100644
--- a/test/sophia/info.test.lua
+++ b/test/sophia/info.test.lua
@@ -1,6 +1,3 @@
-
-sophia_rmdir()
-
 box.info().sophia['sophia.version']
 
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
@@ -8,8 +5,6 @@ index = space:create_index('primary', { type = 'tree', parts = {1, 'num'} })
 
 for key = 1, 10 do space:insert({key}) end
 
-box.info().sophia['db.100.profiler.index_count']
+box.info().sophia['db.100.index.count']
 
 space:drop()
-
-sophia_rmdir()
diff --git a/test/sophia/options.result b/test/sophia/options.result
index 17b0b155d3..364bf947b9 100644
--- a/test/sophia/options.result
+++ b/test/sophia/options.result
@@ -1,11 +1,8 @@
-sophia_rmdir()
----
-...
 box.cfg.sophia
 ---
 - node_page_size: 131072
   memory_limit: 0
-  node_merge_wm: 1
+  node_compact_wm: 1
   threads: 3
   node_size: 134217728
   node_branch_wm: 10485760
@@ -13,6 +10,3 @@ box.cfg.sophia
 box.cfg.sophia.threads = 3
 ---
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/options.test.lua b/test/sophia/options.test.lua
index b2ee413909..29ec8612ed 100644
--- a/test/sophia/options.test.lua
+++ b/test/sophia/options.test.lua
@@ -1,7 +1,3 @@
 
-sophia_rmdir()
-
 box.cfg.sophia
 box.cfg.sophia.threads = 3
-
-sophia_rmdir()
diff --git a/test/sophia/recover.result b/test/sophia/recover.result
index f162a55644..0a57cc5854 100644
--- a/test/sophia/recover.result
+++ b/test/sophia/recover.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 -- snapshot
 space = box.schema.create_space('test', { id = 100, engine = 'sophia' })
 ---
@@ -25,6 +22,3 @@ box.snapshot()
 ---
 - ok
 ...
-sophia_rmdir()
----
-...
diff --git a/test/sophia/recover.test.lua b/test/sophia/recover.test.lua
index a62d2172d1..c8814c2f45 100644
--- a/test/sophia/recover.test.lua
+++ b/test/sophia/recover.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 -- snapshot
 
 space = box.schema.create_space('test', { id = 100, engine = 'sophia' })
@@ -9,5 +7,3 @@ sophia_printdir()
 box.snapshot()
 space:drop()
 box.snapshot()
-
-sophia_rmdir()
diff --git a/test/sophia/transaction.result b/test/sophia/transaction.result
index b92ce261e2..e3b4641567 100644
--- a/test/sophia/transaction.result
+++ b/test/sophia/transaction.result
@@ -1,6 +1,3 @@
-sophia_rmdir()
----
-...
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
 ---
 ...
@@ -143,6 +140,3 @@ space:drop()
 ---
 ...
 --
-sophia_rmdir()
----
-...
diff --git a/test/sophia/transaction.test.lua b/test/sophia/transaction.test.lua
index b4f7d088fa..c3b176a0c2 100644
--- a/test/sophia/transaction.test.lua
+++ b/test/sophia/transaction.test.lua
@@ -1,6 +1,4 @@
 
-sophia_rmdir()
-
 space = box.schema.create_space('test', { engine = 'sophia', id = 100 })
 index = space:create_index('primary', { type = 'tree', parts = {1, 'num'} })
 
@@ -56,5 +54,3 @@ space_tmp:drop()
 space:drop()
 
 --
-
-sophia_rmdir()
diff --git a/third_party/sophia b/third_party/sophia
index 3009d85f61..f8c64b4dcd 160000
--- a/third_party/sophia
+++ b/third_party/sophia
@@ -1 +1 @@
-Subproject commit 3009d85f61c9d3a3b834d37f0a92eada6a3d68ff
+Subproject commit f8c64b4dcd0967470f94a15b010751ba614b271a
-- 
GitLab