Skip to content

Assertion fails on restart when compiled with later Clang versions #7036

@srh

Description

@srh

To reproduce:

  1. Compile RethinkDB with Clang 12, Clang 13, or Clang 14, targeting x86-64 (on Linux).
  2. Launch RethinkDB (on a fresh data directory).
  3. Run the query r.tableCreate('foo') to create a table.
  4. Shut down RethinkDB and start it again.

You get this crash.

This crash also occurs if you create the db and add the table with a GCC-compiled RethinkDB, but then start up a Clang-compiled RethinkDB afterwards.

This does not occur with Clang 10 or Clang 11. It might be untested with Clang 11 or 12. This also does not occur with a GCC-compiled RethinkDB.

srh@pc11vm3:~/rethinkdb$ ./build/release_clang/rethinkdb 
Running rethinkdb 2.4.1-94-gca0eb82 (CLANG 14.0.0 )...
Running on Linux 5.15.0-23-generic x86_64
Loading data from directory /home/srh/rethinkdb/rethinkdb_data
Listening for intracluster connections on port 29015
Version: rethinkdb 2.4.1-94-gca0eb82 (CLANG 14.0.0 )
error: Error in thread 8 in src/clustering/administration/persist/raft_storage_interface.cc at line 64:
error: Guarantee failed: [str_to_log_index(index_str) == state.log.get_latest_index() + 1] 139844861282097 ('0000000000000001') == 1
error: Backtrace:
error: Fri Apr  1 22:12:31 2022
       
       1 [0x55b105bb7200]: backtrace_t::backtrace_t() at 0x55b105bb7200 (./build/release_clang/rethinkdb)
       2 [0x55b105bb7bd6]: lazy_backtrace_formatter_t::lazy_backtrace_formatter_t() at 0x55b105bb7bd6 (./build/release_clang/rethinkdb)
       3 [0x55b105bb6b18]: format_backtrace[abi:cxx11](bool) at 0x55b105bb6b18 (./build/release_clang/rethinkdb)
       4 [0x55b105bb5f1c]: report_fatal_error(char const*, int, char const*, ...) at 0x55b105bb5f1c (./build/release_clang/rethinkdb)
       5 [0x55b105b0e147]: ./build/release_clang/rethinkdb(+0xa74147) [0x55b105b0e147] at 0x55b105b0e147 (./build/release_clang/rethinkdb)
       6 [0x55b105b0409f]: metadata::read_txn_t::read_many<raft_log_entry_t<table_raft_state_t>, (cluster_version_t)9>(metadata::key_t<raft_log_entry_t<table_raft_state_t> > const&, std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, raft_log_entry_t<table_raft_state_t> const&)> const&, signal_t*)::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, read_stream_t*)#1}::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, read_stream_t*) const at 0x55b105b0409f (./build/release_clang/rethinkdb)
       7 [0x55b105aa3d76]: ./build/release_clang/rethinkdb(+0xa09d76) [0x55b105aa3d76] at 0x55b105aa3d76 (./build/release_clang/rethinkdb)
       8 [0x55b105aa21eb]: metadata::read_txn_t::blob_to_stream(buf_parent_t, void const*, std::function<void (read_stream_t*)> const&) at 0x55b105aa21eb (./build/release_clang/rethinkdb)
       9 [0x55b105aa3b9b]: ./build/release_clang/rethinkdb(+0xa09b9b) [0x55b105aa3b9b] at 0x55b105aa3b9b (./build/release_clang/rethinkdb)
       10 [0x55b105b28f32]: btree_depth_first_traversal(counted_t<counted_buf_lock_and_read_t>, key_range_t const&, depth_first_traversal_callback_t*, access_t, direction_t, btree_key_t const*, btree_key_t const*, signal_t*) at 0x55b105b28f32 (./build/release_clang/rethinkdb)
       11 [0x55b105b28633]: btree_depth_first_traversal(superblock_t*, key_range_t const&, depth_first_traversal_callback_t*, access_t, direction_t, release_superblock_t, signal_t*) at 0x55b105b28633 (./build/release_clang/rethinkdb)
       12 [0x55b105aa25c2]: metadata::read_txn_t::read_many_bin(store_key_t const&, std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, read_stream_t*)> const&, signal_t*) at 0x55b105aa25c2 (./build/release_clang/rethinkdb)
       13 [0x55b105b0a8df]: table_raft_storage_interface_t::table_raft_storage_interface_t(metadata_file_t*, metadata::read_txn_t*, uuid_u const&, signal_t*) at 0x55b105b0a8df (./build/release_clang/rethinkdb)
       14 [0x55b105b04aec]: real_table_persistence_interface_t::read_all_metadata(std::function<void (uuid_u const&, table_active_persistent_state_t const&, raft_storage_interface_t<table_raft_state_t>*, metadata::read_txn_t*)> const&, std::function<void (uuid_u const&, table_inactive_persistent_state_t const&, metadata::read_txn_t*)> const&, signal_t*) at 0x55b105b04aec (./build/release_clang/rethinkdb)
       15 [0x55b1059c6054]: multi_table_manager_t::multi_table_manager_t(server_id_t const&, mailbox_manager_t*, server_config_client_t*, watchable_map_t<peer_id_t, multi_table_manager_bcard_t>*, watchable_map_t<std::pair<peer_id_t, uuid_u>, table_manager_bcard_t>*, watchable_map_t<std::pair<server_id_t, server_id_t>, empty_value_t>*, table_persistence_interface_t*, base_path_t const&, io_backender_t*, perfmon_collection_repo_t*) at 0x55b1059c6054 (./build/release_clang/rethinkdb)
       16 [0x55b105a90e2f]: do_serve(io_backender_t*, bool, base_path_t const&, metadata_file_t*, serve_info_t const&, os_signal_cond_t*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) at 0x55b105a90e2f (./build/release_clang/rethinkdb)
       17 [0x55b105a99cbe]: serve(io_backender_t*, base_path_t const&, metadata_file_t*, serve_info_t const&, os_signal_cond_t*) at 0x55b105a99cbe (./build/release_clang/rethinkdb)
       18 [0x55b105a6e446]: run_rethinkdb_serve(base_path_t const&, serve_info_t*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, file_direct_io_mode_t, int, optional<optional<unsigned long> > const&, server_id_t const*, server_config_versioned_t const*, cluster_semilattice_metadata_t const*, directory_lock_t*, bool*) at 0x55b105a6e446 (./build/release_clang/rethinkdb)
       19 [0x55b105a6eab2]: run_rethinkdb_porcelain(base_path_t const&, name_string_t const&, std::set<name_string_t, std::less<name_string_t>, std::allocator<name_string_t> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, file_direct_io_mode_t, int, optional<optional<unsigned long> > const&, bool, serve_info_t*, directory_lock_t*, bool*) at 0x55b105a6eab2 (./build/release_clang/rethinkdb)
       20 [0x55b105a883fe]: std::_Function_handler<void (), std::_Bind<void (*(base_path_t, name_string_t, std::set<name_string_t, std::less<name_string_t>, std::allocator<name_string_t> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, file_direct_io_mode_t, int, optional<optional<unsigned long> >, bool, serve_info_t*, directory_lock_t*, bool*))(base_path_t const&, name_string_t const&, std::set<name_string_t, std::less<name_string_t>, std::allocator<name_string_t> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, file_direct_io_mode_t, int, optional<optional<unsigned long> > const&, bool, serve_info_t*, directory_lock_t*, bool*)> >::_M_invoke(std::_Any_data const&) at 0x55b105a883fe (./build/release_clang/rethinkdb)
       21 [0x55b10569e471]: starter_t::run_wrapper(std::function<void ()> const&) at 0x55b10569e471 (./build/release_clang/rethinkdb)
       22 [0x55b1056a3dd5]: coro_t::run() at 0x55b1056a3dd5 (./build/release_clang/rethinkdb)
error: Exiting.
Trace/breakpoint trap (core dumped)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions