* [Tarantool-patches] [PATCH 3/3] upgrade: fix generated sequence upgrade from 2.1
2020-02-17 20:57 [Tarantool-patches] [PATCH 0/3] Fix upgrade from 2.1 sequence Vladislav Shpilevoy
2020-02-17 20:57 ` [Tarantool-patches] [PATCH 1/3] upgrade: add missing sys triggers off and erasure Vladislav Shpilevoy
2020-02-17 20:57 ` [Tarantool-patches] [PATCH 2/3] box: forbid to update/replace _space_sequence Vladislav Shpilevoy
@ 2020-02-17 20:57 ` Vladislav Shpilevoy
2020-02-21 15:42 ` Nikita Pettik
2020-02-24 19:48 ` [Tarantool-patches] [PATCH 0/3] Fix upgrade from 2.1 sequence Kirill Yukhin
3 siblings, 1 reply; 11+ messages in thread
From: Vladislav Shpilevoy @ 2020-02-17 20:57 UTC (permalink / raw)
To: tarantool-patches, alexander.turenko, korablev
The bug was in an attempt to update a record in _space_sequence
in-place, to add field path and number. This was not properly
supported by the system space's trigger, and was banned in the
previous patch of this series.
But delete + tuple update + insert work fine. The patch uses them.
To test it the old disabled and heavily outdated
xlog/upgrade.test.lua was replaced with a smaller analogue, which
is supposed to be created separately for each upgrade bug.
According to the new policy of creating test files.
The patch tries to make it easy to add new upgrade tests and
snapshots. A new test should consist of fill.lua script to
populate spaces, snapshot, needed xlogs, and a .test.lua file.
Fill script and binaries should be in the same folder as test file
name, which is located in version folder. Like this:
xlog/
|
+ <test_name>.test.lua
|
+- upgrade/
|
+- <version>/
| |
| +-<test_name>/
| |
| +- fill.lua
| +- *.snap
| +- *.xlog
Version is supposed to say explicitly what a version files in
there have.
Closes #4771
---
src/box/lua/upgrade.lua | 7 +-
test/xlog/gh-4771-upgrade.result | 78 ++++++
test/xlog/gh-4771-upgrade.test.lua | 24 ++
test/xlog/suite.cfg | 5 -
test/xlog/suite.ini | 3 +-
test/xlog/upgrade.result | 265 ------------------
test/xlog/upgrade.test.lua | 46 ---
.../00000000000000000014.snap | Bin 0 -> 4622 bytes
.../2.1.3/gh-4771-upgrade-sequence/fill.lua | 14 +
9 files changed, 123 insertions(+), 319 deletions(-)
create mode 100644 test/xlog/gh-4771-upgrade.result
create mode 100644 test/xlog/gh-4771-upgrade.test.lua
delete mode 100644 test/xlog/suite.cfg
delete mode 100644 test/xlog/upgrade.result
delete mode 100644 test/xlog/upgrade.test.lua
create mode 100644 test/xlog/upgrade/2.1.3/gh-4771-upgrade-sequence/00000000000000000014.snap
create mode 100644 test/xlog/upgrade/2.1.3/gh-4771-upgrade-sequence/fill.lua
diff --git a/src/box/lua/upgrade.lua b/src/box/lua/upgrade.lua
index bd28c1001..4e23aa448 100644
--- a/src/box/lua/upgrade.lua
+++ b/src/box/lua/upgrade.lua
@@ -760,7 +760,12 @@ local function upgrade_sequence_to_2_2_1()
local part = pk[6][1]
local field = part.field or part[1]
local path = part.path or ''
- _space_sequence:update(v[1], {{'!', 4, field}, {'!', 5, path}})
+ local t = _space_sequence:get(v[1])
+ -- Update in-place is banned due to complexity of its
+ -- handling. Delete + insert still work.
+ t = t:update({{'!', 4, field}, {'!', 5, path}})
+ _space_sequence:delete({v[1]})
+ _space_sequence:insert(t)
::continue::
end
local format = _space_sequence:format()
diff --git a/test/xlog/gh-4771-upgrade.result b/test/xlog/gh-4771-upgrade.result
new file mode 100644
index 000000000..032ed993a
--- /dev/null
+++ b/test/xlog/gh-4771-upgrade.result
@@ -0,0 +1,78 @@
+-- test-run result file version 2
+test_run = require('test_run').new()
+ | ---
+ | ...
+
+test_run:cmd('create server upgrade with script="xlog/upgrade.lua", '.. \
+ 'workdir="xlog/upgrade/2.1.3/gh-4771-upgrade-sequence"')
+ | ---
+ | - true
+ | ...
+test_run:cmd('start server upgrade')
+ | ---
+ | - true
+ | ...
+test_run:switch('upgrade')
+ | ---
+ | - true
+ | ...
+
+box.schema.upgrade()
+ | ---
+ | ...
+
+s = box.space.test1
+ | ---
+ | ...
+box.space._sequence:select{}
+ | ---
+ | - - [1, 1, 'test1_seq', 1, 1, 9223372036854775807, 1, 0, false]
+ | - [2, 1, 'seq2', 1, 1, 9223372036854775807, 1, 0, false]
+ | - [3, 1, 'seq3', 1, 1, 9223372036854775807, 1, 0, false]
+ | ...
+box.space._sequence_data:select{}
+ | ---
+ | - - [1, 1]
+ | - [2, 1]
+ | - [3, 1]
+ | ...
+box.space._space_sequence:select{}
+ | ---
+ | - - [512, 1, true, 0, '']
+ | - [513, 2, false, 0, '']
+ | ...
+s:select{}
+ | ---
+ | - - [1]
+ | ...
+_ = s:replace{box.NULL}
+ | ---
+ | ...
+s:select{}
+ | ---
+ | - - [1]
+ | - [2]
+ | ...
+
+box.space.test2:select{}
+ | ---
+ | - - [1]
+ | ...
+
+box.sequence.seq3:next()
+ | ---
+ | - 2
+ | ...
+
+test_run:switch('default')
+ | ---
+ | - true
+ | ...
+test_run:cmd('stop server upgrade')
+ | ---
+ | - true
+ | ...
+test_run:cmd('delete server upgrade')
+ | ---
+ | - true
+ | ...
diff --git a/test/xlog/gh-4771-upgrade.test.lua b/test/xlog/gh-4771-upgrade.test.lua
new file mode 100644
index 000000000..52334404e
--- /dev/null
+++ b/test/xlog/gh-4771-upgrade.test.lua
@@ -0,0 +1,24 @@
+test_run = require('test_run').new()
+
+test_run:cmd('create server upgrade with script="xlog/upgrade.lua", '.. \
+ 'workdir="xlog/upgrade/2.1.3/gh-4771-upgrade-sequence"')
+test_run:cmd('start server upgrade')
+test_run:switch('upgrade')
+
+box.schema.upgrade()
+
+s = box.space.test1
+box.space._sequence:select{}
+box.space._sequence_data:select{}
+box.space._space_sequence:select{}
+s:select{}
+_ = s:replace{box.NULL}
+s:select{}
+
+box.space.test2:select{}
+
+box.sequence.seq3:next()
+
+test_run:switch('default')
+test_run:cmd('stop server upgrade')
+test_run:cmd('delete server upgrade')
diff --git a/test/xlog/suite.cfg b/test/xlog/suite.cfg
deleted file mode 100644
index c33a80ce9..000000000
--- a/test/xlog/suite.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "upgrade.test.lua": {
- "1.7.7": {"version": "1.7.7"}
- }
-}
diff --git a/test/xlog/suite.ini b/test/xlog/suite.ini
index 689d2b871..635ec53c1 100644
--- a/test/xlog/suite.ini
+++ b/test/xlog/suite.ini
@@ -2,10 +2,9 @@
core = tarantool
description = tarantool write ahead log tests
script = xlog.lua
-disabled = snap_io_rate.test.lua upgrade.test.lua
+disabled = snap_io_rate.test.lua
valgrind_disabled =
release_disabled = errinj.test.lua panic_on_lsn_gap.test.lua panic_on_broken_lsn.test.lua checkpoint_threshold.test.lua
-config = suite.cfg
use_unix_sockets = True
use_unix_sockets_iproto = True
long_run = snap_io_rate.test.lua
diff --git a/test/xlog/upgrade.result b/test/xlog/upgrade.result
deleted file mode 100644
index f64b12d7e..000000000
--- a/test/xlog/upgrade.result
+++ /dev/null
@@ -1,265 +0,0 @@
-test_run = require('test_run').new()
----
-...
-version = test_run:get_cfg('version')
----
-...
-work_dir = "xlog/upgrade/"..version
----
-...
-test_run:cmd('create server upgrade with script="xlog/upgrade.lua", workdir="'..work_dir..'"')
----
-- true
-...
-test_run:cmd("start server upgrade")
----
-- true
-...
-test_run:switch('upgrade')
----
-- true
-...
-test_run:cmd(string.format("push filter '%s' to '<server_uuid>'", box.info.cluster.uuid))
----
-- true
-...
---
--- Upgrade
---
-box.schema.upgrade()
----
-...
---
--- Migrated data
---
-box.space._schema:select()
----
-- - ['cluster', '<server_uuid>']
- - ['max_id', 513]
- - ['version', 2, 1, 0]
-...
-box.space._space:select()
----
-- - [257, 1, '_vinyl_deferred_delete', 'blackhole', 0, {'group_id': 1}, [{'name': 'space_id',
- 'type': 'unsigned'}, {'name': 'lsn', 'type': 'unsigned'}, {'name': 'tuple',
- 'type': 'array'}]]
- - [272, 1, '_schema', 'memtx', 0, {}, [{'type': 'string', 'name': 'key'}]]
- - [276, 1, '_collation', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {
- 'name': 'name', 'type': 'string'}, {'name': 'owner', 'type': 'unsigned'},
- {'name': 'type', 'type': 'string'}, {'name': 'locale', 'type': 'string'}, {
- 'name': 'opts', 'type': 'map'}]]
- - [280, 1, '_space', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner',
- 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine',
- 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags',
- 'type': 'map'}, {'name': 'format', 'type': 'array'}]]
- - [281, 1, '_vspace', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner',
- 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'engine',
- 'type': 'string'}, {'name': 'field_count', 'type': 'unsigned'}, {'name': 'flags',
- 'type': 'map'}, {'name': 'format', 'type': 'array'}]]
- - [284, 1, '_sequence', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner',
- 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'step',
- 'type': 'integer'}, {'name': 'min', 'type': 'integer'}, {'name': 'max', 'type': 'integer'},
- {'name': 'start', 'type': 'integer'}, {'name': 'cache', 'type': 'integer'},
- {'name': 'cycle', 'type': 'boolean'}]]
- - [285, 1, '_sequence_data', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'},
- {'name': 'value', 'type': 'integer'}]]
- - [286, 1, '_vsequence', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'},
- {'name': 'owner', 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {
- 'name': 'step', 'type': 'integer'}, {'name': 'min', 'type': 'integer'}, {
- 'name': 'max', 'type': 'integer'}, {'name': 'start', 'type': 'integer'}, {
- 'name': 'cache', 'type': 'integer'}, {'name': 'cycle', 'type': 'boolean'}]]
- - [288, 1, '_index', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'iid',
- 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'type',
- 'type': 'string'}, {'name': 'opts', 'type': 'map'}, {'name': 'parts', 'type': 'array'}]]
- - [289, 1, '_vindex', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'iid',
- 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'type',
- 'type': 'string'}, {'name': 'opts', 'type': 'map'}, {'name': 'parts', 'type': 'array'}]]
- - [296, 1, '_func', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner',
- 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'setuid',
- 'type': 'unsigned'}]]
- - [297, 1, '_vfunc', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner',
- 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'setuid',
- 'type': 'unsigned'}]]
- - [304, 1, '_user', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner',
- 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'type',
- 'type': 'string'}, {'name': 'auth', 'type': 'map'}]]
- - [305, 1, '_vuser', 'sysview', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'owner',
- 'type': 'unsigned'}, {'name': 'name', 'type': 'string'}, {'name': 'type',
- 'type': 'string'}, {'name': 'auth', 'type': 'map'}]]
- - [312, 1, '_priv', 'memtx', 0, {}, [{'name': 'grantor', 'type': 'unsigned'}, {
- 'name': 'grantee', 'type': 'unsigned'}, {'name': 'object_type', 'type': 'string'},
- {'name': 'object_id', 'type': 'scalar'}, {'name': 'privilege', 'type': 'unsigned'}]]
- - [313, 1, '_vpriv', 'sysview', 0, {}, [{'name': 'grantor', 'type': 'unsigned'},
- {'name': 'grantee', 'type': 'unsigned'}, {'name': 'object_type', 'type': 'string'},
- {'name': 'object_id', 'type': 'scalar'}, {'name': 'privilege', 'type': 'unsigned'}]]
- - [320, 1, '_cluster', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'uuid',
- 'type': 'string'}]]
- - [328, 1, '_trigger', 'memtx', 0, {}, [{'name': 'name', 'type': 'string'}, {'name': 'opts',
- 'type': 'map'}]]
- - [330, 1, '_truncate', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'}, {'name': 'count',
- 'type': 'unsigned'}]]
- - [340, 1, '_space_sequence', 'memtx', 0, {}, [{'name': 'id', 'type': 'unsigned'},
- {'name': 'sequence_id', 'type': 'unsigned'}, {'name': 'is_generated', 'type': 'boolean'}]]
- - [348, 1, '_sql_stat1', 'memtx', 0, {}, [{'name': 'tbl', 'type': 'string'}, {'name': 'idx',
- 'type': 'string'}, {'name': 'stat', 'type': 'string'}]]
- - [349, 1, '_sql_stat4', 'memtx', 0, {}, [{'name': 'tbl', 'type': 'string'}, {'name': 'idx',
- 'type': 'string'}, {'name': 'neq', 'type': 'string'}, {'name': 'nlt', 'type': 'string'},
- {'name': 'ndlt', 'type': 'string'}, {'name': 'sample', 'type': 'scalar'}]]
- - [512, 1, 'distro', 'memtx', 0, {}, [{'name': 'os', 'type': 'str'}, {'name': 'dist',
- 'type': 'str'}, {'name': 'version', 'type': 'num'}, {'name': 'time', 'type': 'num'}]]
- - [513, 1, 'temporary', 'memtx', 0, {'temporary': true}, []]
-...
-box.space._index:select()
----
-- - [272, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]]
- - [276, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [276, 1, 'name', 'tree', {'unique': true}, [[1, 'string']]]
- - [280, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [280, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]]
- - [280, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]]
- - [281, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [281, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]]
- - [281, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]]
- - [284, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [284, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]]
- - [284, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]]
- - [285, 0, 'primary', 'hash', {'unique': true}, [[0, 'unsigned']]]
- - [286, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [286, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]]
- - [286, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]]
- - [288, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned'], [1, 'unsigned']]]
- - [288, 2, 'name', 'tree', {'unique': true}, [[0, 'unsigned'], [2, 'string']]]
- - [289, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned'], [1, 'unsigned']]]
- - [289, 2, 'name', 'tree', {'unique': true}, [[0, 'unsigned'], [2, 'string']]]
- - [296, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [296, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]]
- - [296, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]]
- - [297, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [297, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]]
- - [297, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]]
- - [304, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [304, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]]
- - [304, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]]
- - [305, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [305, 1, 'owner', 'tree', {'unique': false}, [[1, 'unsigned']]]
- - [305, 2, 'name', 'tree', {'unique': true}, [[2, 'string']]]
- - [312, 0, 'primary', 'tree', {'unique': true}, [[1, 'unsigned'], [2, 'string'],
- [3, 'scalar']]]
- - [312, 1, 'owner', 'tree', {'unique': false}, [[0, 'unsigned']]]
- - [312, 2, 'object', 'tree', {'unique': false}, [[2, 'string'], [3, 'scalar']]]
- - [313, 0, 'primary', 'tree', {'unique': true}, [[1, 'unsigned'], [2, 'string'],
- [3, 'scalar']]]
- - [313, 1, 'owner', 'tree', {'unique': false}, [[0, 'unsigned']]]
- - [313, 2, 'object', 'tree', {'unique': false}, [[2, 'string'], [3, 'scalar']]]
- - [320, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [320, 1, 'uuid', 'tree', {'unique': true}, [[1, 'string']]]
- - [328, 0, 'primary', 'tree', {'unique': true}, [[0, 'string']]]
- - [330, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [340, 0, 'primary', 'tree', {'unique': true}, [[0, 'unsigned']]]
- - [340, 1, 'sequence', 'tree', {'unique': false}, [[1, 'unsigned']]]
- - [348, 0, 'primary', 'tree', {'unique': true}, [[0, 'string'], [1, 'string']]]
- - [349, 0, 'primary', 'tree', {'unique': true}, [[0, 'string'], [1, 'string'], [
- 5, 'scalar']]]
- - [512, 0, 'primary', 'hash', {'unique': true}, [[0, 'string'], [1, 'string'], [
- 2, 'unsigned']]]
- - [512, 1, 'codename', 'hash', {'unique': true}, [[1, 'string']]]
- - [512, 2, 'time', 'tree', {'unique': false}, [[3, 'unsigned']]]
-...
-box.space._user:select()
----
-- - [0, 1, 'guest', 'user', {'chap-sha1': 'vhvewKp0tNyweZQ+cFKAlsyphfg='}]
- - [1, 1, 'admin', 'user', {}]
- - [2, 1, 'public', 'role', {}]
- - [3, 1, 'replication', 'role', {}]
- - [31, 1, 'super', 'role', {}]
- - [32, 1, 'someuser', 'user', {'chap-sha1': '2qvbQIHM4zMWhAmm2xGeGNjqoHM='}]
- - [33, 1, 'somerole', 'role', {}]
-...
-box.space._func:select()
----
-- - [1, 1, 'box.schema.user.info', 1, 'LUA']
- - [2, 32, 'somefunc', 1, 'LUA']
- - [3, 1, 'someotherfunc', 0, 'LUA']
-...
-box.space._collation:select()
----
-- - [1, 'unicode', 1, 'ICU', '', {}]
- - [2, 'unicode_ci', 1, 'ICU', '', {'strength': 'primary'}]
-...
-box.space._priv:select()
----
-- - [1, 0, 'role', 2, 4]
- - [1, 0, 'universe', 0, 24]
- - [1, 1, 'universe', 0, 4294967295]
- - [1, 2, 'function', 1, 4]
- - [1, 2, 'function', 2, 4]
- - [1, 2, 'space', 276, 2]
- - [1, 2, 'space', 281, 1]
- - [1, 2, 'space', 286, 1]
- - [1, 2, 'space', 289, 1]
- - [1, 2, 'space', 297, 1]
- - [1, 2, 'space', 305, 1]
- - [1, 2, 'space', 313, 1]
- - [1, 2, 'space', 330, 2]
- - [1, 3, 'space', 320, 2]
- - [1, 3, 'universe', 0, 1]
- - [1, 31, 'universe', 0, 4294967295]
- - [1, 32, 'function', 3, 4]
- - [1, 32, 'role', 2, 4]
- - [1, 32, 'role', 33, 4]
- - [1, 32, 'space', 513, 3]
- - [1, 32, 'universe', 0, 24]
- - [1, 33, 'space', 512, 3]
-...
-box.space._vspace ~= nil
----
-- true
-...
-box.space._vindex ~= nil
----
-- true
-...
-box.space._vuser ~= nil
----
-- true
-...
-box.space._vpriv ~= nil
----
-- true
-...
--- a test space
-r = box.space.distro:select()
----
-...
-_ = table.sort(r, function(left, right) return tostring(left) < tostring(right) end)
----
-...
-r
----
-- - ['debian', 'etch', 40, 1176019200]
- - ['debian', 'jessie', 80, 1430038800]
- - ['debian', 'lenny', 50, 1234602000]
- - ['debian', 'sarge', 31, 1118044800]
- - ['debian', 'squeeze', 60, 1296896400]
- - ['debian', 'wheezy', 70, 1367654400]
- - ['debian', 'woody', 30, 1027065600]
- - ['ubuntu', 'precise', 1510, 1335427200]
- - ['ubuntu', 'trusty', 1404, 1397721600]
- - ['ubuntu', 'vivid', 1504, 1429779600]
- - ['ubuntu', 'wily', 1510, 1445504400]
-...
-test_run:cmd("clear filter")
----
-- true
-...
-test_run:switch('default')
----
-- true
-...
-test_run:cmd('stop server upgrade')
----
-- true
-...
-test_run = nil
----
-...
diff --git a/test/xlog/upgrade.test.lua b/test/xlog/upgrade.test.lua
deleted file mode 100644
index 0be2d34e9..000000000
--- a/test/xlog/upgrade.test.lua
+++ /dev/null
@@ -1,46 +0,0 @@
-test_run = require('test_run').new()
-
-version = test_run:get_cfg('version')
-work_dir = "xlog/upgrade/"..version
-
-test_run:cmd('create server upgrade with script="xlog/upgrade.lua", workdir="'..work_dir..'"')
-test_run:cmd("start server upgrade")
-
-test_run:switch('upgrade')
-
-test_run:cmd(string.format("push filter '%s' to '<server_uuid>'", box.info.cluster.uuid))
-
---
--- Upgrade
---
-
-box.schema.upgrade()
-
---
--- Migrated data
---
-
-box.space._schema:select()
-box.space._space:select()
-box.space._index:select()
-box.space._user:select()
-box.space._func:select()
-box.space._collation:select()
-box.space._priv:select()
-
-box.space._vspace ~= nil
-box.space._vindex ~= nil
-box.space._vuser ~= nil
-box.space._vpriv ~= nil
-
--- a test space
-r = box.space.distro:select()
-_ = table.sort(r, function(left, right) return tostring(left) < tostring(right) end)
-r
-
-test_run:cmd("clear filter")
-
-test_run:switch('default')
-test_run:cmd('stop server upgrade')
-
-test_run = nil
diff --git a/test/xlog/upgrade/2.1.3/gh-4771-upgrade-sequence/00000000000000000014.snap b/test/xlog/upgrade/2.1.3/gh-4771-upgrade-sequence/00000000000000000014.snap
new file mode 100644
index 0000000000000000000000000000000000000000..c0d2ef404c4e54377230a3134394dbc7abb5f730
GIT binary patch
literal 4622
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
E?GdQ4X#fBK
literal 0
HcmV?d00001
diff --git a/test/xlog/upgrade/2.1.3/gh-4771-upgrade-sequence/fill.lua b/test/xlog/upgrade/2.1.3/gh-4771-upgrade-sequence/fill.lua
new file mode 100644
index 000000000..b159f2b67
--- /dev/null
+++ b/test/xlog/upgrade/2.1.3/gh-4771-upgrade-sequence/fill.lua
@@ -0,0 +1,14 @@
+box.cfg{}
+s1 = box.schema.create_space('test1')
+pk = s1:create_index('pk', {sequence = true})
+s1:replace{box.NULL}
+
+seq2 = box.schema.sequence.create('seq2')
+s2 = box.schema.create_space('test2')
+pk = s2:create_index('pk', {sequence = 'seq2'})
+s2:replace{box.NULL}
+
+seq3 = box.schema.sequence.create('seq3')
+seq3:next()
+
+box.snapshot()
--
2.21.1 (Apple Git-122.3)
^ permalink raw reply [flat|nested] 11+ messages in thread