As far as I can tell the fault occurs in random places indicating no thread safety. E.g. another example of stack trace:
(gdb) bt
#0 0x00007f654454d1de in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const () from /usr/lib64/libstdc++.so.6
#1 0x000000000047a6a0 in std::operator< <char, std::char_traits<char>, std::allocator<char> > (__lhs="groupname", __rhs=<error reading variable: Cannot access memory at address 0x7f676a0832e0>) at /usr/include/c++/11/bits/basic_string.h:6343
#2 0x000000000047b5b0 in std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator() (this=0x7f6101bb4930, __x="groupname",
__y=<error reading variable: Cannot access memory at address 0x7f676a0832e0>) at /usr/include/c++/11/bits/stl_function.h:400
#3 0x000000000048b5f7 in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::_Identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_lower_bound (this=0x7f6101bb4930, __x=0x7f609c01ce80, __y=0x7f6101bb4938, __k=<error reading variable: Cannot access memory at address 0x7f676a0832e0>) at /usr/include/c++/11/bits/stl_tree.h:1921
#4 0x0000000000489c14 in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::_Identity<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::find (this=0x7f6101bb4930, __k=<error reading variable: Cannot access memory at address 0x7f676a0832e0>) at /usr/include/c++/11/bits/stl_tree.h:2536
#5 0x00007f6549bc498a in std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::find(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const () from /usr/lib64/libctacommon.so.0
#6 0x00007f6549bc4533 in cta::log::LogContext::ParamNameMatcher::operator()(cta::log::Param const&) const () from /usr/lib64/libctacommon.so.0
#7 0x00007f6549bc6dc9 in bool __gnu_cxx::__ops::_Iter_pred<cta::log::LogContext::ParamNameMatcher>::operator()<std::_List_iterator<cta::log::Param> >(std::_List_iterator<cta::log::Param>) () from /usr/lib64/libctacommon.so.0
#8 0x00007f6549bc6bec in std::_List_iterator<cta::log::Param> std::__find_if<std::_List_iterator<cta::log::Param>, __gnu_cxx::__ops::_Iter_pred<cta::log::LogContext::ParamNameMatcher> >(std::_List_iterator<cta::log::Param>, std::_List_iterator<cta::log::Param>, __gnu_cxx::__ops::_Iter_pred<cta::log::LogContext::ParamNameMatcher>, std::input_iterator_tag) () from /usr/lib64/libctacommon.so.0
#9 0x00007f6549bc5ceb in std::_List_iterator<cta::log::Param> std::__find_if<std::_List_iterator<cta::log::Param>, __gnu_cxx::__ops::_Iter_pred<cta::log::LogContext::ParamNameMatcher> >(std::_List_iterator<cta::log::Param>, std::_List_iterator<cta::log::Param>, __gnu_cxx::__ops::_Iter_pred<cta::log::LogContext::ParamNameMatcher>) () from /usr/lib64/libctacommon.so.0
#10 0x00007f6549bc4c0a in std::_List_iterator<cta::log::Param> std::find_if<std::_List_iterator<cta::log::Param>, cta::log::LogContext::ParamNameMatcher>(std::_List_iterator<cta::log::Param>, std::_List_iterator<cta::log::Param>, cta::log::LogContext::ParamNameMatcher) () from /usr/lib64/libctacommon.so.0
#11 0x00007f6549bc37f3 in cta::log::LogContext::pushOrReplace(cta::log::Param const&) () from /usr/lib64/libctacommon.so.0
#12 0x000000000047a963 in cta::log::ScopedParamContainer::add<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > (this=0x7f6101bb4be0, s="groupname", t="eosusers")
at /usr/src/debug/cta-5.11.2.0-1.el9.x86_64/common/log/LogContext.hpp:148
#13 0x00000000004785df in cta::frontend::grpc::CtaRpcImpl::Retrieve (this=0x7ffcf7e03ea0, context=0x7f609c014998, request=0x7f609c0037f0, response=0x7f6101bb5040)
at /usr/src/debug/cta-5.11.2.0-1.el9.x86_64/frontend/grpc/FrontendGrpcService.cpp:139
#14 0x00000000004fbf5e in operator() (__closure=0x203f608, service=0x7ffcf7e03ea0, ctx=0x7f609c014998, req=0x7f609c0037f0, resp=0x7f6101bb5040) at /usr/src/debug/cta-5.11.2.0-1.el9.x86_64/build/eos_cta/cta_frontend.grpc.pb.cc:251
#15 0x0000000000500ec0 in std::__invoke_impl<grpc::Status, cta::xrd::CtaRpc::Service::Service()::<lambda(cta::xrd::CtaRpc::Service*, grpc::ServerContext*, const cta::xrd::Request*, cta::xrd::Response*)>&, cta::xrd::CtaRpc::Service*, grpc::ServerContext*, const cta::xrd::Request*, cta::xrd::Response*>(std::__invoke_other, struct {...} &) (__f=...) at /usr/include/c++/11/bits/invoke.h:61
#16 0x00000000004ffa6b in std::__invoke_r<grpc::Status, cta::xrd::CtaRpc::Service::Service()::<lambda(cta::xrd::CtaRpc::Service*, grpc::ServerContext*, const cta::xrd::Request*, cta::xrd::Response*)>&, cta::xrd::CtaRpc::Service*, grpc::ServerContext*, const cta::xrd::Request*, cta::xrd::Response*>(struct {...} &) (__fn=...) at /usr/include/c++/11/bits/invoke.h:116
#17 0x00000000004fe6b6 in std::_Function_handler<grpc::Status(cta::xrd::CtaRpc::Service*, grpc::ServerContext*, const cta::xrd::Request*, cta::xrd::Response*), cta::xrd::CtaRpc::Service::Service()::<lambda(cta::xrd::CtaRpc::Service*, grpc::ServerContext*, const cta::xrd::Request*, cta::xrd::Response*)> >::_M_invoke(const std::_Any_data &, cta::xrd::CtaRpc::Service *&&, grpc::ServerContext *&&, const cta::xrd::Request *&&, cta::xrd::Response *&&) (__functor=...,
__args#0=@0x7f6101bb4e78: 0x7ffcf7e03ea0, __args#1=@0x7f6101bb4e70: 0x7f609c014998, __args#2=@0x7f6101bb4e68: 0x7f609c0037f0, __args#3=@0x7f6101bb4e60: 0x7f6101bb5040) at /usr/include/c++/11/bits/std_function.h:291
#18 0x000000000052d2b1 in std::function<grpc::Status (cta::xrd::CtaRpc::Service*, grpc::ServerContext*, cta::xrd::Request const*, cta::xrd::Response*)>::operator()(cta::xrd::CtaRpc::Service*, grpc::ServerContext*, cta::xrd::Request const*, cta::xrd::Response*) const (this=0x203f608, __args#0=0x7ffcf7e03ea0, __args#1=0x7f609c014998, __args#2=0x7f609c0037f0, __args#3=0x7f6101bb5040) at /usr/include/c++/11/bits/std_function.h:590
#19 0x0000000000524773 in grpc::internal::RpcMethodHandler<cta::xrd::CtaRpc::Service, cta::xrd::Request, cta::xrd::Response, google::protobuf::MessageLite, google::protobuf::MessageLite>::RunHandler(grpc::internal::MethodHandler::HandlerParameter const&)::{lambda()#1}::operator()() const (__closure=0x7f6101bb4f80) at /usr/include/grpcpp/impl/codegen/method_handler.h:116
#20 0x000000000052d309 in grpc::internal::CatchingFunctionHandler<grpc::internal::RpcMethodHandler<cta::xrd::CtaRpc::Service, cta::xrd::Request, cta::xrd::Response, google::protobuf::MessageLite, google::protobuf::MessageLite>::RunHandler(grpc::internal::MethodHandler::HandlerParameter const&)::{lambda()#1}>(grpc::internal::RpcMethodHandler<cta::xrd::CtaRpc::Service, cta::xrd::Request, cta::xrd::Response, google::protobuf::MessageLite, google::protobuf::MessageLite>::RunHandler(grpc::internal::MethodHandler::HandlerParameter const&)::{lambda()#1}&&) (handler=...) at /usr/include/grpcpp/impl/codegen/method_handler.h:44
#21 0x0000000000524839 in grpc::internal::RpcMethodHandler<cta::xrd::CtaRpc::Service, cta::xrd::Request, cta::xrd::Response, google::protobuf::MessageLite, google::protobuf::MessageLite>::RunHandler (this=0x203f600, param=...)
at /usr/include/grpcpp/impl/codegen/method_handler.h:113
#22 0x00007f654bfc2c1d in grpc::Server::SyncRequest::ContinueRunAfterInterception() () from /usr/lib64/libgrpc++.so.1.46
#23 0x00007f654bfc94dc in grpc::ThreadManager::MainWorkLoop() () from /usr/lib64/libgrpc++.so.1.46
#24 0x00007f654bfc9610 in grpc::ThreadManager::WorkerThread::Run() () from /usr/lib64/libgrpc++.so.1.46
#25 0x00007f654c365f81 in grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&)::{lambda(void*)#1}::_FUN(void*) ()
from /usr/lib64/libgpr.so.24
#26 0x00007f6544089c02 in start_thread () from /usr/lib64/libc.so.6
--Type <RET> for more, q to quit, c to continue without paging--
#27 0x00007f654410ec40 in clone3 () from /usr/lib64/libc.so.6
#13 0x00000000004785df in cta::frontend::grpc::CtaRpcImpl::Retrieve (this=0x7ffcf7e03ea0, context=0x7f609c014998, request=0x7f609c0037f0, response=0x7f6101bb5040)
at /usr/src/debug/cta-5.11.2.0-1.el9.x86_64/frontend/grpc/FrontendGrpcService.cpp:139
on line 139:
sp.add("groupname", request->notification().cli().user().groupname());
where sp is ScopedParamContainer
#12 0x000000000047a963 in cta::log::ScopedParamContainer::add<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > (this=0x7f6101bb4be0, s="groupname", t="eosusers")
at /usr/src/debug/cta-5.11.2.0-1.el9.x86_64/common/log/LogContext.hpp:148
line 148 of /usr/src/debug/cta-5.11.2.0-1.el9.x86_64/common/log/LogContext.hpp:
ScopedParamContainer& add(const std::string& s, const T& t) {
m_context.pushOrReplace(Param(s,t)); <--- line 148
I think you can reproduce the problem by hiting the GRPC front-end with muliple simultaneous Retrieve requests.
Hope this helps,
Dmitry