1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#!/usr/bin/env tarantool
---
...
env = require('test_run')
---
...
test_run = env.new()
---
...
box.cfg{}
---
...
test_run:cmd('create server test with script = "xlog/force_recovery.lua"')
---
- true
...
test_run:cmd("start server test")
---
- true
...
test_run:cmd("switch test")
---
- true
...
box.space._schema:replace({'test'})
---
- ['test']
...
test_run:cmd("restart server test")
box.space._schema:replace({'lost'})
---
- ['lost']
...
test_run:cmd("restart server test")
box.space._schema:replace({'tost'})
---
- ['tost']
...
-- corrupted (empty) in the middle (old behavior: goto error on recovery)
fio = require('fio')
---
...
path = fio.pathjoin(box.cfg.wal_dir, string.format('%020d.xlog', box.info.lsn - 2))
---
...
fio.truncate(path)
---
- true
...
test_run:cmd("restart server test")
box.space._schema:replace({'last'})
---
- ['last']
...
-- corrupted (empty), last
fio = require('fio')
---
...
path = fio.pathjoin(box.cfg.wal_dir, string.format('%020d.xlog', box.info.lsn - 1))
---
...
fio.truncate(path)
---
- true
...
test_run:cmd("restart server test")
box.space._schema:replace({'test'})
---
- ['test']
...
test_run:cmd("restart server test")
box.space._schema:replace({'tost'})
---
- ['tost']
...
-- corrupted header, last
fio = require('fio')
---
...
path = fio.pathjoin(box.cfg.wal_dir, string.format('%020d.xlog', box.info.lsn - 1))
---
...
f = fio.open(path, {'O_WRONLY'})
---
...
f:write('DEAD')
---
- true
...
f:close()
---
- true
...
test_run:cmd("restart server test")
box.space._schema:replace({'post'})
---
- ['post']
...
|