Skip to content

replication: box.ctl.promote() fails with assertion #11708

@Totktonada

Description

@Totktonada

Tarantool version: 3.5.0-entrypoint-132-g8c7cfb1cd0

Reproduce files

i.lua (same as in #11703 except fiber.new(box.ctl.promote)):

#!/usr/bin/env tarantool

local fio = require('fio')
local fiber = require('fiber')

local port = tonumber(arg[1])
assert(port ~= nil, port)
fio.mkdir(port)
if port == 3301 then
    fiber.new(function()
        fiber.sleep(2)
        box.ctl.make_bootstrap_leader({graceful = true})
        while box.info.status ~= 'running' do
            fiber.sleep(0.001)
        end
        fiber.new(box.ctl.promote)
        box.ctl.promote()
        box.cfg({read_only = false})
        box.ctl.wait_rw()
        box.schema.user.grant('guest', 'super')
    end)
end
box.cfg({
    read_only = true,
    work_dir = tostring(port),
    listen = port,
    replication = {3301, 3302, 3303},
    election_mode = 'manual',
    bootstrap_strategy = 'supervised',
})

Procfile (same as in #11703):

i-3301: ./src/tarantool i.lua 3301
i-3302: ./src/tarantool i.lua 3302
i-3303: ./src/tarantool i.lua 3303

Reproduce steps

$ rm -r 3301 3302 3303
$ honcho start
<..wait for gh-11703 crash..>
$ honcho start

Result

tarantool: ./src/lua/error.c:123: luaT_error_at: Assertion `e != NULL' failed.

The stacktrace:

(gdb) bt
#0  0x00007ffff5015e6c in __pthread_kill_implementation () from /lib64/libc.so.6
#1  0x00007ffff4fc7612 in raise () from /lib64/libc.so.6
#2  0x00007ffff4fb04ed in abort () from /lib64/libc.so.6
#3  0x00007ffff4fb0415 in __assert_fail_base.cold () from /lib64/libc.so.6
#4  0x00007ffff4fc0192 in __assert_fail () from /lib64/libc.so.6
#5  0x0000555555853147 in luaT_error_at (L=0x402fca88, level=1) at /home/alex/p/tarantool-meta/tarantool/src/lua/error.c:123
#6  0x00005555558531c6 in luaT_error (L=0x402fca88) at /home/alex/p/tarantool-meta/tarantool/src/lua/error.c:135
#7  0x0000555555812083 in lbox_ctl_promote (L=0x402fca88) at /home/alex/p/tarantool-meta/tarantool/src/box/lua/ctl.c:106
#8  0x00005555558e1cf7 in lj_BC_FUNCC () at buildvm_x86.dasc:811
#9  0x00005555558ef6e3 in lua_pcall (L=0x402fca88, nargs=0, nresults=-1, errfunc=0) at /home/alex/p/tarantool-meta/tarantool/third_party/luajit/src/lj_api.c:1173
#10 0x000055555584d1f3 in luaT_call (L=0x402fca88, nargs=0, nreturns=-1) at /home/alex/p/tarantool-meta/tarantool/src/lua/utils.c:708
#11 0x00005555558421c7 in lua_fiber_run_f (ap=0x7ffff4410a30) at /home/alex/p/tarantool-meta/tarantool/src/lua/fiber.c:452
#12 0x0000555555593434 in fiber_cxx_invoke(fiber_func, typedef __va_list_tag __va_list_tag *) (f=0x55555584210e <lua_fiber_run_f>, ap=0x7ffff4410a30) at /home/alex/p/tarantool-meta/tarantool/src/lib/core/fiber.h:1324
#13 0x000055555587e017 in fiber_loop (data=0x0) at /home/alex/p/tarantool-meta/tarantool/src/lib/core/fiber.c:1167
#14 0x0000555555bd3568 in coro_init () at /home/alex/p/tarantool-meta/tarantool/third_party/coro/coro.c:108

The relevant code:

tarantool/src/box/lua/ctl.c

Lines 102 to 108 in 8de5bae

static int
lbox_ctl_promote(struct lua_State *L)
{
if (box_promote() != 0)
return luaT_error(L);
return 0;
}

tarantool/src/lua/error.c

Lines 132 to 136 in 8de5bae

int
luaT_error(lua_State *L)
{
return luaT_error_at(L, 1);
}

tarantool/src/lua/error.c

Lines 119 to 130 in 8de5bae

int
luaT_error_at(lua_State *L, int level)
{
struct error *e = diag_last_error(&fiber()->diag);
assert(e != NULL);
if (level > 0)
luaT_error_set_trace(L, level, e);
luaT_pusherror(L, e);
lua_error(L);
unreachable();
return 0;
}

Metadata

Metadata

Labels

3.2Target is 3.2 and all newer release/master branchesbugSomething isn't workingcrashreplication

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions