forked from tarantool/tarantool
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gh_8505_synchro_triggers_test.lua
66 lines (55 loc) · 1.81 KB
/
gh_8505_synchro_triggers_test.lua
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
local t = require('luatest')
local replica_set = require('luatest.replica_set')
local server = require('luatest.server')
local g = t.group('gh-8505-synchro-triggers')
g.before_all(function(g)
g.replica_set = replica_set:new({})
g.box_cfg = {
replication_timeout = 0.01,
replication = {
server.build_listen_uri('server1', g.replica_set.id),
server.build_listen_uri('server2', g.replica_set.id),
},
}
g.box_cfg.election_mode = 'voter'
g.server2 = g.replica_set:build_and_add_server({
alias = 'server2', box_cfg = g.box_cfg
})
g.box_cfg.election_mode = 'candidate'
g.server1 = g.replica_set:build_and_add_server({
alias = 'server1', box_cfg = g.box_cfg
})
g.replica_set:start()
g.server1:wait_for_election_leader()
g.server1:exec(function()
box.schema.create_space('test', {is_sync = true}):create_index('pk')
end)
g.server2:wait_for_vclock_of(g.server1)
end)
g.after_all(function(g)
g.replica_set:drop()
end)
g.test_on_commit_trigger = function(g)
g.server1:exec(function()
box.begin()
box.on_commit(function(iter) iter() end)
box.space.test:upsert({1}, {{'=', 1, 1}})
box.commit()
end)
end
g.test_on_rollback_trigger = function(g)
-- Force ACK gathering to fail and cause rollback
local cfg = g.box_cfg
cfg.replication_synchro_timeout = 1e-9
cfg.election_mode = 'candidate'
g.server1:update_box_cfg(cfg)
g.server1:wait_for_election_leader()
g.server1:exec(function()
box.begin()
box.on_rollback(function(iter) iter() end)
box.space.test:upsert({1}, {{'=', 1, 1}})
local _, err = pcall(box.commit)
t.assert_equals(err.code, box.error.SYNC_QUORUM_TIMEOUT)
end)
g.server1:update_box_cfg(g.box_cfg)
end