-
Notifications
You must be signed in to change notification settings - Fork 8.3k
Potential deadlock in RolesCache #15669
Copy link
Copy link
Closed
Labels
bugConfirmed user-visible misbehaviour in official releaseConfirmed user-visible misbehaviour in official releasecomp-rbacAuthorization: roles, grants, quotas, row-level security, access checks.Authorization: roles, grants, quotas, row-level security, access checks.
Description
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
==================
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugConfirmed user-visible misbehaviour in official releaseConfirmed user-visible misbehaviour in official releasecomp-rbacAuthorization: roles, grants, quotas, row-level security, access checks.Authorization: roles, grants, quotas, row-level security, access checks.