Skip to content

Certain memtx transaction manager state triggers tuple_has_flag(tuple, TUPLE_IS_DIRTY) assertion on replace #7449

@CuriousGeorgiy

Description

@CuriousGeorgiy

Steps to reproduce

os.execute('rm -rf *.snap *.xlog *.vylog 512')

local ffi = require('ffi')
local json = require('json')
local log = require('log')
local txn_proxy = require('txn_proxy')

box.cfg{memtx_use_mvcc_engine = true}

local s = box.schema.space.create('s')
s:create_index('pk')
s:create_index('sk', {unique = false, parts = {{2, 'uint'}}})

box.internal.memtx_tx_gc(100)

s:insert{0, 0}
s:insert{1, 1}

local tx1 = txn_proxy:new()
local tx2 = txn_proxy:new()

tx1:begin()
tx2:begin()

tx1('box.space.s:select{0}')
tx2('box.space.s.index[1]:select({0}, {iterator = "GT"})')
s:delete{0}
tx1:commit()
box.internal.memtx_tx_gc(1)
s:replace{0, 1}

os.exit()

Actual behavior

Assertion failed: (tuple_has_flag(tuple, TUPLE_IS_DIRTY)), function memtx_tx_story_get, file memtx_tx.c, line 859.

Expected behavior

Script successfully exits.

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions