[SERVER-70516] Thread-unsafe StopWatch instance is shared by multiple threads Created: 13/Oct/22  Updated: 27/Oct/23  Resolved: 18/Jul/23

Status: Closed
Project: Core Server
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor - P4
Reporter: Romans Kasperovics Assignee: Jennifer Wang (Inactive)
Resolution: Gone away Votes: 0
Labels: neweng, tsan
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Depends
Duplicate
is duplicated by SERVER-69426 TSAN race condition in clock source.h Closed
Assigned Teams:
Service Arch
Operating System: ALL
Sprint: Service Arch 2023-07-24
Participants:
Linked BF Score: 1

 Description   

The method NetworkInterfaceTL::ExhaustCommandState::make() uses the future construct which captures and reads ExhaustCommandState::stopwatch object.

The problem is that in db_integration_test (src/mongo/db/exhaust_cursor_currentop_integration_test.cpp:358) this stopwatch object is created on a different thread. This is why TSAN is reporting a possible data race.



 Comments   
Comment by Romans Kasperovics [ 14/Oct/22 ]

Future thread:

#0  mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32::operator()(mongo::Status) const (...) at network_interface_tl.cpp:1055
#1  mongo::future_details::call<mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&, mongo::Status>(mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&, mongo::Status&&) (...) at future_impl.h:291
#2  mongo::future_details::statusCall<mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&, mongo::Status>(mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&, mongo::Status&&) (...) at future_impl.h:314
#3  mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::onError<mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32, 0>(mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&&) &&::{lambda()#1}::operator()() const::{lambda(mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*, mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*)#1}::operator()(mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*, mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*) (...) at future_impl.h:1124
#4  mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::makeContinuation<mongo::future_details::FakeVoid, mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::onError<mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32, 0>(mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&&) &&::{lambda()#1}::operator()() const::{lambda(mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*, mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*)#1}>(mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&&)::{lambda(mongo::future_details::SharedStateBase*)#1}::operator()(mongo::future_details::SharedStateBase*) (...) at future_impl.h:1351
#5  mongo::unique_function<void (mongo::future_details::SharedStateBase*)>::makeImpl<mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::makeContinuation<mongo::future_details::FakeVoid, mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::onError<mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32, 0>(mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&&) &&::{lambda()#1}::operator()() const::{lambda(mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*, mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*)#1}>(mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&&)::{lambda(mongo::future_details::SharedStateBase*)#1}>(mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::makeContinuation<mongo::future_details::FakeVoid, mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::onError<mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32, 0>(mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&&) &&::{lambda()#1}::operator()() const::{lambda(mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*, mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*)#1}>(mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&)::$_32&&)::{lambda(mongo::future_details::SharedStateBase*)#1}&&)::SpecificImpl::call(mongo::future_details::SharedStateBase*&&) (...) at functional.h:259
#6  mongo::unique_function<void (mongo::future_details::SharedStateBase*)>::operator()(mongo::future_details::SharedStateBase*) const (...) at functional.h:217
#7  mongo::future_details::SharedStateBase::transitionToFinished (...) at future_impl.h:482
#8  mongo::future_details::SharedStateBase::setError (...) at future_impl.h:508
#9  mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>::setFrom<0, 0> (...) at future_impl.h:649
#10 mongo::Promise<void>::setFrom(mongo::Status)::{lambda(boost::intrusive_ptr<mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid> >&&)#1}::operator()(boost::intrusive_ptr<mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid> >&&) const (...) at future.h:959
#11 mongo::Promise<void>::setImpl<mongo::Promise<void>::setFrom(mongo::Status)::{lambda(boost::intrusive_ptr<mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid> >&&)#1}>(mongo::Promise<void>::setFrom(mongo::Status)::{lambda(boost::intrusive_ptr<mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid> >&&)#1}&&) (...) at future.h:1018
#12 mongo::Promise<void>::setFrom (...) at future.h:958
#13 mongo::executor::NetworkInterfaceTL::ExhaustCommandState::fulfillFinalPromise (...) at network_interface_tl.cpp:1095
#14 mongo::executor::NetworkInterfaceTL::cancelCommand (...) at network_interface_tl.cpp:1227
#15 mongo::executor::ThreadPoolTaskExecutor::cancel (...) at thread_pool_task_executor.cpp:494
#16 mongo::SingleServerDiscoveryMonitor::_cancelOutstandingRequest (...) at server_discovery_monitor.cpp:388
#17 mongo::SingleServerDiscoveryMonitor::shutdown (...) at server_discovery_monitor.cpp:376
#18 mongo::ServerDiscoveryMonitor::shutdown (...) at server_discovery_monitor.cpp:482
#19 mongo::StreamableReplicaSetMonitor::drop (...) at streamable_replica_set_monitor.cpp:306
#20 mongo::StreamableReplicaSetMonitor::~StreamableReplicaSetMonitor (...) at streamable_replica_set_monitor.cpp:216
#21 __gnu_cxx::new_allocator<mongo::StreamableReplicaSetMonitor>::destroy<mongo::StreamableReplicaSetMonitor> (...) at new_allocator.h:140
#22 std::allocator_traits<std::allocator<mongo::StreamableReplicaSetMonitor> >::destroy<mongo::StreamableReplicaSetMonitor> (...) at alloc_traits.h:487
#23 std::_Sp_counted_ptr_inplace<mongo::StreamableReplicaSetMonitor, std::allocator<mongo::StreamableReplicaSetMonitor>, (__gnu_cxx::_Lock_policy)2>::_M_dispose (...) at shared_ptr_base.h:554
#24 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (...) at shared_ptr_base.h:155
#25 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (...) at shared_ptr_base.h:728
#26 std::__shared_ptr<mongo::ReplicaSetMonitor, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (...) at shared_ptr_base.h:1167
#27 std::shared_ptr<mongo::ReplicaSetMonitor>::~shared_ptr (...) at shared_ptr.h:103
#28 mongo::DBClientReplicaSet::~DBClientReplicaSet (...) at dbclient_rs.h:58
#29 mongo::DBClientReplicaSet::~DBClientReplicaSet (...) at dbclient_rs.h:58
#30 std::default_delete<mongo::DBClientBase>::operator() (...) at unique_ptr.h:81
#31 std::unique_ptr<mongo::DBClientBase, std::default_delete<mongo::DBClientBase> >::~unique_ptr (...) at unique_ptr.h:277
#32 mongo::UnitTest_SuiteNameCurrentOpExhaustCursorTestTestNameExhaustCursorUpdatesLastKnownCommittedOpTime::_doTest (...) at exhaust_cursor_currentop_integration_test.cpp:439
#33 mongo::unittest::Test::run (...) at unittest.cpp:244
#34 mongo::unittest::Test::RegistrationAgent<mongo::UnitTest_SuiteNameCurrentOpExhaustCursorTestTestNameExhaustCursorUpdatesLastKnownCommittedOpTime>::RegistrationAgent(mongo::unittest::TestInfo const*)::{lambda()#1}::operator()() const (...) at unittest.h:602
#35 std::_Function_handler<void (), mongo::unittest::Test::RegistrationAgent<mongo::UnitTest_SuiteNameCurrentOpExhaustCursorTestTestNameExhaustCursorUpdatesLastKnownCommittedOpTime>::RegistrationAgent(mongo::unittest::TestInfo const*)::{lambda()#1}>::_M_invoke(std::_Any_data const&) (...) at std_function.h:297
#36 std::function<void ()>::operator()() const (...) at std_function.h:687
#37 mongo::unittest::Suite::run (...) at unittest.cpp:439
#38 mongo::unittest::Suite::run (...) at unittest.cpp:508
#39 main (...) at integration_test_main.cpp:92

Comment by Romans Kasperovics [ 14/Oct/22 ]

NetworkInterfaceTL thread:

#0  mongo::executor::NetworkInterfaceTL::ExhaustCommandState::make(mongo::executor::NetworkInterfaceTL*, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >, mongo::executor::TaskExecutor::CallbackHandle const&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&) (...)
    at network_interface_tl.cpp:1050
#1  mongo::executor::NetworkInterfaceTL::startExhaustCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&) (...)
    at network_interface_tl.cpp:1176
#2  mongo::executor::ThreadPoolTaskExecutor::scheduleExhaustRemoteCommandOnAny(mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > > const&, std::function<void (mongo::executor::TaskExecutor::RemoteCommandOnAnyCallbackArgs const&)> const&, std::shared_ptr<mongo::Baton> const&) (...) at thread_pool_task_executor.cpp:703
#3  mongo::executor::TaskExecutor::scheduleExhaustRemoteCommand(mongo::executor::RemoteCommandRequestImpl<mongo::HostAndPort> const&, std::function<void (mongo::executor::TaskExecutor::RemoteCommandCallbackArgs const&)> const&, std::shared_ptr<mongo::Baton> const&) (...) at task_executor.cpp:333
#4  mongo::SingleServerDiscoveryMonitor::_scheduleStreamableHello (...) at server_discovery_monitor.cpp:257
#5  mongo::SingleServerDiscoveryMonitor::_doRemoteCommand()::$_14::operator()() const (...) at server_discovery_monitor.cpp:222
#6  mongo::SingleServerDiscoveryMonitor::_doRemoteCommand (...) at server_discovery_monitor.cpp:220
#7  mongo::SingleServerDiscoveryMonitor::_scheduleNextHello(mongo::WithLock, mongo::Duration<std::ratio<1l, 1000l> >)::$_13::operator()(mongo::executor::TaskExecutor::CallbackArgs const&) const (...) at server_discovery_monitor.cpp:204
#8  mongo::unique_function<void (mongo::executor::TaskExecutor::CallbackArgs const&)>::makeImpl<mongo::SingleServerDiscoveryMonitor::_scheduleNextHello(mongo::WithLock, mongo::Duration<std::ratio<1l, 1000l> >)::$_13>(mongo::SingleServerDiscoveryMonitor::_scheduleNextHello(mongo::WithLock, mongo::Duration<std::ratio<1l, 1000l> >)::$_13&&)::SpecificImpl::call(mongo::executor::TaskExecutor::CallbackArgs const&) (...) at functional.h:259
#9  mongo::unique_function<void (mongo::executor::TaskExecutor::CallbackArgs const&)>::operator()(mongo::executor::TaskExecutor::CallbackArgs const&) const (...) at functional.h:217
#10 mongo::executor::ThreadPoolTaskExecutor::runCallback (...) at thread_pool_task_executor.cpp:663
#11 mongo::executor::ThreadPoolTaskExecutor::scheduleIntoPool_inlock(std::__cxx11::list<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState>, std::allocator<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState> > >*, std::_List_iterator<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState> > const&, std::_List_iterator<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState> > const&, std::unique_lock<mongo::latch_detail::Latch>)::$_3::operator()<mongo::Status>(mongo::Status) const (...)
    at thread_pool_task_executor.cpp:639
#12 mongo::unique_function<void (mongo::Status)>::makeImpl<mongo::executor::ThreadPoolTaskExecutor::scheduleIntoPool_inlock(std::__cxx11::list<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState>, std::allocator<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState> > >*, std::_List_iterator<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState> > const&, std::_List_iterator<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState> > const&, std::unique_lock<mongo::latch_detail::Latch>)::$_3>(mongo::executor::ThreadPoolTaskExecutor::scheduleIntoPool_inlock(std::__cxx11::list<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState>, std::allocator<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState> > >*, std::_List_iterator<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState> > const&, std::_List_iterator<std::shared_ptr<mongo::executor::ThreadPoolTaskExecutor::CallbackState> > const&, std::unique_lock<mongo::latch_detail::Latch>)::$_3&&)::SpecificImpl::call(mongo::Status&&) (...) at functional.h:259
#13 mongo::unique_function<void (mongo::Status)>::operator()(mongo::Status) const (...) at functional.h:217
#14 mongo::executor::NetworkInterfaceThreadPool::_consumeTasksInline (...) at network_interface_thread_pool.cpp:166
#15 mongo::executor::NetworkInterfaceThreadPool::_consumeTasks (...) at network_interface_thread_pool.cpp:136
#16 mongo::executor::NetworkInterfaceThreadPool::schedule(mongo::unique_function<void (mongo::Status)>) (...) at network_interface_thread_pool.cpp:119
#17 mongo::executor::ThreadPoolTaskExecutor::scheduleIntoPool_inlock (...) at thread_pool_task_executor.cpp:630
#18 mongo::executor::ThreadPoolTaskExecutor::scheduleIntoPool_inlock (...) at thread_pool_task_executor.cpp:589
#19 mongo::executor::ThreadPoolTaskExecutor::scheduleRemoteCommandOnAny(mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > > const&, std::function<void (mongo::executor::TaskExecutor::RemoteCommandOnAnyCallbackArgs const&)> const&, std::shared_ptr<mongo::Baton> const&)::$_1::operator()(mongo::executor::RemoteCommandOnAnyResponse const&) const (...) at thread_pool_task_executor.cpp:474
#20 mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>::makeImpl<mongo::executor::ThreadPoolTaskExecutor::scheduleRemoteCommandOnAny(mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > > const&, std::function<void (mongo::executor::TaskExecutor::RemoteCommandOnAnyCallbackArgs const&)> const&, std::shared_ptr<mongo::Baton> const&)::$_1>(mongo::executor::ThreadPoolTaskExecutor::scheduleRemoteCommandOnAny(mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > > const&, std::function<void (mongo::executor::TaskExecutor::RemoteCommandOnAnyCallbackArgs const&)> const&, std::shared_ptr<mongo::Baton> const&)::$_1&&)::SpecificImpl::call(mongo::executor::RemoteCommandOnAnyResponse const&) (...) at functional.h:259
#21 mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>::operator()(mongo::executor::RemoteCommandOnAnyResponse const&) const (...) at functional.h:217
#22 mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13::operator()(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>) const::{lambda()#3}::operator()() const (...) at network_interface_tl.cpp:661
#23 mongo::executor::(anonymous namespace)::catchingInvoke<mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13::operator()(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>) const::{lambda()#3}, mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13::operator()(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>) const::{lambda(mongo::Status&)#1}>(mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13::operator()(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>) const::{lambda()#3}&&, mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13::operator()(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>) const::{lambda(mongo::Status&)#1}&&, mongo::StringData) (...)
    at network_interface_tl.cpp:105
#24 mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13::operator()(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>) const (...) at network_interface_tl.cpp:661
#25 mongo::ExecutorFuture<mongo::executor::RemoteCommandOnAnyResponse>::getAsync<mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13, 0>(mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13&&) &&::{lambda(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>)#1}::operator()(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>)::{lambda(mongo::Status)#1}::operator()(mongo::Status) (...) at future.h:710
#26 mongo::unique_function<void (mongo::Status)>::makeImpl<mongo::ExecutorFuture<mongo::executor::RemoteCommandOnAnyResponse>::getAsync<mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13, 0>(mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13&&) &&::{lambda(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>)#1}::operator()(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>)::{lambda(mongo::Status)#1}>(mongo::ExecutorFuture<mongo::executor::RemoteCommandOnAnyResponse>::getAsync<mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13, 0>(mongo::CleanupFuturePolicy<false>, mongo::executor::NetworkInterfaceTL::startCommand(mongo::executor::TaskExecutor::CallbackHandle const&, mongo::executor::RemoteCommandRequestImpl<std::vector<mongo::HostAndPort, std::allocator<mongo::HostAndPort> > >&, mongo::unique_function<void (mongo::executor::RemoteCommandOnAnyResponse const&)>&&, std::shared_ptr<mongo::Baton> const&)::$_13&&) &&::{lambda(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>)#1}::operator()(mongo::StatusWith<mongo::executor::RemoteCommandOnAnyResponse>)::{lambda(mongo::Status)#1}&&)::SpecificImpl::call(mongo::Status&&) (...) at functional.h:259
#27 mongo::unique_function<void (mongo::Status)>::operator()(mongo::Status) const (...) at functional.h:217
#28 mongo::GuaranteedExecutor::enforceRunOnce(mongo::unique_function<void (mongo::Status)>&&)::{lambda(mongo::Status)#1}::operator()(mongo::Status) (...) at out_of_line_executor.h:148
#29 mongo::unique_function<void (mongo::Status)>::makeImpl<mongo::GuaranteedExecutor::enforceRunOnce(mongo::unique_function<void (mongo::Status)>&&)::{lambda(mongo::Status)#1}>(mongo::GuaranteedExecutor::enforceRunOnce(mongo::unique_function<void (mongo::Status)>&&)::{lambda(mongo::Status)#1}&&)::SpecificImpl::call(mongo::Status&&) (...) at functional.h:259
#30 mongo::unique_function<void (mongo::Status)>::operator()(mongo::Status) const (...) at functional.h:217
#31 mongo::ExecutorStats::wrapTask(mongo::unique_function<void (mongo::Status)>&&)::$_0::operator()(mongo::Status) const (...) at executor_stats.cpp:82
#32 mongo::unique_function<void (mongo::Status)>::makeImpl<mongo::ExecutorStats::wrapTask(mongo::unique_function<void (mongo::Status)>&&)::$_0>(mongo::ExecutorStats::wrapTask(mongo::unique_function<void (mongo::Status)>&&)::$_0&&)::SpecificImpl::call(mongo::Status&&) (...) at functional.h:259
#33 mongo::unique_function<void (mongo::Status)>::operator()(mongo::Status) const (...) at functional.h:217
#34 mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}::operator()() const (...) at transport_layer_asio.cpp:245
#35 asio::asio_handler_invoke<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}>(mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}&, ...) (...) at handler_invoke_hook.hpp:68
#36 asio_handler_invoke_helpers::invoke<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}, mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}>(mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}&, mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}&) (...) at handler_invoke_helpers.hpp:37
#37 asio::system_executor::dispatch<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}, std::allocator<void> >(mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}&&, std::allocator<void> const&) const (...) at system_executor.hpp:38
#38 asio::detail::work_dispatcher<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}>::operator()() (...)
    at work_dispatcher.hpp:57
#39 asio::asio_handler_invoke<asio::detail::work_dispatcher<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}> >(asio::detail::work_dispatcher<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}>&, ...) (...) at handler_invoke_hook.hpp:68
#40 asio_handler_invoke_helpers::invoke<asio::detail::work_dispatcher<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}>, asio::detail::work_dispatcher<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}> >(asio::detail::work_dispatcher<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}>&, asio::detail::work_dispatcher<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}>&) (...) at handler_invoke_helpers.hpp:37
#41 asio::detail::executor_op<asio::detail::work_dispatcher<mongo::transport::TransportLayerASIO::ASIOReactor::schedule(mongo::unique_function<void (mongo::Status)>)::{lambda()#1}>, std::allocator<void>, asio::detail::scheduler_operation>::do_complete(void*, asio::detail::scheduler_operation*, std::error_code const&, unsigned long) (...) at executor_op.hpp:69
#42 asio::detail::scheduler_operation::complete (...) at scheduler_operation.hpp:39
#43 asio::detail::scheduler::do_run_one (...) at scheduler.ipp:400
#44 asio::detail::scheduler::run (...) at scheduler.ipp:153
#45 asio::io_context::run (...) at io_context.ipp:61
#46 mongo::transport::TransportLayerASIO::ASIOReactor::run (...) at transport_layer_asio.cpp:214
#47 mongo::executor::NetworkInterfaceTL::_run (...) at network_interface_tl.cpp:285
#48 mongo::executor::NetworkInterfaceTL::startup()::$_1::operator()() const (...) at network_interface_tl.cpp:273
#49 std::__invoke_impl<void, mongo::executor::NetworkInterfaceTL::startup()::$_1>(std::__invoke_other, mongo::executor::NetworkInterfaceTL::startup()::$_1&&) (...) at invoke.h:60
#50 std::__invoke<mongo::executor::NetworkInterfaceTL::startup()::$_1>(mongo::executor::NetworkInterfaceTL::startup()::$_1&&) (...) at invoke.h:95
#51 std::__apply_impl<mongo::executor::NetworkInterfaceTL::startup()::$_1, std::tuple<>>(mongo::executor::NetworkInterfaceTL::startup()::$_1&&, std::tuple<>&&, std::integer_sequence<unsigned long>) (...) at tuple:1678
#52 std::apply<mongo::executor::NetworkInterfaceTL::startup()::$_1, std::tuple<> >(mongo::executor::NetworkInterfaceTL::startup()::$_1&&, std::tuple<>&&) (...) at tuple:1687
#53 mongo::stdx::thread::thread<mongo::executor::NetworkInterfaceTL::startup()::$_1, , 0>(mongo::executor::NetworkInterfaceTL::startup()::$_1)::{lambda()#1}::operator()() (...)
    at thread.h:194
#54 std::__invoke_impl<void, mongo::stdx::thread::thread<mongo::executor::NetworkInterfaceTL::startup()::$_1, , 0>(mongo::executor::NetworkInterfaceTL::startup()::$_1)::{lambda()#1}>(std::__invoke_other, mongo::stdx::thread::thread<mongo::executor::NetworkInterfaceTL::startup()::$_1, , 0>(mongo::executor::NetworkInterfaceTL::startup()::$_1)::{lambda()#1}&&) (...) at invoke.h:60
#55 std::__invoke<mongo::stdx::thread::thread<mongo::executor::NetworkInterfaceTL::startup()::$_1, , 0>(mongo::executor::NetworkInterfaceTL::startup()::$_1)::{lambda()#1}>(mongo::stdx::thread::thread<mongo::executor::NetworkInterfaceTL::startup()::$_1, , 0>(mongo::executor::NetworkInterfaceTL::startup()::$_1)::{lambda()#1}&&) (...) at invoke.h:95
#56 std::thread::_Invoker<std::tuple<mongo::stdx::thread::thread<mongo::executor::NetworkInterfaceTL::startup()::$_1, , 0>(mongo::executor::NetworkInterfaceTL::startup()::$_1)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (...) at thread:244
#57 std::thread::_Invoker<std::tuple<mongo::stdx::thread::thread<mongo::executor::NetworkInterfaceTL::startup()::$_1, , 0>(mongo::executor::NetworkInterfaceTL::startup()::$_1)::{lambda()#1}> >::operator()() (...) at thread:253
#58 std::thread::_State_impl<std::thread::_Invoker<std::tuple<mongo::stdx::thread::thread<mongo::executor::NetworkInterfaceTL::startup()::$_1, , 0>(mongo::executor::NetworkInterfaceTL::startup()::$_1)::{lambda()#1}> > >::_M_run() (...) at thread:196
#59 execute_native_thread_routine ()
#60 start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#61 clone () from /lib/x86_64-linux-gnu/libc.so.6

Generated at Thu Feb 08 06:16:23 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.