commit - 98df66e1c96ba4903dc61b06dc7a86ed759c0fc1
commit + 2816d5aac37df73358c276844cd994bf7b175637
blob - 8fdf94458ea1f4b81b61d7ec36b6cffea196f127
blob + 29c55903c4f2667945b80c278e21b96c39e591c4
--- tarantool-tools/vinyl.lua
+++ tarantool-tools/vinyl.lua
генерируется в самом начале теста.
См. https://github.com/tarantool/tarantool/issues/5076
+https://github.com/mkostoevr/tarantool/commit/f3462f6bfb80f93ce2c155bb6444d12e478dd180
+https://github.com/tarantool/tarantool/issues/4349
]]
local TEST_DURATION = 10*60 -- Seconds.
assert(type(t) == 'table')
assert(next(t) ~= nil)
- local n = #t
+ local n = table.getn(t)
local idx = math.random(1, n)
return t[idx]
end
+-- TODO: Obtain error injections dynamically:
+-- box.error.injection.info()
+-- box.error.injection.get('ERRINJ_SNAP_SKIP_ALL_ROWS')
+-- box.error.injection.set('ERRINJ_SNAP_SKIP_ALL_ROWS', true)
-- Source: src/lib/core/errinj.h
local errinj_set = {
['ERRINJ_APPLIER_DESTROY_DELAY'] = 'boolean',
['ERRINJ_TESTING'] = 'boolean',
['ERRINJ_TUPLE_ALLOC'] = 'boolean',
['ERRINJ_TUPLE_FIELD'] = 'boolean',
- ['ERRINJ_TUPLE_FIELD_COUNT_LIMIT'] = 'int',
+ -- https://github.com/tarantool/tarantool/issues/10033
+ -- ['ERRINJ_TUPLE_FIELD_COUNT_LIMIT'] = 'int',
['ERRINJ_TUPLE_FORMAT_COUNT'] = 'int',
['ERRINJ_TX_DELAY_PRIO_ENDPOINT'] = 'double',
['ERRINJ_TXN_COMMIT_ASYNC'] = 'boolean',
end
box.commit()
end
-
- --[[
- local dump_watermark = 7000000
+ local dump_watermark = 70000
while box.stat.vinyl().memory.level0 < dump_watermark do
generate_insert(space)
end
- ]]
- log.info('snapshot')
- box.snapshot()
end
local function setup(spaces)
for i = 1, NUM_SP do
log.info('create space ' .. tostring(i))
local space = box.schema.space.create('test' .. i, { engine = 'vinyl' })
+ -- TODO: replace with function create_index.
space:create_index('pk', { type = 'tree', parts = {{1, 'uint'}},
run_count_per_level = 100,
page_size = 128,
range_size = 1024 })
+ -- TODO: replace with function create_index.
space:create_index('secondary', { unique = false, parts = { 2, 'unsigned' }})
- -- init_space(space)
+ init_space(space)
spaces[i] = space
end
log.info('FINISH SETUP')
local function cleanup()
log.info("CLEANUP")
- os.execute('rm -rf *.snap *.xlog *.vylog')
+ os.execute('rm -rf *.snap *.xlog *.vylog 51*')
end
local function teardown(spaces)
end
end
-local function index_opts()
- return {
- -- TODO: RTREE
- type = random_elem({'TREE', 'HASH', 'BITSET'}),
+-- https://www.tarantool.io/en/doc/latest/concepts/data_model/indexes/
+local function index_opts(space)
+ assert(space ~= nil)
+ local opts = {
unique = random_elem({true, false}),
if_not_exists = false,
- -- TODO: index_opts.parts
- -- TODO: dimension (RTREE only)
- -- TODO: distance (RTREE only)
-- sequence,
-- func,
- hint = random_elem({true, false}),
- bloom_fpr = math.random(50) / 100,
-- page_size,
-- range_size,
-- run_count_per_level,
-- run_size_ratio,
}
+
+ -- TODO: RTREE, BITSET
+ opts.type = random_elem({'TREE', 'HASH'})
+ if space.engine == 'memtx' then
+ opts.hint = random_elem({true, false})
+ end
+
+ if space.engine == 'vinyl' then
+ opts.bloom_fpr = math.random(50) / 100
+ end
+
+ -- TODO: index_opts.parts
+
+ if opts.type == 'RTREE' then
+ -- TODO: dimension (RTREE only)
+ end
+ if opts.type == 'RTREE' then
+ -- TODO: distance (RTREE only)
+ end
+
+ return opts
end
local function index_create(space)
local idx_name = 'idx_' .. math.random(100)
if space.index[idx_name] ~= nil then
- return
+ space.index[idx_name]:drop()
end
- space:create_index(idx_name, index_opts())
+ local opts = index_opts(space)
+ local ok, err = pcall(space.create_index, space, idx_name, opts)
+ if ok ~= true then
+ log.info('ERROR: ' .. err)
+ log.info(opts)
+ end
end
local function index_drop(space)
end
local function index_alter(space)
- log.info("INDEX_ALTER")
- space.index[idx_name]:alter(index_opts())
+ local idx = random_elem(space.index)
+ local opts = index_opts(space)
+ -- Option is not relevant.
+ opts.if_not_exists = nil
+ idx:alter(opts)
+ -- TODO: space.index.sk:alter{parts = {2, 'number'}}
end
local function index_compact(space)
if space.index.sk ~= nil then
space.index.sk:compact()
end
- -- fiber.create(function() space.index.sk:select() end)
- -- space.index.sk:alter{parts = {2, 'number'}}
- -- box.space.stock_reserved.index.primary:select({}, {limit=100})
end
local function index_noop()