From 0ec52cb9c19c9b7d9d69d29a23fec824e27b2adc Mon Sep 17 00:00:00 2001 From: Roman Tsisyk <roman@tsisyk.com> Date: Fri, 24 Oct 2014 17:11:27 +0400 Subject: [PATCH] Fix #605: scheme_fill.lua is broken --- extra/empty.snap | Bin 75 -> 227 bytes extra/schema_erase.lua | 36 +++++++++------ test/box/bootstrap.result | 91 +++++++++++++++++++++++++++++++++++++ test/box/bootstrap.test.py | 34 ++++++++++++++ 4 files changed, 148 insertions(+), 13 deletions(-) create mode 100644 test/box/bootstrap.result create mode 100644 test/box/bootstrap.test.py diff --git a/extra/empty.snap b/extra/empty.snap index 090233cf41eba4ac388176c20370673e5da3ae5d..3997fc8528c0be601a60bd590ddcbe847567cff8 100644 GIT binary patch literal 227 zcmWIca}3}z&@(jR3QjF5OD(ceNH#P{N;Wr4)lIQ5OwlzlHZ#>tGBdZ-H8wU*O)|1D zNHVra<_dGp$xqI<Qm8hxQZTZt<>I=!i+i;V!#RtU`zI_9fPf|jCT7MafpZKDi~@?2 zmM7<w7MG+J-Bd|5G)hXfOf}LqPqHx3HAyx|)U~uUGSE#mv@kO^Hcv@3N=^kCXUcGH b$H{zOWaF41#yKcXV!WwBj6<&qtbGdroKQp2 literal 75 zcmWIca}3}z&@(jR3QjF5OD(ceFiTCeNKHvh(={<PGSoG(G&k0@FiT3*O*FSmNl8kw eFtRW*;0klj$xqI<Qm8hxQZT6H;<_rZ_ALMeaTRU= diff --git a/extra/schema_erase.lua b/extra/schema_erase.lua index 56d773df5f..3593cbb1ae 100644 --- a/extra/schema_erase.lua +++ b/extra/schema_erase.lua @@ -6,21 +6,31 @@ _func = box.space[box.schema.FUNC_ID] _priv = box.space[box.schema.PRIV_ID] _cluster = box.space[box.schema.CLUSTER_ID] -- destroy everything - save snapshot produces an empty snapshot now -_schema:run_triggers(false) -_schema:truncate() + +-- space:truncate() doesn't work with disabled triggers on __index +local function truncate(space) + local pk = space.index[0] + while pk:len() > 0 do + local state, t + for state, t in pk:pairs() do + local key = {} + for _k2, parts in ipairs(pk.parts) do + table.insert(key, t[parts.fieldno]) + end + space:delete(key) + end + end +end + _space:run_triggers(false) -_space:truncate() _index:run_triggers(false) -_index:truncate() _user:run_triggers(false) -_user:truncate() _func:run_triggers(false) -_func:truncate() _priv:run_triggers(false) -_priv:truncate() -_cluster:run_triggers(false) --- select server id 1 - self -t = _cluster:get{1} -_cluster:truncate() --- preserve self-identification -_cluster:insert(t) + +truncate(_space) +truncate(_index) +truncate(_user) +truncate(_func) +truncate(_priv) +_schema:delete('version') diff --git a/test/box/bootstrap.result b/test/box/bootstrap.result new file mode 100644 index 0000000000..670fab9ff8 --- /dev/null +++ b/test/box/bootstrap.result @@ -0,0 +1,91 @@ +dofile("<builddir>/extra/schema_erase.lua") +--- +... +box.space._schema:select{} +--- +- - ['cluster', '<cluster uuid>'] +... +box.space._cluster:select{} +--- +- - [1, '<server uuid>'] +... +box.space._space:select{} +--- +- [] +... +box.space._index:select{} +--- +- [] +... +box.space._user:select{} +--- +- [] +... +box.space._func:select{} +--- +- [] +... +box.space._priv:select{} +--- +- [] +... +dofile("<builddir>/extra/schema_fill.lua") +--- +... +box.snapshot() +--- +- ok +... +box.space._schema:select{} +--- +- - ['cluster', '<cluster uuid>'] + - ['version', 1, 6] +... +box.space._cluster:select{} +--- +- - [1, '<server uuid>'] +... +box.space._space:select{} +--- +- - [272, 1, '_schema', 'memtx', 0] + - [280, 1, '_space', 'memtx', 0] + - [288, 1, '_index', 'memtx', 0] + - [296, 1, '_func', 'memtx', 0] + - [304, 1, '_user', 'memtx', 0] + - [312, 1, '_priv', 'memtx', 0] + - [320, 1, '_cluster', 'memtx', 0] +... +box.space._index:select{} +--- +- - [272, 0, 'primary', 'tree', 1, 1, 0, 'str'] + - [280, 0, 'primary', 'tree', 1, 1, 0, 'num'] + - [280, 1, 'owner', 'tree', 0, 1, 1, 'num'] + - [280, 2, 'name', 'tree', 1, 1, 2, 'str'] + - [288, 0, 'primary', 'tree', 1, 2, 0, 'num', 1, 'num'] + - [288, 2, 'name', 'tree', 1, 2, 0, 'num', 2, 'str'] + - [296, 0, 'primary', 'tree', 1, 1, 0, 'num'] + - [296, 1, 'owner', 'tree', 0, 1, 1, 'num'] + - [296, 2, 'name', 'tree', 1, 1, 2, 'str'] + - [304, 0, 'primary', 'tree', 1, 1, 0, 'num'] + - [304, 1, 'owner', 'tree', 0, 1, 1, 'num'] + - [304, 2, 'name', 'tree', 1, 1, 2, 'str'] + - [312, 0, 'primary', 'tree', 1, 3, 1, 'num', 2, 'str', 3, 'num'] + - [312, 1, 'owner', 'tree', 0, 1, 0, 'num'] + - [312, 2, 'object', 'tree', 0, 2, 2, 'str', 3, 'num'] + - [320, 0, 'primary', 'tree', 1, 1, 0, 'num'] + - [320, 1, 'uuid', 'tree', 1, 1, 1, 'str'] +... +box.space._user:select{} +--- +- - [0, 1, 'guest', 'user'] + - [1, 1, 'admin', 'user'] + - [2, 1, 'public', 'role'] +... +box.space._func:select{} +--- +- [] +... +box.space._priv:select{} +--- +- - [1, 1, 'universe', 0, 7] +... diff --git a/test/box/bootstrap.test.py b/test/box/bootstrap.test.py new file mode 100644 index 0000000000..ada352dbf0 --- /dev/null +++ b/test/box/bootstrap.test.py @@ -0,0 +1,34 @@ + +import sys +import yaml + +server_uuid = server.get_param('server')['uuid'] +sys.stdout.push_filter(server_uuid, '<server uuid>') +cluster_uuid = yaml.load(server.admin('box.space._schema:get("cluster")', + silent = True))[0][1] +sys.stdout.push_filter(cluster_uuid, '<cluster uuid>') +sys.stdout.push_filter(server.builddir, '<builddir>') + +server.admin('dofile("%s/extra/schema_erase.lua")' % server.builddir) +server.admin('box.space._schema:select{}') +server.admin('box.space._cluster:select{}') +server.admin('box.space._space:select{}') +server.admin('box.space._index:select{}') +server.admin('box.space._user:select{}') +server.admin('box.space._func:select{}') +server.admin('box.space._priv:select{}') + +server.admin('dofile("%s/extra/schema_fill.lua")' % server.builddir) +server.admin("box.snapshot()") +server.restart() + +server.admin('box.space._schema:select{}') +server.admin('box.space._cluster:select{}') +server.admin('box.space._space:select{}') +server.admin('box.space._index:select{}') +server.admin('box.space._user:select{}') +server.admin('box.space._func:select{}') +server.admin('box.space._priv:select{}') + +# Cleanup +sys.stdout.pop_filter() -- GitLab