diff --git a/src/box/engine.cc b/src/box/engine.cc index 88d3aaabaec471fa2000c21f08d7556142758f95..e2fafcd7d054adfd83f3a14c67c157a5dfcec509 100644 --- a/src/box/engine.cc +++ b/src/box/engine.cc @@ -96,18 +96,6 @@ engine_find(const char *name) tnt_raise(LoggedError, ER_NO_SUCH_ENGINE, name); } -EngineFactory * -engine_find_id(uint32_t id) -{ - EngineFactory *e; - rlist_foreach_entry(e, &engines, link) { - if (e->id == id) - return e; - } - assert(0); - return NULL; -} - /** Call a visitor function on every registered engine. */ void engine_foreach(void (*func)(EngineFactory *engine, void *udata), void *udata) diff --git a/src/box/engine.h b/src/box/engine.h index affabcd79660be46c3017f48d1ca8eadd1a16c38..a8a0773eaa459f122a0cb835ba70b3403866071a 100644 --- a/src/box/engine.h +++ b/src/box/engine.h @@ -179,9 +179,6 @@ void engine_foreach(void (*func)(EngineFactory *engine, void *udata), /** Find engine factory by name. */ EngineFactory *engine_find(const char *name); -/** Find engine factory by id. */ -EngineFactory *engine_find_id(uint32_t); - /** Shutdown all engine factories. */ void engine_shutdown(); diff --git a/src/box/lua/load_cfg.lua b/src/box/lua/load_cfg.lua index 2361194ad5765fd5b72c0b0a14b6b50ad8c4e3c2..80e7a2aa56f62f8ebce7b164ee56af467b2df2fc 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_merge_wm = 1 } -- all available options @@ -43,7 +43,7 @@ local default_cfg = { snap_dir = ".", wal_dir = ".", sophia_dir = './sophia', - sophia_options = default_sophia_cfg, + sophia = default_sophia_cfg, logger = nil, logger_nonblock = true, log_level = 5, @@ -79,7 +79,7 @@ local template = { snap_dir = 'string', wal_dir = 'string', sophia_dir = 'string', - sophia_options = 'table', + sophia = 'table', logger = 'string', logger_nonblock = 'boolean', log_level = 'number', diff --git a/src/box/request.cc b/src/box/request.cc index 5cf0bb9ed49c6c9e6129762b9c133ac81e015eaf..008a848cc6c9cd6c00768ec63ea238ab406516b6 100644 --- a/src/box/request.cc +++ b/src/box/request.cc @@ -51,9 +51,8 @@ dup_replace_mode(uint32_t op) static void execute_replace(struct request *request, struct port *port) { - struct txn *txn = txn_begin_stmt(request); struct space *space = space_cache_find(request->space_id); - txn_engine_begin_stmt(txn, space); + struct txn *txn = txn_begin_stmt(request, space); access_check_space(space, PRIV_W); struct tuple *new_tuple = tuple_new(space->format, request->tuple, @@ -69,9 +68,8 @@ execute_replace(struct request *request, struct port *port) static void execute_update(struct request *request, struct port *port) { - struct txn *txn = txn_begin_stmt(request); struct space *space = space_cache_find(request->space_id); - txn_engine_begin_stmt(txn, space); + struct txn *txn = txn_begin_stmt(request, space); access_check_space(space, PRIV_W); Index *pk = index_find(space, 0); @@ -102,9 +100,8 @@ execute_update(struct request *request, struct port *port) static void execute_delete(struct request *request, struct port *port) { - struct txn *txn = txn_begin_stmt(request); struct space *space = space_cache_find(request->space_id); - txn_engine_begin_stmt(txn, space); + struct txn *txn = txn_begin_stmt(request, space); access_check_space(space, PRIV_W); diff --git a/src/box/sophia_index.cc b/src/box/sophia_index.cc index 5e022e34da932ba939affe866b9c76a33536b672..c0a401590b77ad58df5b3bd6cd6d6379ceeab359 100644 --- a/src/box/sophia_index.cc +++ b/src/box/sophia_index.cc @@ -151,27 +151,27 @@ sophia_configure(struct space *space, struct key_def *key_def) snprintf(name, sizeof(name), "db.%" PRIu32 ".threads", key_def->space_id); - sp_set(c, name, cfg_gets("sophia_options.threads")); + 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_options.memory_limit")); + 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_options.node_size")); + 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_options.node_page_size")); + 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_options.node_branch_wm")); + 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_options.node_merge_wm")); + sp_set(c, name, cfg_gets("sophia.node_merge_wm")); snprintf(name, sizeof(name), "db.%" PRIu32 ".commit_lsn", key_def->space_id); diff --git a/src/box/txn.cc b/src/box/txn.cc index 25ade4a04c4b25a8e595c2d75495e10e9723ef63..4124db0e2b71b8cb3a49d481b7a7538d900c7cda 100644 --- a/src/box/txn.cc +++ b/src/box/txn.cc @@ -145,23 +145,11 @@ txn_begin(bool autocommit) rlist_nil, txn_on_yield_or_stop, NULL, NULL }; txn->autocommit = autocommit; - txn->engine = 0; fiber_set_txn(fiber(), txn); return txn; } -struct txn * -txn_begin_stmt(struct request *request) -{ - struct txn *txn = in_txn(); - if (txn == NULL) - txn = txn_begin(true); - struct txn_stmt *stmt = txn_stmt_new(txn); - txn_add_redo(stmt, request); - return txn; -} - -void +static void txn_engine_begin_stmt(struct txn *txn, struct space *space) { assert(txn->n_stmts >= 1); @@ -174,9 +162,10 @@ txn_engine_begin_stmt(struct txn *txn, struct space *space) */ EngineFactory *factory = space->engine->factory; if (txn->n_stmts == 1) { + /* First statement. */ txn->engine = factory; if (txn->autocommit == false) { - if (! engine_transactional(txn->engine->flags)) + if (! engine_transactional(factory->flags)) tnt_raise(ClientError, ER_UNSUPPORTED, space->def.engine_name, "transactions"); } @@ -188,6 +177,18 @@ txn_engine_begin_stmt(struct txn *txn, struct space *space) factory->begin_stmt(txn, space); } +struct txn * +txn_begin_stmt(struct request *request, struct space *space) +{ + struct txn *txn = in_txn(); + if (txn == NULL) + txn = txn_begin(true); + struct txn_stmt *stmt = txn_stmt_new(txn); + txn_add_redo(stmt, request); + txn_engine_begin_stmt(txn, space); + return txn; +} + void txn_commit_stmt(struct txn *txn, struct port *port) { @@ -260,7 +261,7 @@ txn_finish(struct txn *txn) * Void all effects of the statement, but * keep it in the list - to maintain * limit on the number of statements in a - * trasnaction. + * transaction. */ void txn_rollback_stmt() diff --git a/src/box/txn.h b/src/box/txn.h index 6477374ac8f468575308879473aa20e3e9b7d6b1..7786c4bc32f1d30649b01f8071fbd5249180bdf8 100644 --- a/src/box/txn.h +++ b/src/box/txn.h @@ -85,10 +85,7 @@ in_txn() * start a new transaction with autocommit = true. */ struct txn * -txn_begin_stmt(struct request *request); - -void -txn_engine_begin_stmt(struct txn *txn, struct space *space); +txn_begin_stmt(struct request *request, struct space *space); /** * End a statement. In autocommit mode, end diff --git a/test/app/float_value.result b/test/app/float_value.result index c3cfdb6c80f7d36870ddc5f0a736d81db0f93c16..1fb8840bcdb58351ebd29952c2f9e06e0a3b9129 100644 --- a/test/app/float_value.result +++ b/test/app/float_value.result @@ -5,21 +5,21 @@ box.cfg 4 rows_per_wal:50 5 background:false 6 logger:tarantool.log -7 slab_alloc_arena:0.1 -8 log_level:5 -9 listen:3313 -10 logger_nonblock:true -11 snap_dir:. -12 coredump:false -13 sophia_dir:./sophia -14 wal_mode:write +7 readahead:16320 +8 listen:3313 +9 logger_nonblock:true +10 snap_dir:. +11 coredump:false +12 sophia_dir:./sophia +13 wal_mode:write +14 snapshot_period:0 15 panic_on_snap_error:true 16 panic_on_wal_error:false -17 too_long_threshold:0.01 -18 slab_alloc_minimal:64 -19 wal_dir:. -20 readahead:16320 -21 snapshot_period:0 +17 log_level:5 +18 wal_dir:. +19 slab_alloc_minimal:64 +20 too_long_threshold:0.01 +21 slab_alloc_arena:0.1 22 wal_dir_rescan_delay:0.1 ------------------------------------------------------ Check that too_long_threshold = 0.01 diff --git a/test/app/init_script.result b/test/app/init_script.result index 321c3db21f233e79288fe4232befc003a183ddfa..abe6766933c451135cbdc287a94c3e7955be1c18 100644 --- a/test/app/init_script.result +++ b/test/app/init_script.result @@ -6,23 +6,23 @@ box.cfg 1 snapshot_count:6 2 pid_file:box.pid 3 slab_alloc_factor:2 -4 rows_per_wal:500000 +4 slab_alloc_minimal:64 5 background:false 6 logger:tarantool.log -7 slab_alloc_arena:0.1 -8 log_level:5 -9 listen:3314 -10 logger_nonblock:true -11 snap_dir:. -12 coredump:false -13 sophia_dir:./sophia -14 wal_mode:write +7 readahead:16320 +8 listen:3314 +9 logger_nonblock:true +10 snap_dir:. +11 coredump:false +12 sophia_dir:./sophia +13 wal_mode:write +14 slab_alloc_arena:0.1 15 panic_on_snap_error:true 16 panic_on_wal_error:false -17 too_long_threshold:0.5 -18 slab_alloc_minimal:64 +17 log_level:5 +18 rows_per_wal:500000 19 wal_dir:. -20 readahead:16320 +20 too_long_threshold:0.5 21 snapshot_period:0 22 wal_dir_rescan_delay:0.1 -- diff --git a/test/box/admin.result b/test/box/admin.result index 3208964bc6e622906ab1a035d68f5edf9217972b..a4a7d2ab0d204cf27d77d2ea50432159d2d86340 100644 --- a/test/box/admin.result +++ b/test/box/admin.result @@ -21,23 +21,30 @@ box.cfg - snapshot_count: 6 too_long_threshold: 0.5 slab_alloc_factor: 2 - rows_per_wal: 50 + slab_alloc_minimal: 64 background: false - slab_alloc_arena: 0.1 - log_level: 5 + readahead: 16320 + sophia: + node_page_size: 131072 + memory_limit: 0 + node_merge_wm: 1 + threads: 5 + node_size: 134217728 + node_branch_wm: 10485760 listen: <uri> logger_nonblock: true snap_dir: . coredump: false sophia_dir: ./sophia wal_mode: write + snapshot_period: 0 panic_on_snap_error: true panic_on_wal_error: false - pid_file: tarantool.pid - slab_alloc_minimal: 64 + log_level: 5 wal_dir: . - readahead: 16320 - snapshot_period: 0 + pid_file: tarantool.pid + rows_per_wal: 50 + slab_alloc_arena: 0.1 wal_dir_rescan_delay: 0.1 ... space:insert{1, 'tuple'} diff --git a/test/box/cfg.result b/test/box/cfg.result index ce03624ce7eb195407970d5ee360c6645df88888..ed75b2fb4395062ce21fd58f7701974a6c965afe 100644 --- a/test/box/cfg.result +++ b/test/box/cfg.result @@ -2,7 +2,7 @@ --# push filter 'admin: .*' to 'admin: <uri>' box.cfg.nosuchoption = 1 --- -- error: '[string "-- load_cfg.lua - internal file..."]:202: Attempt to modify a read-only +- error: '[string "-- load_cfg.lua - internal file..."]:213: Attempt to modify a read-only table' ... t = {} for k,v in pairs(box.cfg) do if type(v) ~= 'table' and type(v) ~= 'function' then table.insert(t, k..': '..tostring(v)) end end @@ -13,23 +13,23 @@ t - - 'snapshot_count: 6' - 'too_long_threshold: 0.5' - 'slab_alloc_factor: 2' - - 'rows_per_wal: 50' + - 'slab_alloc_minimal: 64' - 'background: false' - - 'slab_alloc_arena: 0.1' - - 'log_level: 5' + - 'readahead: 16320' - 'primary: <uri> - 'logger_nonblock: true' - 'snap_dir: .' - 'coredump: false' - 'sophia_dir: ./sophia' - 'wal_mode: write' + - 'snapshot_period: 0' - 'panic_on_snap_error: true' - 'panic_on_wal_error: false' - - 'pid_file: tarantool.pid' - - 'slab_alloc_minimal: 64' + - 'log_level: 5' - 'wal_dir: .' - - 'readahead: 16320' - - 'snapshot_period: 0' + - 'pid_file: tarantool.pid' + - 'rows_per_wal: 50' + - 'slab_alloc_arena: 0.1' - 'wal_dir_rescan_delay: 0.1' ... -- must be read-only @@ -44,45 +44,45 @@ t - - 'snapshot_count: 6' - 'too_long_threshold: 0.5' - 'slab_alloc_factor: 2' - - 'rows_per_wal: 50' + - 'slab_alloc_minimal: 64' - 'background: false' - - 'slab_alloc_arena: 0.1' - - 'log_level: 5' + - 'readahead: 16320' - 'primary: <uri> - 'logger_nonblock: true' - 'snap_dir: .' - 'coredump: false' - 'sophia_dir: ./sophia' - 'wal_mode: write' + - 'snapshot_period: 0' - 'panic_on_snap_error: true' - 'panic_on_wal_error: false' - - 'pid_file: tarantool.pid' - - 'slab_alloc_minimal: 64' + - 'log_level: 5' - 'wal_dir: .' - - 'readahead: 16320' - - 'snapshot_period: 0' + - 'pid_file: tarantool.pid' + - 'rows_per_wal: 50' + - 'slab_alloc_arena: 0.1' - 'wal_dir_rescan_delay: 0.1' ... -- check that cfg with unexpected parameter fails. box.cfg{sherlock = 'holmes'} --- -- error: '[string "-- load_cfg.lua - internal file..."]:122: Error: cfg parameter +- error: '[string "-- load_cfg.lua - internal file..."]:133: Error: cfg parameter ''sherlock'' is unexpected' ... -- check that cfg with unexpected type of parameter failes box.cfg{listen = {}} --- -- error: '[string "-- load_cfg.lua - internal file..."]:137: Error: cfg parameter +- error: '[string "-- load_cfg.lua - internal file..."]:148: Error: cfg parameter ''listen'' should be one of types: string, number' ... box.cfg{wal_dir = 0} --- -- error: '[string "-- load_cfg.lua - internal file..."]:131: Error: cfg parameter +- error: '[string "-- load_cfg.lua - internal file..."]:142: Error: cfg parameter ''wal_dir'' should be of type string' ... box.cfg{coredump = 'true'} --- -- error: '[string "-- load_cfg.lua - internal file..."]:131: Error: cfg parameter +- error: '[string "-- load_cfg.lua - internal file..."]:142: Error: cfg parameter ''coredump'' should be of type boolean' ... --# clear filter diff --git a/test/box/info.result b/test/box/info.result index 1d16a79083f05db0f50d3dfee0b0caf5509d3029..9225000bd21894e1cdf27e628e9dad45099817f5 100644 --- a/test/box/info.result +++ b/test/box/info.result @@ -82,6 +82,7 @@ t - recovery_last_update - server - snapshot_pid + - sophia - status - uptime - vclock diff --git a/test/sophia/box.lua b/test/sophia/box.lua index 93877d95414d7ad7ec0b524cbc00b33e7065c1ba..1b615c7c7f4a616422e76a75e7f5b5c037b0d7d3 100644 --- a/test/sophia/box.lua +++ b/test/sophia/box.lua @@ -1,7 +1,7 @@ #!/usr/bin/env tarantool os = require('os') -local sophia_options = { +local sophia = { memory_limit = 0, threads = 3, -- test case node_size = 134217728, @@ -16,7 +16,7 @@ box.cfg{ pid_file = "tarantool.pid", rows_per_wal = 50, sophia_dir = "sophia_test", - sophia_options = sophia_options + sophia = sophia } require('console').listen(os.getenv('ADMIN')) diff --git a/test/sophia/options.result b/test/sophia/options.result index 5720db35ce711be698cc57d65da7b30cb6963628..17b0b155d32dd000103c5ea31c2b287f594ca6cd 100644 --- a/test/sophia/options.result +++ b/test/sophia/options.result @@ -1,7 +1,7 @@ sophia_rmdir() --- ... -box.cfg.sophia_options +box.cfg.sophia --- - node_page_size: 131072 memory_limit: 0 @@ -10,7 +10,7 @@ box.cfg.sophia_options node_size: 134217728 node_branch_wm: 10485760 ... -box.cfg.sophia_options.threads = 3 +box.cfg.sophia.threads = 3 --- ... sophia_rmdir() diff --git a/test/sophia/options.test.lua b/test/sophia/options.test.lua index 91895ca613764da8354c7d7fa81a99a1d317c3a3..b2ee4139094d6098aff706b3d8dcfa1060483ceb 100644 --- a/test/sophia/options.test.lua +++ b/test/sophia/options.test.lua @@ -1,7 +1,7 @@ sophia_rmdir() -box.cfg.sophia_options -box.cfg.sophia_options.threads = 3 +box.cfg.sophia +box.cfg.sophia.threads = 3 sophia_rmdir()