Skip to content

Potential deadlock in RolesCache #15669

@alesapin

Description

@alesapin

Build with thread sanitizer and run pytest -ss test_role/test.py:

==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=1)
  Cycle in lock order graph: M688904851538707904 (0x000000000000) => M2943 (0x7b60000033b8) => M688904851538707904

  Mutex M2943 acquired here while holding mutex M688904851538707904 in thread T29:
    #0 pthread_mutex_lock <null> (clickhouse+0x74c7da6)
    #1 std::__1::__libcpp_mutex_lock(pthread_mutex_t*) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/__threading_support:322:10 (clickhouse+0x12f75f99)
    #2 std::__1::mutex::lock() /home/alesap/code/cpp/ClickHouse/contrib/libcxx/src/mutex.cpp:33:14 (clickhouse+0x12f75f99)
    #3 std::__1::lock_guard<std::__1::mutex>::lock_guard(std::__1::mutex&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/__mutex_base:91:27 (clickhouse+0xf83a856)
    #4 DB::RoleCache::getEnabledRoles(boost::container::flat_set<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::less<StrongTypedef<DB::UInt128, DB::UUIDTag> >, void> const&, boost::container::flat_set<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::less<StrongTypedef<DB::UInt128, DB::UUIDTag> >, void> const&) /home/alesap/code/cpp/ClickHouse/src/Access/RoleCache.cpp:68:21 (clickhouse+0xf83a856)
    #5 DB::AccessControlManager::getEnabledRoles(boost::container::flat_set<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::less<StrongTypedef<DB::UInt128, DB::UUIDTag> >, void> const&, boost::container::flat_set<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::less<StrongTypedef<DB::UInt128, DB::UUIDTag> >, void> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/AccessControlManager.cpp:416:24 (clickhouse+0xf79f270)
    #6 DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:246:30 (clickhouse+0xf7ce2fb)
    #7 DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:191:9 (clickhouse+0xf7d8ab1)
    #8 decltype(std::__1::forward<DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0&>(fp)(std::__1::forward<StrongTypedef<DB::UInt128, DB::UUIDTag> const&>(fp0), std::__1::forward<std::__1::shared_ptr<DB::IAccessEntity const> const&>(fp0))) std::__1::__invoke<DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0&, StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&>(DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0&, StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/type_traits:3519:1 (clickhouse+0xf7d8ab1)
    #9 void std::__1::__invoke_void_return_wrapper<void>::__call<DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0&, StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&>(DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0&, StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/__functional_base:348:9 (clickhouse+0xf7d8ab1)
    #10 std::__1::__function::__alloc_func<DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0, std::__1::allocator<DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0>, void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1540:16 (clickhouse+0xf7d8ab1)
    #11 std::__1::__function::__func<DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0, std::__1::allocator<DB::ContextAccess::ContextAccess(DB::AccessControlManager const&, DB::ContextAccessParams const&)::$_0>, void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1714:12 (clickhouse+0xf7d8ab1)
    #12 std::__1::__function::__value_func<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) const /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1867:16 (clickhouse+0xf813574)
    #13 std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) const /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:2473:12 (clickhouse+0xf813574)
    #14 DB::IAccessStorage::notify(std::__1::vector<std::__1::tuple<std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>, StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::shared_ptr<DB::IAccessEntity const> >, std::__1::allocator<std::__1::tuple<std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>, StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::shared_ptr<DB::IAccessEntity const> > > > const&) /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:413:9 (clickhouse+0xf813574)
    #15 DB::DiskAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_5::operator()() const /home/alesap/code/cpp/ClickHouse/src/Access/DiskAccessStorage.cpp:694:5 (clickhouse+0xf7fa962)
    #16 ext::basic_scope_guard<DB::DiskAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_5>::invoke() /home/alesap/code/cpp/ClickHouse/base/common/../ext/scope_guard.h:97:9 (clickhouse+0xf7fa962)
    #17 ext::basic_scope_guard<DB::DiskAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_5>::~basic_scope_guard() /home/alesap/code/cpp/ClickHouse/base/common/../ext/scope_guard.h:47:28 (clickhouse+0xf7fa962)
    #18 DB::DiskAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) /home/alesap/code/cpp/ClickHouse/src/Access/DiskAccessStorage.cpp:698:1 (clickhouse+0xf7fa962)
    #19 DB::IAccessStorage::update(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:335:5 (clickhouse+0xf812b42)
    #20 DB::MultipleAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) /home/alesap/code/cpp/ClickHouse/src/Access/MultipleAccessStorage.cpp:253:27 (clickhouse+0xf82951a)
    #21 DB::IAccessStorage::update(std::__1::vector<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::allocator<StrongTypedef<DB::UInt128, DB::UUIDTag> > > const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_12::operator()() const /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:345:27 (clickhouse+0xf812c28)
    #22 bool DB::(anonymous namespace)::ErrorsTracker::tryCall<DB::IAccessStorage::update(std::__1::vector<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::allocator<StrongTypedef<DB::UInt128, DB::UUIDTag> > > const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_12>(DB::IAccessStorage::update(std::__1::vector<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::allocator<StrongTypedef<DB::UInt128, DB::UUIDTag> > > const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_12 const&) /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:67:17 (clickhouse+0xf812c28)
    #23 DB::IAccessStorage::update(std::__1::vector<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::allocator<StrongTypedef<DB::UInt128, DB::UUIDTag> > > const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:346:17 (clickhouse+0xf812c28)
    #24 DB::InterpreterGrantQuery::execute() /home/alesap/code/cpp/ClickHouse/src/Interpreters/InterpreterGrantQuery.cpp:251:20 (clickhouse+0xff62205)
    #25 DB::executeQueryImpl(char const*, char const*, DB::Context&, bool, DB::QueryProcessingStage::Enum, bool, DB::ReadBuffer*) /home/alesap/code/cpp/ClickHouse/src/Interpreters/executeQuery.cpp:412:28 (clickhouse+0x10387860)
    #26 DB::executeQuery(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::Context&, bool, DB::QueryProcessingStage::Enum, bool) /home/alesap/code/cpp/ClickHouse/src/Interpreters/executeQuery.cpp:708:30 (clickhouse+0x1038667e)
    #27 DB::TCPHandler::runImpl() /home/alesap/code/cpp/ClickHouse/src/Server/TCPHandler.cpp:254:24 (clickhouse+0x10aa4da1)
    #28 DB::TCPHandler::run() /home/alesap/code/cpp/ClickHouse/src/Server/TCPHandler.cpp:1311:9 (clickhouse+0x10aafb27)
    #29 Poco::Net::TCPServerConnection::start() /home/alesap/code/cpp/ClickHouse/contrib/poco/Net/src/TCPServerConnection.cpp:43:3 (clickhouse+0x11ab6512)
    #30 Poco::Net::TCPServerDispatcher::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Net/src/TCPServerDispatcher.cpp:114:20 (clickhouse+0x11ab6c29)
    #31 Poco::PooledThread::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/ThreadPool.cpp:199:14 (clickhouse+0x11c18c91)
    #32 Poco::(anonymous namespace)::RunnableHolder::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread.cpp:55:11 (clickhouse+0x11c1735f)
    #33 Poco::ThreadImpl::runnableEntry(void*) /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread_POSIX.cpp:345:27 (clickhouse+0x11c15cc7)

    Hint: use TSAN_OPTIONS=second_deadlock_stack=1 to get more informative warning message

  Mutex M688904851538707904 acquired here while holding mutex M2943 in thread T29:
    #0 pthread_mutex_lock <null> (clickhouse+0x74c7da6)
    #1 std::__1::__libcpp_mutex_lock(pthread_mutex_t*) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/__threading_support:322:10 (clickhouse+0x12f75f99)
    #2 std::__1::mutex::lock() /home/alesap/code/cpp/ClickHouse/contrib/libcxx/src/mutex.cpp:33:14 (clickhouse+0x12f75f99)
    #3 std::__1::lock_guard<std::__1::mutex>::lock_guard(std::__1::mutex&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/__mutex_base:91:27 (clickhouse+0xf7d8d64)
    #4 DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1::operator()(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:249:25 (clickhouse+0xf7d8d64)
    #5 decltype(std::__1::forward<DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1&>(fp)(std::__1::forward<std::__1::shared_ptr<DB::EnabledRolesInfo const> const&>(fp0))) std::__1::__invoke<DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1&, std::__1::shared_ptr<DB::EnabledRolesInfo const> const&>(DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1&, std::__1::shared_ptr<DB::EnabledRolesInfo const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/type_traits:3519:1 (clickhouse+0xf7d8d64)
    #6 void std::__1::__invoke_void_return_wrapper<void>::__call<DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1&, std::__1::shared_ptr<DB::EnabledRolesInfo const> const&>(DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1&, std::__1::shared_ptr<DB::EnabledRolesInfo const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/__functional_base:348:9 (clickhouse+0xf7d8d64)
    #7 std::__1::__function::__alloc_func<DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1, std::__1::allocator<DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1>, void (std::__1::shared_ptr<DB::EnabledRolesInfo const> const&)>::operator()(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1540:16 (clickhouse+0xf7d8d64)
    #8 std::__1::__function::__func<DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1, std::__1::allocator<DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const::$_1>, void (std::__1::shared_ptr<DB::EnabledRolesInfo const> const&)>::operator()(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1714:12 (clickhouse+0xf7d8d64)
    #9 std::__1::__function::__value_func<void (std::__1::shared_ptr<DB::EnabledRolesInfo const> const&)>::operator()(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&) const /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1867:16 (clickhouse+0xf809b0d)
    #10 std::__1::function<void (std::__1::shared_ptr<DB::EnabledRolesInfo const> const&)>::operator()(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&) const /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:2473:12 (clickhouse+0xf809b0d)
    #11 DB::EnabledRoles::setRolesInfo(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&)::$_1::operator()() const /home/alesap/code/cpp/ClickHouse/src/Access/EnabledRoles.cpp:40:5 (clickhouse+0xf809b0d)
    #12 ext::basic_scope_guard<DB::EnabledRoles::setRolesInfo(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&)::$_1>::invoke() /home/alesap/code/cpp/ClickHouse/base/common/../ext/scope_guard.h:97:9 (clickhouse+0xf809b0d)
    #13 ext::basic_scope_guard<DB::EnabledRoles::setRolesInfo(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&)::$_1>::~basic_scope_guard() /home/alesap/code/cpp/ClickHouse/base/common/../ext/scope_guard.h:47:28 (clickhouse+0xf809b0d)
    #14 DB::EnabledRoles::setRolesInfo(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&) /home/alesap/code/cpp/ClickHouse/src/Access/EnabledRoles.cpp:49:1 (clickhouse+0xf809b0d)
    #15 DB::RoleCache::collectEnabledRoles(DB::EnabledRoles&) /home/alesap/code/cpp/ClickHouse/src/Access/RoleCache.cpp:122:13 (clickhouse+0xf83af4f)
    #16 DB::RoleCache::collectEnabledRoles() /home/alesap/code/cpp/ClickHouse/src/Access/RoleCache.cpp:100:13 (clickhouse+0xf83b12a)
    #17 DB::RoleCache::roleChanged(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::Role const> const&) /home/alesap/code/cpp/ClickHouse/src/Access/RoleCache.cpp:165:5 (clickhouse+0xf83beee)
    #18 DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/RoleCache.cpp:139:13 (clickhouse+0xf83c4aa)
    #19 decltype(std::__1::forward<DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1&>(fp)(std::__1::forward<StrongTypedef<DB::UInt128, DB::UUIDTag> const&>(fp0), std::__1::forward<std::__1::shared_ptr<DB::IAccessEntity const> const&>(fp0))) std::__1::__invoke<DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1&, StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&>(DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1&, StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/type_traits:3519:1 (clickhouse+0xf83c4aa)
    #20 void std::__1::__invoke_void_return_wrapper<void>::__call<DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1&, StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&>(DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1&, StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/__functional_base:348:9 (clickhouse+0xf83c4aa)
    #21 std::__1::__function::__alloc_func<DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1, std::__1::allocator<DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1>, void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1540:16 (clickhouse+0xf83c4aa)
    #22 std::__1::__function::__func<DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1, std::__1::allocator<DB::RoleCache::getRole(StrongTypedef<DB::UInt128, DB::UUIDTag> const&)::$_1>, void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1714:12 (clickhouse+0xf83c4aa)
    #23 std::__1::__function::__value_func<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) const /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1867:16 (clickhouse+0xf813574)
    #24 std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&) const /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:2473:12 (clickhouse+0xf813574)
    #25 DB::IAccessStorage::notify(std::__1::vector<std::__1::tuple<std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>, StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::shared_ptr<DB::IAccessEntity const> >, std::__1::allocator<std::__1::tuple<std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>, StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::shared_ptr<DB::IAccessEntity const> > > > const&) /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:413:9 (clickhouse+0xf813574)
    #26 DB::DiskAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_5::operator()() const /home/alesap/code/cpp/ClickHouse/src/Access/DiskAccessStorage.cpp:694:5 (clickhouse+0xf7fa962)
    #27 ext::basic_scope_guard<DB::DiskAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_5>::invoke() /home/alesap/code/cpp/ClickHouse/base/common/../ext/scope_guard.h:97:9 (clickhouse+0xf7fa962)
    #28 ext::basic_scope_guard<DB::DiskAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_5>::~basic_scope_guard() /home/alesap/code/cpp/ClickHouse/base/common/../ext/scope_guard.h:47:28 (clickhouse+0xf7fa962)
    #29 DB::DiskAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) /home/alesap/code/cpp/ClickHouse/src/Access/DiskAccessStorage.cpp:698:1 (clickhouse+0xf7fa962)
    #30 DB::IAccessStorage::update(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:335:5 (clickhouse+0xf812b42)
    #31 DB::MultipleAccessStorage::updateImpl(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) /home/alesap/code/cpp/ClickHouse/src/Access/MultipleAccessStorage.cpp:253:27 (clickhouse+0xf82951a)
    #32 DB::IAccessStorage::update(std::__1::vector<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::allocator<StrongTypedef<DB::UInt128, DB::UUIDTag> > > const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_12::operator()() const /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:345:27 (clickhouse+0xf812c28)
    #33 bool DB::(anonymous namespace)::ErrorsTracker::tryCall<DB::IAccessStorage::update(std::__1::vector<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::allocator<StrongTypedef<DB::UInt128, DB::UUIDTag> > > const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_12>(DB::IAccessStorage::update(std::__1::vector<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::allocator<StrongTypedef<DB::UInt128, DB::UUIDTag> > > const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&)::$_12 const&) /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:67:17 (clickhouse+0xf812c28)
    #34 DB::IAccessStorage::update(std::__1::vector<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::allocator<StrongTypedef<DB::UInt128, DB::UUIDTag> > > const&, std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:346:17 (clickhouse+0xf812c28)
    #35 DB::InterpreterGrantQuery::execute() /home/alesap/code/cpp/ClickHouse/src/Interpreters/InterpreterGrantQuery.cpp:251:20 (clickhouse+0xff62205)
    #36 DB::executeQueryImpl(char const*, char const*, DB::Context&, bool, DB::QueryProcessingStage::Enum, bool, DB::ReadBuffer*) /home/alesap/code/cpp/ClickHouse/src/Interpreters/executeQuery.cpp:412:28 (clickhouse+0x10387860)
    #37 DB::executeQuery(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, DB::Context&, bool, DB::QueryProcessingStage::Enum, bool) /home/alesap/code/cpp/ClickHouse/src/Interpreters/executeQuery.cpp:708:30 (clickhouse+0x1038667e)
    #38 DB::TCPHandler::runImpl() /home/alesap/code/cpp/ClickHouse/src/Server/TCPHandler.cpp:254:24 (clickhouse+0x10aa4da1)
    #39 DB::TCPHandler::run() /home/alesap/code/cpp/ClickHouse/src/Server/TCPHandler.cpp:1311:9 (clickhouse+0x10aafb27)
    #40 Poco::Net::TCPServerConnection::start() /home/alesap/code/cpp/ClickHouse/contrib/poco/Net/src/TCPServerConnection.cpp:43:3 (clickhouse+0x11ab6512)
    #41 Poco::Net::TCPServerDispatcher::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Net/src/TCPServerDispatcher.cpp:114:20 (clickhouse+0x11ab6c29)
    #42 Poco::PooledThread::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/ThreadPool.cpp:199:14 (clickhouse+0x11c18c91)
    #43 Poco::(anonymous namespace)::RunnableHolder::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread.cpp:55:11 (clickhouse+0x11c1735f)
    #44 Poco::ThreadImpl::runnableEntry(void*) /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread_POSIX.cpp:345:27 (clickhouse+0x11c15cc7)

  Thread T29 'TCPHandler' (tid=35, running) created by main thread at:
    #0 pthread_create <null> (clickhouse+0x74aa94b)
    #1 Poco::ThreadImpl::startImpl(Poco::SharedPtr<Poco::Runnable, Poco::ReferenceCounter, Poco::ReleasePolicy<Poco::Runnable> >) /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread_POSIX.cpp:202:6 (clickhouse+0x11c15777)
    #2 Poco::Thread::start(Poco::Runnable&) /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread.cpp:128:2 (clickhouse+0x11c16dcc)
    #3 Poco::PooledThread::start() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/ThreadPool.cpp:85:10 (clickhouse+0x11c19092)
    #4 Poco::ThreadPool::ThreadPool(int, int, int, int) /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/ThreadPool.cpp:252:12 (clickhouse+0x11c19092)
    #5 DB::Server::main(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) /home/alesap/code/cpp/ClickHouse/programs/server/Server.cpp:806:26 (clickhouse+0x7545179)
    #6 Poco::Util::Application::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Util/src/Application.cpp:334:8 (clickhouse+0x11aca34b)
    #7 DB::Server::run() /home/alesap/code/cpp/ClickHouse/programs/server/Server.cpp:205:25 (clickhouse+0x753c23a)
    #8 Poco::Util::ServerApplication::run(int, char**) /home/alesap/code/cpp/ClickHouse/contrib/poco/Util/src/ServerApplication.cpp:611:9 (clickhouse+0x11ae4ee8)
    #9 mainEntryClickHouseServer(int, char**) /home/alesap/code/cpp/ClickHouse/programs/server/Server.cpp:99:20 (clickhouse+0x753bd53)
    #10 main /home/alesap/code/cpp/ClickHouse/programs/main.cpp:400:12 (clickhouse+0x753b032)

SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/usr/bin/clickhouse+0x74c7da6) in pthread_mutex_lock
==================

Metadata

Metadata

Assignees

Labels

bugConfirmed user-visible misbehaviour in official releasecomp-rbacAuthorization: roles, grants, quotas, row-level security, access checks.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions