Skip to content

msgpuck reach unreachable() statement on net.box's schema fetch #9621

@Totktonada

Description

@Totktonada

I'm running config-luatest/vshard_test.lua many times in parallel on a fresh tarantool version (3.1.0-entrypoint-28-g876273220d).

$ ulimit -c unlimited
$ KEEP_DATA=1 ./test/test-run.py $(yes config-luatest/vshard_test.lua | head -n 100)

Sometimes it is failed in the following way.

[002] instance-005 | 2024-01-25 17:23:09.926 [6787] main/125/unix/:./instance-001.iproto (net.box)/vshard.replicaset I> connected to unix/:./instance-001.iproto
[002] instance-005 | 2024-01-25 17:23:09.940 [6787] main/129/unix/:./instance-001.iproto (net.box)/vshard.replicaset I> connected to unix/:./instance-001.iproto
[002] instance-005 | tarantool: ./src/lib/msgpuck/msgpuck.h:2270: mp_decode_uint: Assertion `0' failed.

The code with the unreachable() statement that fails is the following.

MP_IMPL uint64_t
mp_decode_uint(const char **data)
{
        uint8_t c = mp_load_u8(data);
        switch (c) {
        case 0xcc:
                return mp_load_u8(data);
        case 0xcd:
                return mp_load_u16(data);
        case 0xce:
                return mp_load_u32(data);
        case 0xcf:
                return mp_load_u64(data);
        default:
                if (mp_unlikely(c > 0x7f))
                        mp_unreachable();
                return c;
        }    
}

The backtrace from gdb is the following.

#0  0x00007f510c3dfacc in __pthread_kill_implementation () from /lib64/libc.so.6
#1  0x00007f510c392252 in raise () from /lib64/libc.so.6
#2  0x00007f510c37b4f2 in abort () from /lib64/libc.so.6
#3  0x00007f510c37b415 in __assert_fail_base.cold () from /lib64/libc.so.6
#4  0x00007f510c38ae82 in __assert_fail () from /lib64/libc.so.6
#5  0x00005621e624ba20 in mp_decode_uint (data=0x7f50d1a80bf8) at /home/alex/p/tarantool-meta/tarantool/src/lib/msgpuck/msgpuck.h:2270
#6  0x00005621e609ed84 in netbox_transport_send_and_recv (transport=0x40f6e070, hdr=0x7f50d1a80cc0) at /home/alex/p/tarantool-meta/tarantool/src/box/lua/net_box.c:1268
#7  0x00005621e60a3d58 in netbox_transport_fetch_schema (transport=0x40f6e070, L=0x40f6e6e8, schema_version=82) at /home/alex/p/tarantool-meta/tarantool/src/box/lua/net_box.c:2952
#8  0x00005621e60a42a1 in netbox_connection_handler_f (L=0x40f6e6e8) at /home/alex/p/tarantool-meta/tarantool/src/box/lua/net_box.c:3064
#9  0x00005621e6158a97 in lj_BC_FUNCC () at buildvm_x86.dasc:811
#10 0x00005621e6166a7e in lua_cpcall (L=0x40f6e6e8, func=0x5621e60a423b <netbox_connection_handler_f>, ud=0x40f6e070) at /home/alex/p/tarantool-meta/tarantool/third_party/luajit/src/lj_api.c:1207
#11 0x00005621e60ce7e6 in luaT_cpcall (L=0x40f6e6e8, func=0x5621e60a423b <netbox_connection_handler_f>, ud=0x40f6e070) at /home/alex/p/tarantool-meta/tarantool/src/lua/utils.c:711
#12 0x00005621e60a459a in netbox_worker_f (ap=0x7f510b814298) at /home/alex/p/tarantool-meta/tarantool/src/box/lua/net_box.c:3093
#13 0x00005621e5e45016 in fiber_cxx_invoke(fiber_func, typedef __va_list_tag __va_list_tag *) (f=0x5621e60a42c3 <netbox_worker_f>, ap=0x7f510b814298) at /home/alex/p/tarantool-meta/tarantool/src/lib/core/fiber.h:1297
#14 0x00005621e60fc44d in fiber_loop (data=0x0) at /home/alex/p/tarantool-meta/tarantool/src/lib/core/fiber.c:1160
#15 0x00005621e63f89ca in coro_init () at /home/alex/p/tarantool-meta/tarantool/third_party/coro/coro.c:108

More info:

(gdb) frame 5
#5  0x00005621e624ba20 in mp_decode_uint (data=0x7f50d1a80bf8) at /home/alex/p/tarantool-meta/tarantool/src/lib/msgpuck/msgpuck.h:2270
2270				mp_unreachable();
(gdb) p/x c
$10 = 0x96

(gdb) frame 6
(gdb) p/x bufpos[0]
$12 = 0x96
(gdb) tt-mp bufpos
[201U, "unicode_sl_s3", 1U, "ICU", "sl", {"strength": "tertiary"}]

Metadata

Metadata

Labels

2.11Target is 2.11 and all newer release/master branches3.1Target is 3.1 and all newer release/master branchesbugSomething isn't workingcrash

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions