Skip to content

Assertion failure in MVCC GC when func index is used #10770

@drewdzzz

Description

@drewdzzz

I wrote the script:

os.execute('rm 000*')

local fiber = require('fiber')
local log = require('log')

box.cfg{memtx_use_mvcc_engine = true}

box.schema.func.create('test', {
    is_deterministic = true,
    body = [[function(tuple)
        return {tuple[1]}
    end]]
})
local s = box.schema.space.create('test', {format = {{'key', 'unsigned'},}})
s:create_index('primary')
s:create_index('value', {
    func = 'test',
    parts = {{1, 'unsigned'}},
})

for i = 1, 100 do
    s:replace{i}
end

local reader = fiber.create(function()
    box.begin()
    s:select{}
    fiber.sleep(2)
    box.commit()
end)
reader:set_joinable(true)

box.begin()
for i = 1, 100 do
    s:delete(i)
end
box.commit()

reader:join()
box.begin()
s:insert{101}
log.info('Gonna do a select')
s:select{}
log.info('Select is done')

Result: Assertion failed: (story->tuple == removed || (removed == NULL && tuple_key_is_excluded(story->tuple, key_def, MULTIKEY_NONE))), function memtx_tx_story_full_unlink_story_gc_step, file memtx_tx.c. I've done a little investigation: when deleting a tuple [10] in the functional index, nothing is deleted.

Reproduced on MacOS, M2 Pro.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions