Skip to content

Potential deadlock in SettingsProfilesCache #15680

@alesapin

Description

@alesapin

How to reproduce: Build with tsan and pytest -ss test_grant_and_revoke/test.py

==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=1)
  Cycle in lock order graph: M93022325842250176 (0x000000000000) => M1457 (0x7b44000018a8) => M1458 (0x7b54000022b0) => M93022325842250176

  Mutex M1457 acquired here while holding mutex M93022325842250176 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+0x12f78f99)
    #2 std::__1::mutex::lock() /home/alesap/code/cpp/ClickHouse/contrib/libcxx/src/mutex.cpp:33:14 (clickhouse+0x12f78f99)
    #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+0xf8661ff)
    #4 DB::SettingsProfilesCache::getEnabledSettings(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, DB::SettingsProfileElements const&, boost::container::flat_set<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::less<StrongTypedef<DB::UInt128, DB::UUIDTag> >, void> const&, DB::SettingsProfileElements const&) /home/alesap/code/cpp/ClickHouse/src/Access/SettingsProfilesCache.cpp:194:21 (clickhouse+0xf8661ff)
    #5 DB::AccessControlManager::getEnabledSettings(StrongTypedef<DB::UInt128, DB::UUIDTag> const&, DB::SettingsProfileElements const&, boost::container::flat_set<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::less<StrongTypedef<DB::UInt128, DB::UUIDTag> >, void> const&, DB::SettingsProfileElements const&) const /home/alesap/code/cpp/ClickHouse/src/Access/AccessControlManager.cpp:445:37 (clickhouse+0xf79f441)
    #6 DB::ContextAccess::setRolesInfo(std::__1::shared_ptr<DB::EnabledRolesInfo const> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:263:33 (clickhouse+0xf7ceca5)
    #7 DB::ContextAccess::setUser(std::__1::shared_ptr<DB::User const> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:253:5 (clickhouse+0xf7ce4bd)
    #8 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)
    #9 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)
    #10 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)
    #11 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)
    #12 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)
    #13 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)
    #14 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)
    #15 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)
    #16 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)
    #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>::invoke() /home/alesap/code/cpp/ClickHouse/base/common/../ext/scope_guard.h:97:9 (clickhouse+0xf7fa962)
    #18 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)
    #19 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)
    #20 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)
    #21 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)
    #22 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)
    #23 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)
    #24 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)
    #25 DB::InterpreterGrantQuery::execute() /home/alesap/code/cpp/ClickHouse/src/Interpreters/InterpreterGrantQuery.cpp:251:20 (clickhouse+0xff62205)
    #26 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)
    #27 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)
    #28 DB::TCPHandler::runImpl() /home/alesap/code/cpp/ClickHouse/src/Server/TCPHandler.cpp:254:24 (clickhouse+0x10aa4f51)
    #29 DB::TCPHandler::run() /home/alesap/code/cpp/ClickHouse/src/Server/TCPHandler.cpp:1311:9 (clickhouse+0x10aafcd7)
    #30 Poco::Net::TCPServerConnection::start() /home/alesap/code/cpp/ClickHouse/contrib/poco/Net/src/TCPServerConnection.cpp:43:3 (clickhouse+0x11ab9b02)
    #31 Poco::Net::TCPServerDispatcher::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Net/src/TCPServerDispatcher.cpp:114:20 (clickhouse+0x11aba219)
    #32 Poco::PooledThread::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/ThreadPool.cpp:199:14 (clickhouse+0x11c1c281)
    #33 Poco::(anonymous namespace)::RunnableHolder::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread.cpp:55:11 (clickhouse+0x11c1a94f)
    #34 Poco::ThreadImpl::runnableEntry(void*) /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread_POSIX.cpp:345:27 (clickhouse+0x11c192b7)

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

  Mutex M1458 acquired here while holding mutex M1457 in main thread:
    #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+0x12f78f99)
    #2 std::__1::mutex::lock() /home/alesap/code/cpp/ClickHouse/contrib/libcxx/src/mutex.cpp:33:14 (clickhouse+0x12f78f99)
    #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+0xf7fce44)
    #4 DB::DiskAccessStorage::subscribeForChangesImpl(DB::IAccessEntity::Type, std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/DiskAccessStorage.cpp:805:21 (clickhouse+0xf7fce44)
    #5 DB::IAccessStorage::subscribeForChanges(DB::IAccessEntity::Type, std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:379:12 (clickhouse+0xf813289)
    #6 DB::MultipleAccessStorage::updateSubscriptionsToNestedStorages(std::__1::unique_lock<std::__1::mutex>&) const /home/alesap/code/cpp/ClickHouse/src/Access/MultipleAccessStorage.cpp:369:41 (clickhouse+0xf8265a9)
    #7 DB::MultipleAccessStorage::subscribeForChangesImpl(DB::IAccessEntity::Type, std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/MultipleAccessStorage.cpp:285:9 (clickhouse+0xf829eca)
    #8 DB::IAccessStorage::subscribeForChanges(DB::IAccessEntity::Type, std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)> const&) const /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.cpp:379:12 (clickhouse+0xf813289)
    #9 ext::basic_scope_guard<std::__1::function<void ()> > DB::IAccessStorage::subscribeForChanges<DB::SettingsProfile>(std::__1::function<void (StrongTypedef<DB::UInt128, DB::UUIDTag> const&, std::__1::shared_ptr<DB::IAccessEntity const> const&)>) const /home/alesap/code/cpp/ClickHouse/src/Access/IAccessStorage.h:135:83 (clickhouse+0xf863f8f)
    #10 DB::SettingsProfilesCache::ensureAllProfilesRead() /home/alesap/code/cpp/ClickHouse/src/Access/SettingsProfilesCache.cpp:32:28 (clickhouse+0xf863f8f)
    #11 DB::SettingsProfilesCache::setDefaultProfileName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) /home/alesap/code/cpp/ClickHouse/src/Access/SettingsProfilesCache.cpp:91:5 (clickhouse+0xf865354)
    #12 DB::AccessControlManager::setDefaultProfileName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) /home/alesap/code/cpp/ClickHouse/src/Access/AccessControlManager.cpp:355:30 (clickhouse+0xf79eb30)
    #13 DB::Context::setDefaultProfiles(Poco::Util::AbstractConfiguration const&) /home/alesap/code/cpp/ClickHouse/src/Interpreters/Context.cpp:2073:31 (clickhouse+0xfbbe68d)
    #14 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:613:21 (clickhouse+0x75429ef)
    #15 Poco::Util::Application::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Util/src/Application.cpp:334:8 (clickhouse+0x11acd93b)
    #16 DB::Server::run() /home/alesap/code/cpp/ClickHouse/programs/server/Server.cpp:205:25 (clickhouse+0x753c23a)
    #17 Poco::Util::ServerApplication::run(int, char**) /home/alesap/code/cpp/ClickHouse/contrib/poco/Util/src/ServerApplication.cpp:611:9 (clickhouse+0x11ae84d8)
    #18 mainEntryClickHouseServer(int, char**) /home/alesap/code/cpp/ClickHouse/programs/server/Server.cpp:99:20 (clickhouse+0x753bd53)
    #19 main /home/alesap/code/cpp/ClickHouse/programs/main.cpp:400:12 (clickhouse+0x753b032)

  Mutex M93022325842250176 acquired here while holding mutex M1458 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+0x12f78f99)
    #2 std::__1::mutex::lock() /home/alesap/code/cpp/ClickHouse/contrib/libcxx/src/mutex.cpp:33:14 (clickhouse+0x12f78f99)
    #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+0xf7e2648)
    #4 DB::ContextAccess::getAccess() const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:364:21 (clickhouse+0xf7e2648)
    #5 bool DB::ContextAccess::isGrantedImpl2<true, std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(DB::AccessFlags const&, std::__1::basic_string_view<char, std::__1::char_traits<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:374:26 (clickhouse+0xf7e2648)
    #6 bool DB::ContextAccess::isGrantedImpl<true, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(DB::AccessFlags const&, std::__1::basic_string_view<char, std::__1::char_traits<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:394:12 (clickhouse+0xf7d9741)
    #7 bool DB::ContextAccess::isGrantedImpl<true>(DB::AccessRightsElement const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:405:16 (clickhouse+0xf7d9741)
    #8 bool DB::ContextAccess::isGrantedImpl<true>(DB::AccessRightsElements const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:414:14 (clickhouse+0xf7d1f1a)
    #9 DB::ContextAccess::hasGrantOption(DB::AccessRightsElements const&) const /home/alesap/code/cpp/ClickHouse/src/Access/ContextAccess.cpp:435:90 (clickhouse+0xf7d1f1a)
    #10 DB::(anonymous namespace)::doRevokeAccess(DB::AccessRights&, DB::AccessRightsElements const&, bool, std::__1::shared_ptr<DB::ContextAccess const> const&) /home/alesap/code/cpp/ClickHouse/src/Interpreters/InterpreterGrantQuery.cpp:58:34 (clickhouse+0xff63121)
    #11 void DB::(anonymous namespace)::updateFromQueryTemplate<DB::User>(DB::User&, DB::ASTGrantQuery const&, DB::RolesOrUsersSet const&, std::__1::unordered_map<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<StrongTypedef<DB::UInt128, DB::UUIDTag> >, std::__1::equal_to<StrongTypedef<DB::UInt128, DB::UUIDTag> >, std::__1::allocator<std::__1::pair<StrongTypedef<DB::UInt128, DB::UUIDTag> const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > const&, std::__1::shared_ptr<DB::ContextAccess const> const&) /home/alesap/code/cpp/ClickHouse/src/Interpreters/InterpreterGrantQuery.cpp:173:17 (clickhouse+0xff629e8)
    #12 DB::(anonymous namespace)::updateFromQueryImpl(DB::IAccessEntity&, DB::ASTGrantQuery const&, DB::RolesOrUsersSet const&, std::__1::unordered_map<StrongTypedef<DB::UInt128, DB::UUIDTag>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::hash<StrongTypedef<DB::UInt128, DB::UUIDTag> >, std::__1::equal_to<StrongTypedef<DB::UInt128, DB::UUIDTag> >, std::__1::allocator<std::__1::pair<StrongTypedef<DB::UInt128, DB::UUIDTag> const, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > > const&, std::__1::shared_ptr<DB::ContextAccess const> const&) /home/alesap/code/cpp/ClickHouse/src/Interpreters/InterpreterGrantQuery.cpp:198:13 (clickhouse+0xff629e8)
    #13 DB::InterpreterGrantQuery::execute()::$_0::operator()(std::__1::shared_ptr<DB::IAccessEntity const> const&) const /home/alesap/code/cpp/ClickHouse/src/Interpreters/InterpreterGrantQuery.cpp:247:9 (clickhouse+0xff63900)
    #14 decltype(std::__1::forward<DB::InterpreterGrantQuery::execute()::$_0&>(fp)(std::__1::forward<std::__1::shared_ptr<DB::IAccessEntity const> const&>(fp0))) std::__1::__invoke<DB::InterpreterGrantQuery::execute()::$_0&, std::__1::shared_ptr<DB::IAccessEntity const> const&>(DB::InterpreterGrantQuery::execute()::$_0&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/type_traits:3519:1 (clickhouse+0xff63900)
    #15 std::__1::shared_ptr<DB::IAccessEntity const> std::__1::__invoke_void_return_wrapper<std::__1::shared_ptr<DB::IAccessEntity const> >::__call<DB::InterpreterGrantQuery::execute()::$_0&, std::__1::shared_ptr<DB::IAccessEntity const> const&>(DB::InterpreterGrantQuery::execute()::$_0&, std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/__functional_base:317:16 (clickhouse+0xff63900)
    #16 std::__1::__function::__alloc_func<DB::InterpreterGrantQuery::execute()::$_0, std::__1::allocator<DB::InterpreterGrantQuery::execute()::$_0>, std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1540:16 (clickhouse+0xff63900)
    #17 std::__1::__function::__func<DB::InterpreterGrantQuery::execute()::$_0, std::__1::allocator<DB::InterpreterGrantQuery::execute()::$_0>, std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(std::__1::shared_ptr<DB::IAccessEntity const> const&) /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1714:12 (clickhouse+0xff63900)
    #18 std::__1::__function::__value_func<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(std::__1::shared_ptr<DB::IAccessEntity const> const&) const /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:1867:16 (clickhouse+0xf7fade0)
    #19 std::__1::function<std::__1::shared_ptr<DB::IAccessEntity const> (std::__1::shared_ptr<DB::IAccessEntity const> const&)>::operator()(std::__1::shared_ptr<DB::IAccessEntity const> const&) const /home/alesap/code/cpp/ClickHouse/contrib/libcxx/include/functional:2473:12 (clickhouse+0xf7fade0)
    #20 DB::DiskAccessStorage::updateNoLock(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&, 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> > > >&) /home/alesap/code/cpp/ClickHouse/src/Access/DiskAccessStorage.cpp:713:23 (clickhouse+0xf7fade0)
    #21 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:697:5 (clickhouse+0xf7fa951)
    #22 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)
    #23 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)
    #24 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)
    #25 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)
    #26 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)
    #27 DB::InterpreterGrantQuery::execute() /home/alesap/code/cpp/ClickHouse/src/Interpreters/InterpreterGrantQuery.cpp:251:20 (clickhouse+0xff62205)
    #28 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)
    #29 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)
    #30 DB::TCPHandler::runImpl() /home/alesap/code/cpp/ClickHouse/src/Server/TCPHandler.cpp:254:24 (clickhouse+0x10aa4f51)
    #31 DB::TCPHandler::run() /home/alesap/code/cpp/ClickHouse/src/Server/TCPHandler.cpp:1311:9 (clickhouse+0x10aafcd7)
    #32 Poco::Net::TCPServerConnection::start() /home/alesap/code/cpp/ClickHouse/contrib/poco/Net/src/TCPServerConnection.cpp:43:3 (clickhouse+0x11ab9b02)
    #33 Poco::Net::TCPServerDispatcher::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Net/src/TCPServerDispatcher.cpp:114:20 (clickhouse+0x11aba219)
    #34 Poco::PooledThread::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/ThreadPool.cpp:199:14 (clickhouse+0x11c1c281)
    #35 Poco::(anonymous namespace)::RunnableHolder::run() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread.cpp:55:11 (clickhouse+0x11c1a94f)
    #36 Poco::ThreadImpl::runnableEntry(void*) /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread_POSIX.cpp:345:27 (clickhouse+0x11c192b7)

  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+0x11c18d67)
    #2 Poco::Thread::start(Poco::Runnable&) /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/Thread.cpp:128:2 (clickhouse+0x11c1a3bc)
    #3 Poco::PooledThread::start() /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/ThreadPool.cpp:85:10 (clickhouse+0x11c1c682)
    #4 Poco::ThreadPool::ThreadPool(int, int, int, int) /home/alesap/code/cpp/ClickHouse/contrib/poco/Foundation/src/ThreadPool.cpp:252:12 (clickhouse+0x11c1c682)
    #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+0x11acd93b)
    #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+0x11ae84d8)
    #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