commit e4f024d5923f17fea55f06030635bf8a5675aee1 from: Sergey Bronnikov date: Wed Jun 01 05:16:44 2022 UTC rename entrypoint commit - 261e6fe247dd29637a91fa302b72daab99589f22 commit + e4f024d5923f17fea55f06030635bf8a5675aee1 blob - 71178ecb1a2b070125d571550b54f6087a9c12ca (mode 755) blob + /dev/null --- test/entrypoint/srv-basic.lua +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/env tarantool - -local workdir = os.getenv('TARANTOOL_WORKDIR') -local listen = os.getenv('TARANTOOL_LISTEN') -local qsync_quorum = os.getenv('TARANTOOL_QUORUM') -local qsync_peers = os.getenv('TARANTOOL_PEERS') - -box.cfg({ - feedback_enabled = false, - listen = listen, - log_level = 6, - memtx_memory = 1024 * 1024 * 1024, - net_msg_max = 2 * 1024, - work_dir = workdir, - iproto_threads = 2, -}) - -if qsync_peers and qsync_quorum then - box.cfg.election_mode = 'candidate' - box.cfg.election_timeout = 0.5 - box.cfg.memtx_use_mvcc_engine = true - box.cfg.replication_synchro_quorum = qsync_quorum - box.cfg.replication_synchro_timeout = 0.2 - box.cfg.replication = { qsync_peers } - box.cfg.replication_timeout = 1 -end - -local function bootstrap() - local space = box.schema.space.create('register_space') - space:format({ - { name = 'id', type = 'number' }, - { name = 'value', type = 'number' }, - }) - space:create_index('pk', {type = 'HASH'}) - - space = box.schema.space.create('bank_space') - space:format({ - { name = 'id', type = 'number' }, - { name = 'balance', type = 'number' }, - }) - space:create_index('pk', {type = 'HASH'}) - - box.schema.user.grant('guest', 'create,read,write,execute,drop', 'universe') - box.schema.user.grant('guest', 'read,write', 'space', '_index') - box.schema.user.grant('guest', 'write', 'space', '_schema') - box.schema.user.grant('guest', 'write', 'space', '_space') -end - -box.once('molly', bootstrap) - --- Function implements a CAS (Compare And Set) operation, which takes a key, --- old value, and new value and sets the key to the new value if and only if --- the old value matches what's currently there, and returns a status of --- operation and old value in case of fail and a new value in case of success. -function cas(space_name, tuple_id, old_value, new_value) -- luacheck: no global - local space = box.space[space_name] - box.begin() - local tuple = space:get{tuple_id} - if not tuple or tuple.value ~= old_value then - box.commit() - return old_value, false - end - tuple = space:update(tuple_id, {{'=', 2, new_value}}, {timeout = 0.05}) - box.commit() - assert(tuple ~= nil) - - return tuple.value, true -end - --- Function returns IP address of the node where current leader of synchronous --- cluster with enabled Raft consensus protocol is started. --- Returns nil when Raft is disabled and a string otherwise. -function leader_ipaddr() -- luacheck: no global - local leader_id = box.info.election.leader - if leader_id == 0 or leader_id == nil then - return nil - end - local leader_upstream = box.info.replication[leader_id].upstream - if leader_upstream == nil then - return string.match(box.info.listen, '(.+):[0-9]+') - end - local leader_ip_address = string.match(leader_upstream.peer, '[A-z]+@(.+):[0-9]+') - - return leader_ip_address -end - --- Function transfers money between two accounts presented by tuples in a table --- and returns true in case of success and false in other cases. -function withdraw(space_name, tuple_id_source, tuple_id_dest, amount) -- luacheck: no global - local space = box.space[space_name] - - box.begin() - local tuple_source = space:get(tuple_id_source) - local tuple_dest = space:get(tuple_id_dest) - local b1 = tuple_source['balance'] - amount - local b2 = tuple_dest['balance'] + amount - if b1 < 0 or b2 < 0 then - box.rollback() - return false - end - space:update(tuple_id_source, {{'-', 'balance', amount}}) - space:update(tuple_id_dest, {{'+', 'balance', amount}}) - box.commit() - - return true -end - --- Function transfers money between two accounts presented by different tables --- and returns true in case of success and false in other cases. -function withdraw_multitable(space_name_source, space_name_dest, amount) -- luacheck: no global - local space_source = box.space[space_name_source] - local space_dest = box.space[space_name_dest] - local tuple_id = 0 - - box.begin() - local tuple_source = space_source:get(tuple_id) - local tuple_dest = space_dest:get(tuple_id) - local bal_source = tuple_source['balance'] - amount - local bal_dest = tuple_dest['balance'] + amount - if bal_source < 0 or bal_dest < 0 then - box.rollback() - return false - end - space_source:update(tuple_id, {{'-', 'balance', amount}}) - space_dest:update(tuple_id, {{'+', 'balance', amount}}) - box.commit() - - return true -end blob - /dev/null blob + 71178ecb1a2b070125d571550b54f6087a9c12ca (mode 755) --- /dev/null +++ test/entrypoint/srv-tarantool.lua @@ -0,0 +1,129 @@ +#!/usr/bin/env tarantool + +local workdir = os.getenv('TARANTOOL_WORKDIR') +local listen = os.getenv('TARANTOOL_LISTEN') +local qsync_quorum = os.getenv('TARANTOOL_QUORUM') +local qsync_peers = os.getenv('TARANTOOL_PEERS') + +box.cfg({ + feedback_enabled = false, + listen = listen, + log_level = 6, + memtx_memory = 1024 * 1024 * 1024, + net_msg_max = 2 * 1024, + work_dir = workdir, + iproto_threads = 2, +}) + +if qsync_peers and qsync_quorum then + box.cfg.election_mode = 'candidate' + box.cfg.election_timeout = 0.5 + box.cfg.memtx_use_mvcc_engine = true + box.cfg.replication_synchro_quorum = qsync_quorum + box.cfg.replication_synchro_timeout = 0.2 + box.cfg.replication = { qsync_peers } + box.cfg.replication_timeout = 1 +end + +local function bootstrap() + local space = box.schema.space.create('register_space') + space:format({ + { name = 'id', type = 'number' }, + { name = 'value', type = 'number' }, + }) + space:create_index('pk', {type = 'HASH'}) + + space = box.schema.space.create('bank_space') + space:format({ + { name = 'id', type = 'number' }, + { name = 'balance', type = 'number' }, + }) + space:create_index('pk', {type = 'HASH'}) + + box.schema.user.grant('guest', 'create,read,write,execute,drop', 'universe') + box.schema.user.grant('guest', 'read,write', 'space', '_index') + box.schema.user.grant('guest', 'write', 'space', '_schema') + box.schema.user.grant('guest', 'write', 'space', '_space') +end + +box.once('molly', bootstrap) + +-- Function implements a CAS (Compare And Set) operation, which takes a key, +-- old value, and new value and sets the key to the new value if and only if +-- the old value matches what's currently there, and returns a status of +-- operation and old value in case of fail and a new value in case of success. +function cas(space_name, tuple_id, old_value, new_value) -- luacheck: no global + local space = box.space[space_name] + box.begin() + local tuple = space:get{tuple_id} + if not tuple or tuple.value ~= old_value then + box.commit() + return old_value, false + end + tuple = space:update(tuple_id, {{'=', 2, new_value}}, {timeout = 0.05}) + box.commit() + assert(tuple ~= nil) + + return tuple.value, true +end + +-- Function returns IP address of the node where current leader of synchronous +-- cluster with enabled Raft consensus protocol is started. +-- Returns nil when Raft is disabled and a string otherwise. +function leader_ipaddr() -- luacheck: no global + local leader_id = box.info.election.leader + if leader_id == 0 or leader_id == nil then + return nil + end + local leader_upstream = box.info.replication[leader_id].upstream + if leader_upstream == nil then + return string.match(box.info.listen, '(.+):[0-9]+') + end + local leader_ip_address = string.match(leader_upstream.peer, '[A-z]+@(.+):[0-9]+') + + return leader_ip_address +end + +-- Function transfers money between two accounts presented by tuples in a table +-- and returns true in case of success and false in other cases. +function withdraw(space_name, tuple_id_source, tuple_id_dest, amount) -- luacheck: no global + local space = box.space[space_name] + + box.begin() + local tuple_source = space:get(tuple_id_source) + local tuple_dest = space:get(tuple_id_dest) + local b1 = tuple_source['balance'] - amount + local b2 = tuple_dest['balance'] + amount + if b1 < 0 or b2 < 0 then + box.rollback() + return false + end + space:update(tuple_id_source, {{'-', 'balance', amount}}) + space:update(tuple_id_dest, {{'+', 'balance', amount}}) + box.commit() + + return true +end + +-- Function transfers money between two accounts presented by different tables +-- and returns true in case of success and false in other cases. +function withdraw_multitable(space_name_source, space_name_dest, amount) -- luacheck: no global + local space_source = box.space[space_name_source] + local space_dest = box.space[space_name_dest] + local tuple_id = 0 + + box.begin() + local tuple_source = space_source:get(tuple_id) + local tuple_dest = space_dest:get(tuple_id) + local bal_source = tuple_source['balance'] - amount + local bal_dest = tuple_dest['balance'] + amount + if bal_source < 0 or bal_dest < 0 then + box.rollback() + return false + end + space_source:update(tuple_id, {{'-', 'balance', amount}}) + space_dest:update(tuple_id, {{'+', 'balance', amount}}) + box.commit() + + return true +end blob - 2bb8aee00f9a1b161108116af9151966d515221a blob + 587913dd3286e8cf244720d4ae15bba79e8b0365 --- test/tarantool/tarantool_test.lua +++ test/tarantool/tarantool_test.lua @@ -28,7 +28,7 @@ print(('Random seed: %s'):format(seed)) local datadir = fio.tempdir() local server = Server:new({ - command = helpers.entrypoint('srv-basic'), + command = helpers.entrypoint('srv-tarantool'), workdir = fio.pathjoin(datadir), net_box_port = 3301, })