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
|
-- wal is off, good opportunity to test something more CPU intensive:
env = require('test_run')
---
...
test_run = env.new()
---
...
-- need a clean server to count the number of tuple formats
test_run:cmd('restart server default with cleanup=1')
spaces = {}
---
...
box.schema.FORMAT_ID_MAX
---
- 65534
...
test_run:cmd("setopt delimiter ';'")
---
- true
...
-- too many formats
for k = 1, box.schema.FORMAT_ID_MAX, 1 do
local s = box.schema.space.create('space'..k)
table.insert(spaces, s)
end;
---
- error: 'Tuple format limit reached: 65536'
...
#spaces;
---
- 65501
...
-- cleanup
for k, v in pairs(spaces) do
v:drop()
end;
---
...
test_run:cmd("setopt delimiter ''");
---
- true
...
--
-- gh-3408: space drop frees tuples asynchronously.
--
fiber = require('fiber')
---
...
function mem_used() local info = box.info.memory() return info.data + info.index end
---
...
_ = collectgarbage('collect')
---
...
mem_before = mem_used()
---
...
s1 = box.schema.space.create('test1')
---
...
_ = s1:create_index('pk', {type = 'tree'})
---
...
s2 = box.schema.space.create('test2')
---
...
_ = s2:create_index('pk', {type = 'hash'})
---
...
box.begin() for i = 1, 10000 do s1:insert{i} s2:insert{i} end box.commit()
---
...
-- Space drop doesn't yield because WAL is off so memory won't
-- be freed until we yield.
test_run:cmd("setopt delimiter ';'")
---
- true
...
s1:drop()
s2:drop()
_ = collectgarbage('collect')
mem_after = mem_used()
test_run:cmd("setopt delimiter ''");
---
...
mem_after > mem_before -- due to async cleanup
---
- true
...
-- Check that async cleanup doesn't leave garbage behind.
for i = 1, 100 do mem_after = mem_used() if mem_after <= mem_before then break end fiber.sleep(0.01) end
---
...
mem_after <= mem_before
---
- true
...
|