File: errinj.test.lua

package info (click to toggle)
tarantool 2.6.0-1.4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 85,412 kB
  • sloc: ansic: 513,775; cpp: 69,493; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,178; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (73 lines) | stat: -rw-r--r-- 2,483 bytes parent folder | download | duplicates (3)
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
--
-- we actually need to know what xlogs the server creates,
-- so start from a clean state
--
-- 
-- Check how well we handle a failed log write
-- in panic_on_wal_error=false mode
--
env = require('test_run')
test_run = env.new()
test_run:cmd('restart server default with cleanup=1')

box.error.injection.set("ERRINJ_WAL_WRITE", true)
box.space._schema:insert{"key"}
test_run:cmd('restart server default')
box.space._schema:insert{"key"}
test_run:cmd('restart server default')
box.space._schema:get{"key"}
box.space._schema:delete{"key"}
-- list all the logs
name = string.match(arg[0], "([^,]+)%.lua")
require('fio').glob(name .. "/*.xlog")
test_run:cmd('restart server default with cleanup=1')

-- gh-881 iproto request with wal IO error
errinj = box.error.injection

test = box.schema.create_space('test')
_ = test:create_index('primary')

box.schema.user.grant('guest', 'write', 'space', 'test')

row_count_per_wal = box.cfg.wal_max_size / 50 + 10
for i=1, row_count_per_wal do test:insert{i, 'test'} end
c = require('net.box').connect(box.cfg.listen)

-- try to write xlog without permission to write to disk
errinj.set('ERRINJ_WAL_WRITE', true)
c.space.test:insert({row_count_per_wal + 1,1,2,3})
errinj.set('ERRINJ_WAL_WRITE', false)

-- Cleanup
test:drop()
errinj = nil

--
-- gh-3878: Panic when checkpoint_interval is reconfigured while
-- the checkpoint daemon is making a checkpoint.
--
fio = require('fio')
box.space._schema:delete('test') -- bump LSN
box.error.injection.set('ERRINJ_SNAP_WRITE_DELAY', true)
default_checkpoint_interval = box.cfg.checkpoint_interval
box.cfg{checkpoint_interval = 0.01}
-- Wait for the checkpoint daemon to start making a checkpoint.
test_run:cmd("setopt delimiter ';'")
test_run:wait_cond(function()
    local filename = string.format('%020d.snap.inprogress', box.info.signature)
    return fio.path.exists(fio.pathjoin(box.cfg.memtx_dir, filename))
end, 10);
test_run:cmd("setopt delimiter ''");
box.cfg{checkpoint_interval = 0.1}
box.cfg{checkpoint_interval = 1}
box.cfg{checkpoint_interval = 10}
box.cfg{checkpoint_interval = default_checkpoint_interval}
box.error.injection.set('ERRINJ_SNAP_WRITE_DELAY', false)
-- Wait for the checkpoint daemon to finish making a checkpoint.
test_run:cmd("setopt delimiter ';'")
test_run:wait_cond(function()
    local filename = string.format('%020d.snap', box.info.signature)
    return fio.path.exists(fio.pathjoin(box.cfg.memtx_dir, filename))
end, 10);
test_run:cmd("setopt delimiter ''");