diff --git a/src/box/read_view.c b/src/box/read_view.c index c5cdf169cb6c6c9cd07966eb8e40995fc333fffd..c9abf4ae829e26f69df5973c1dff34f4359997ec 100644 --- a/src/box/read_view.c +++ b/src/box/read_view.c @@ -126,6 +126,7 @@ read_view_open(struct read_view *rv, const struct read_view_opts *opts) engine_create_read_view(engine); if (engine_rv == NULL) goto fail; + rlist_add_tail_entry(&rv->engines, engine_rv, link); } struct read_view_add_space_cb_arg add_space_cb_arg = { .rv = rv, diff --git a/test/box-luatest/memtx_gc_after_snapshot_test.lua b/test/box-luatest/memtx_gc_after_snapshot_test.lua new file mode 100644 index 0000000000000000000000000000000000000000..c63d9b58b520578e600c9ac5707d2fd8d17e3c68 --- /dev/null +++ b/test/box-luatest/memtx_gc_after_snapshot_test.lua @@ -0,0 +1,38 @@ +local server = require('test.luatest_helpers.server') +local t = require('luatest') +local g = t.group() + +g.before_all = function(cg) + cg.server = server:new({alias = 'master'}) + cg.server:start() +end + +g.after_all = function(cg) + cg.server:stop() +end + +-- Checks that memtx tuple garbage collection is resumed after snapshot. +g.test_memtx_gc_after_snapshot = function(cg) + cg.server:exec(function() + local t = require('luatest') + box.schema.space.create('test') + box.space.test:create_index('primary') + local mem_used_1 = box.info.memory().data + box.begin() + for i = 1, 100 do + box.space.test:insert({i, string.rep('x', 10000)}) + end + box.commit() + local mem_used_2 = box.info.memory().data + t.assert_gt(mem_used_2 - mem_used_1, 1000000) + box.snapshot() + box.begin() + for i = 1, 100 do + box.space.test:delete(i) + end + box.commit() + collectgarbage('collect') -- drop Lua refs + local mem_used_3 = box.info.memory().data + t.assert_gt(mem_used_2 - mem_used_3, 1000000) + end) +end