diff --git a/src/box/engine_sophia.cc b/src/box/engine_sophia.cc index b69e0d8fedd8a76a5c788a2219202ecfba8dcf08..db4655752c05e9591952ca0d0dfc1922512fc094 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 80e7a2aa56f62f8ebce7b164ee56af467b2df2fc..029acb276f773ac486e2f163bc63fbdf0a41aca3 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 c0a401590b77ad58df5b3bd6cd6d6379ceeab359..8ec12ac13511bfbc2edb63fa6d4a2178e8811e2f 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 1b615c7c7f4a616422e76a75e7f5b5c037b0d7d3..4fb8af9dfefc937c4b466150b186a5987683505f 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 4ebfdc36ff12cccb294848e0d1c5481e2c8abec3..548a312a5ee65233f69274ddbd5d1b9644038d79 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 39109a25e48094d52724d325c6ebf47b1c0a8c2f..fea140c1aecf7857ff59579b42c6858066a1c4ed 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 b2a433a2571623120f6daedbbeb28d52ff0fcc1f..10ce0b15df4f81cad172509f06bbb3d889346707 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 ebd6ce8f64b14953e547ec2bdb6b49d56ad6b80e..6f5531674d61d1676627f0e0fac990a50e58ea6e 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 f1a3315a7e5423f2c984bae76eb253541200c479..45d9befc9f2e0487f9cdc1d24aeb611a652cf1dd 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 239385dc2dcf4ee224785952fc719cb0c82efc65..01763075f1905afb6ec9a0602580f7cf667b932d 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 24c4379dfcc1f872f931f11fb1130cc530ce802c..b8a3baaa1ff6bf8db2e6009d55a1d1bc88753be4 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 d287afa0e451c93b226df563805c15e27f30e0d8..c1c7958aeaa38a45cdb5878e9a86f32ff96f3ee9 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 17b0b155d32dd000103c5ea31c2b287f594ca6cd..364bf947b954cfc9ebac0eb4b1cea4b307470310 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 b2ee4139094d6098aff706b3d8dcfa1060483ceb..29ec8612ed8b606334f058f37bbdeb3dbb2c8434 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 f162a5564482678cc81f37a577fafe153222d831..0a57cc5854c043e7b60589919f5c755f032b659a 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 a62d2172d1b95d3f41221d51bd19d070eee185bd..c8814c2f45798c411e392bf75e54bd64149a11fa 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 b92ce261e22895eb3bd74406cf57ad8b56ff1daf..e3b464156750c3cbd7ed664843cf9bff3f20d145 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 b4f7d088fa455186cad5d4d92964ac96473064bb..c3b176a0c217115415548d4df95d6b66dedb9e12 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 3009d85f61c9d3a3b834d37f0a92eada6a3d68ff..f8c64b4dcd0967470f94a15b010751ba614b271a 160000 --- a/third_party/sophia +++ b/third_party/sophia @@ -1 +1 @@ -Subproject commit 3009d85f61c9d3a3b834d37f0a92eada6a3d68ff +Subproject commit f8c64b4dcd0967470f94a15b010751ba614b271a