Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: memory leak in test_cluster_rpunit #3338

Closed
dotnwat opened this issue Dec 21, 2021 · 16 comments · Fixed by #7888
Closed

test: memory leak in test_cluster_rpunit #3338

dotnwat opened this issue Dec 21, 2021 · 16 comments · Fixed by #7888
Assignees
Labels

Comments

@dotnwat
Copy link
Member

dotnwat commented Dec 21, 2021

Splitting this specific case out of #2909.

Examples

3 cases of test_cluster_rpunit leak all for debug builds.

Last reported case Nov 10

@dotnwat dotnwat added kind/bug Something isn't working ci-failure labels Dec 21, 2021
@dotnwat dotnwat self-assigned this Dec 21, 2021
@dotnwat
Copy link
Member Author

dotnwat commented Dec 21, 2021

While testing ctest --repeat-until-fail 50 --output-on-failure -R test_cluster_rpunit I ran into a failure with test_adding_multiple_nodes which was a timeout error. I then ran that specific test 50 times without error:

ctest --repeat-until-fail 50 --output-on-failure -R test_cluster_rpunit -- -t test_adding_multiple_nodes

...

1/1 Test #30: test_cluster_rpunit ..............   Passed  121.82 sec

100% tests passed, 0 tests failed out of 1

Label Time Summary:
cluster    = 121.82 sec*proc (1 test)

I ran ctest --repeat-until-fail 50 --output-on-failure -R test_cluster_rpunit again 50 times without error.

There wasn't a lot of load on my laptop while I was running the test, but there was some.

@dotnwat
Copy link
Member Author

dotnwat commented Dec 22, 2021

Suggestion: re-run with lots of load and run overnight

@dotnwat
Copy link
Member Author

dotnwat commented Dec 22, 2021

Check John's stat script this looks like it hasn't happened in 1/1000

@dotnwat
Copy link
Member Author

dotnwat commented Feb 16, 2022

179 Unstable test: ctest.test_cluster_rpunit (1/1306 runs failed)
180 Latest failure at 2022-02-03T07:09:43.974Z: None
181 in job https://buildkite.com/redpanda/redpanda/builds/6926#24fa4c6e-d33e-4262-8aab-9592908d28ae

Unfortunately this one still looks like it is around.

@ajfabbri
Copy link
Contributor

Suggestion: enhance addr2lines logic in cmake_test.py to also resolve additional stacktraces for ASAN, then wait for a reproduction.

@jcsp
Copy link
Contributor

jcsp commented Feb 16, 2022

The most recent failure (https://buildkite.com/redpanda/redpanda/builds/6926#24fa4c6e-d33e-4262-8aab-9592908d28ae) looks like leaks of seastar internals, very similar to what was seen here: #3626 in a ducktape test. It seems like there is a very rare case where seastar shutdown is triggering LeakSanitizer, even outside of the unit test fixtures.

@dotnwat
Copy link
Member Author

dotnwat commented Jul 28, 2022

No reports of this in several months...

ACTION ITEM: asan in ducktape seems to be broken and the latest examples of this leak don't have backtraces decoded. gotta fix that.

Read on for interesting stuff related to other LeakSan stuff:


I've discovered in the past few days that seastar has a category of memory leak on shutdown related to the interaction between timers and sleeps. It's fairly easy to recreate: use a future timeout in combination with a sleep and the freeing of the sleep control structure appears to be skipped (either the futures are dangling or the then block doesn't fire because a exception is delivered).

ok the traces posted in this ticket don't look like the same thing, but the category of of problem may be the same: weird stuff happens on shutdown.

@BenPope
Copy link
Member

BenPope commented Oct 11, 2022

@dotnwat
Copy link
Member Author

dotnwat commented Oct 14, 2022

The latest reports do not show any backtrace decoding, which makes things impossible without having the binaries. And we don't seem to package up the test binaries in buildkite.

Currently trying to figure out why backtrace decoding is not working.

@dotnwat
Copy link
Member Author

dotnwat commented Oct 15, 2022

Two things helping here:

  1. Fixed the sanitizer stack trace output Symbolize sanitizer traces #6780
  2. Split up the test_cluster

Next time we hit this I think we should try to hammer whichever smaller test (from the split up test suite) to see if we can reproduce it more eaisly and in addition we could send an updated backtrace over to seastar-dev because it does look like it is originating from seastar.

@graphcareful
Copy link
Contributor

graphcareful commented Oct 19, 2022

I think i've observed this in a PR build here: https://buildkite.com/redpanda/vtools/builds/3791#0183f014-2b8b-40f7-b8fc-cb4684173ca2

Notably now that the cluster tests have been broken up the exact test that was run can be narrowed down:

The following tests FAILED:
  | 37 - test_cluster_tests_rpunit (Failed)

Seems like the file in question is src/v/cluster/tests/cluster_tests.cc

@dotnwat
Copy link
Member Author

dotnwat commented Oct 20, 2022

A couple years ago a similar leak was reported to seastar in this issue scylladb/seastar#738.

I've added a simple reproducer test in a comment on that upstream seastar issue scylladb/seastar#738 (comment).


What is happening?

In the simplest for of a net server we create a seastar server socket on core 0 and call accept on the socket to handle new connections. In reality we want to be able to spread connection handling across cores. So we can ask seastar to accept connections on different cores based on various policies.

However, under the hood there is still a single socket and seastar virtualizes some of the handling. There are advanced uses, but in the case of redpanda all new connections are accepted internally on core 0, and if the core that is supposed to handle this connection is different then internally seastar puts the connection onto a thread local list on the target core.

Then, when the target core calls accept (or accept_abort) it removes the connection from the list. It's like a rednezvous data structure. it's this thing

thread_local posix_ap_server_socket_impl::conn_map_t posix_ap_server_socket_impl::conn_q{};

the details of what all these things are isn't really important. the important part is that thread local data is destroyed when a thread exits. in the case of this data structure the salient piece is this:

        ~handle() {
            if (!_lb) {
                return;
            }
            // FIXME: future is discarded
            (void)smp::submit_to(_host_cpu, [cpu = _target_cpu, lb = std::move(_lb)] {
                lb->closed_cpu(cpu);
            });
        }

so when a thread exits anything in that conn_q data structure will cause a future to be scheduled. what is this thread? it's a reactor thread. you might see where this is starting to get weird (this is also visible from the tls_dtor call in the memleak backtrace in the linked seastar issue). needless to say this scheduled continuation being created near the exit of the reactor doesn't get cleaned up / waited on and results in a memory leak.

so how do we keep this conn_q structure clean?

redpanda solution

  • we could expect that this scenario may occur when (1) a connection is accepted from core 0 to a different core, and (2) the target core, for whatever reason, will not invoke accept or abort_accept after the connection was accepted on core 0. accept/abort_accept would clean up conn_q
  • this might occur for many reasons like a cores accept loop stopping due to errors or some shutdown path that doesn't abort_accept, etc... i've looked at some of this and haven't yet noticed anything weird.

the one race condition that appears to exist is as follows

  • net::server shutdown is split into phases. in the first phases abort_accept is called. then later some other parts of the shutdown phase completes
  • the first phase runs shutdown with an invoke_on_all which does parallel scheduling on all cores to call abort_accept
  • if some schedule results in a sequence like this for shutdown
    • core-N: abort_accept
    • (asynchronously arrival) core-0: handles new connection
    • core-0: abort_accept

then a new conn_q entry could be enqued by core-0 immediately prior to shuting down its own socket and after the target core (say core N shut down its socket). this would lead to conn_q having a orphaned entry. on DEBUG builds futures are scheduled in a shuffled order. so this may be more likely, in addition to races being more common.


Solution: if that race is the cause then the issue can be slightly mitigated by

  1. First do shutdown input procedure for core-0
  2. Then only after that is complete, shutdown the rest of the cores

finally there are some new things like

if (_rpc.local_is_initialized()) {
  _rpc.invoke_on_all(&rpc::rpc_server::shutdown_input).get();
}

which I don't fully understand. like, are there scenarios where input and abort sources aren't shutdown?

Conclusion

My opinion is that the race is fundamental and needs to be fixed in seastar. For example, the mitigation described above would only work if waiting on core 0 to shutdown guaranteed that the scheduled cross-core future which updates the conn_q container had also run, and that cannot be guaranteed.

the property that we want is that something like calling abort_accept woudl prevent future conn_q additions. unfrotunately, it doesn't really seem to be connected to a specific socket. so this might be hard. it may just mean that tls destructor or something should disable the scheduling of the backgroudn future.

@dotnwat
Copy link
Member Author

dotnwat commented Oct 24, 2022

Potential fix scylladb/seastar#1265

@andrwng
Copy link
Contributor

andrwng commented Dec 15, 2022

I think we're seeing this in test_replicas_rebalancing_tests_rpunit too:

53: �[1;34;49m/var/lib/buildkite-agent/builds/buildkite-amd64-builders-i-029f66767326a3470-1/redpanda/redpanda/src/v/cluster/tests/replicas_rebalancing_tests.cc(0): Leaving test case "test_adding_multiple_nodes"; testing time: 18323980us
53: �[0;39;49m�[1;34;49mLeaving test module "/var/lib/buildkite-agent/builds/buildkite-amd64-builders-i-029f66767326a3470-1/redpanda/redpanda/src/v/cluster/tests/replicas_rebalancing_tests.cc"; testing time: 44198205us
53: �[0;39;49m
53: �[1;32;49m*** No errors detected
53: �[0;39;49m
53: =================================================================
53: ==3231==ERROR: LeakSanitizer: detected memory leaks
53: 
53: Direct leak of 88 byte(s) in 1 object(s) allocated from:
53:     #0 0x55bcdb52e13d in operator new(unsigned long) /v/llvm/llvm/src/compiler-rt/lib/asan/asan_new_delete.cpp:95:3
53:     #1 0x55bcecff2fd8 in void seastar::future<void>::schedule<seastar::internal::promise_base_with_type<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >, seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>, seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > seastar::future<void>::then_impl_nrvo<seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>, seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > >(seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>&&)::'lambda'(seastar::internal::promise_base_with_type<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&, seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>&, seastar::future_state<seastar::internal::monostate>&&)>(seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>&&, seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&, seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > seastar::future<void>::then_impl_nrvo<seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>, seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > >(seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>&&)::'lambda'(seastar::internal::promise_base_with_type<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&, seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>&, seastar::future_state<seastar::internal::monostate>&&)&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1395:20
53:     #2 0x55bcecff2e42 in seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > seastar::future<void>::then_impl_nrvo<seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>, seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > >(seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1585:9
53:     #3 0x55bcecff2b73 in seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > seastar::future<void>::then_impl<seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>, seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > >(seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1619:16
53:     #4 0x55bcecff0ebd in seastar::internal::future_result<seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>, void>::future_type seastar::internal::call_then_impl<seastar::future<void> >::run<seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()> >(seastar::future<void>&, seastar::noncopyable_function<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > ()>&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1248:20
53:     #5 0x55bcecff06ca in seastar::lowres_clock seastar::future<void>::then<seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > seastar::get_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock>(seastar::basic_semaphore<seastar::named_semaphore_exception_factory, seastar::lowres_clock>&, unsigned long, seastar::basic_semaphore<seastar::named_semaphore_exception_factory, seastar::lowres_clock>::time_point)::'lambda'(), seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > >(seastar::named_semaphore_exception_factory&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1544:16
53:     #6 0x55bcece444a0 in seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> > seastar::get_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock>(seastar::basic_semaphore<seastar::named_semaphore_exception_factory, seastar::lowres_clock>&, unsigned long, seastar::basic_semaphore<seastar::named_semaphore_exception_factory, seastar::lowres_clock>::time_point) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/semaphore.hh:558:37
53:     #7 0x55bcecc7edb3 in seastar::smp_message_queue::submit_item(unsigned int, std::__1::chrono::time_point<seastar::lowres_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >, std::__1::unique_ptr<seastar::smp_message_queue::work_item, std::__1::default_delete<seastar::smp_message_queue::work_item> >) /v/build/v_deps_build/seastar-prefix/src/seastar/src/core/reactor.cc:3203:9
53:     #8 0x55bced8cb6be in seastar::futurize<std::__1::invoke_result<seastar::net::conntrack::handle::~handle()::'lambda'()>::type>::type seastar::smp_message_queue::submit<seastar::net::conntrack::handle::~handle()::'lambda'()>(unsigned int, seastar::smp_submit_to_options, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/smp.hh:269:9
53:     #9 0x55bced8cb0fe in seastar::futurize<std::__1::invoke_result<seastar::net::conntrack::handle::~handle()::'lambda'()>::type>::type seastar::smp::submit_to<seastar::net::conntrack::handle::~handle()::'lambda'()>(unsigned int, seastar::smp_submit_to_options, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/smp.hh:357:44
53:     #10 0x55bced8ca44d in seastar::futurize<std::__1::invoke_result<seastar::net::conntrack::handle::~handle()::'lambda'()>::type>::type seastar::smp::submit_to<seastar::net::conntrack::handle::~handle()::'lambda'()>(unsigned int, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/smp.hh:376:16
53:     #11 0x55bced8c9ff3 in seastar::net::conntrack::handle::~handle() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:88:19
53:     #12 0x55bced8ba89f in seastar::net::posix_ap_server_socket_impl::connection::~connection() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:135:12
53:     #13 0x55bced8e836f in std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>::~pair() /vectorized/llvm/bin/../include/c++/v1/__utility/pair.h:40:29
53:     #14 0x55bced8e8310 in void std::__1::__destroy_at<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>, 0>(std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>*) /vectorized/llvm/bin/../include/c++/v1/__memory/construct_at.h:56:13
53:     #15 0x55bced8e82ac in void std::__1::destroy_at<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>, 0>(std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>*) /vectorized/llvm/bin/../include/c++/v1/__memory/construct_at.h:81:5
53:     #16 0x55bced8e8010 in void std::__1::allocator_traits<std::__1::allocator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, void*> > >::destroy<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>, void, void>(std::__1::allocator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, void*> >&, std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>*) /vectorized/llvm/bin/../include/c++/v1/__memory/allocator_traits.h:317:9
53:     #17 0x55bced8e7d1b in std::__1::__hash_table<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::__unordered_map_hasher<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::__unordered_map_equal<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection> > >::__deallocate_node(std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, void*>*>*) /vectorized/llvm/bin/../include/c++/v1/__hash_table:1572:9
53:     #18 0x55bced8e6211 in std::__1::__hash_table<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::__unordered_map_hasher<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::__unordered_map_equal<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection> > >::~__hash_table() /vectorized/llvm/bin/../include/c++/v1/__hash_table:1511:5
53:     #19 0x55bced8b8eb8 in std::__1::unordered_multimap<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, std::__1::allocator<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection> > >::~unordered_multimap() /vectorized/llvm/bin/../include/c++/v1/unordered_map:2026:5
53:     #20 0x7f2ca22dd82e in __call_tls_dtors (/lib64/libc.so.6+0x4582e) (BuildId: 6e7b96dfb83f0bdcb6a410469b82f86415e5ada3)
53: 
53: Indirect leak of 192 byte(s) in 1 object(s) allocated from:
53:     #0 0x55bcdb52e13d in operator new(unsigned long) /v/llvm/llvm/src/compiler-rt/lib/asan/asan_new_delete.cpp:95:3
53:     #1 0x55bcdb5746dc in void* std::__1::__libcpp_operator_new<unsigned long>(unsigned long) /vectorized/llvm/bin/../include/c++/v1/new:245:10
53:     #2 0x55bcdb5745f4 in std::__1::__libcpp_allocate(unsigned long, unsigned long) /vectorized/llvm/bin/../include/c++/v1/new:271:10
53:     #3 0x55bcdea83232 in std::__1::allocator<unsigned int>::allocate(unsigned long) /vectorized/llvm/bin/../include/c++/v1/__memory/allocator.h:105:38
53:     #4 0x55bcdea82d74 in std::__1::allocator_traits<std::__1::allocator<unsigned int> >::allocate(std::__1::allocator<unsigned int>&, unsigned long) /vectorized/llvm/bin/../include/c++/v1/__memory/allocator_traits.h:262:20
53:     #5 0x55bcdea81e0c in std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >::__vallocate(unsigned long) /vectorized/llvm/bin/../include/c++/v1/vector:922:37
53:     #6 0x55bced909f2e in std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >::vector(unsigned long, unsigned int const&) /vectorized/llvm/bin/../include/c++/v1/vector:1078:9
53:     #7 0x55bced909cb4 in seastar::net::conntrack::load_balancer::load_balancer() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:46:27
53:     #8 0x55bced909979 in seastar::lw_shared_ptr_no_esft<seastar::net::conntrack::load_balancer>::lw_shared_ptr_no_esft() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/shared_ptr.hh:161:5
53:     #9 0x55bced9097f8 in seastar::lw_shared_ptr<seastar::net::conntrack::load_balancer> seastar::lw_shared_ptr<seastar::net::conntrack::load_balancer>::make<>() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/shared_ptr.hh:268:22
53:     #10 0x55bced909772 in seastar::lw_shared_ptr<seastar::net::conntrack::load_balancer> seastar::make_lw_shared<seastar::net::conntrack::load_balancer>() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/shared_ptr.hh:418:12
53:     #11 0x55bced9096a8 in seastar::net::conntrack::conntrack() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:98:23
53:     #12 0x55bced90916c in seastar::net::posix_server_socket_impl::posix_server_socket_impl(int, seastar::socket_address, seastar::pollable_fd, seastar::server_socket::load_balancing_algorithm, unsigned int, std::experimental::fundamentals_v1::pmr::polymorphic_allocator<char>*) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:170:14
53:     #13 0x55bced8be891 in std::__1::__unique_if<seastar::net::posix_server_socket_impl>::__unique_single std::__1::make_unique<seastar::net::posix_server_socket_impl, int&, seastar::socket_address&, seastar::pollable_fd, seastar::server_socket::load_balancing_algorithm&, unsigned int&, std::experimental::fundamentals_v1::pmr::polymorphic_allocator<char>*&>(int&, seastar::socket_address&, seastar::pollable_fd&&, seastar::server_socket::load_balancing_algorithm&, unsigned int&, std::experimental::fundamentals_v1::pmr::polymorphic_allocator<char>*&) /vectorized/llvm/bin/../include/c++/v1/__memory/unique_ptr.h:725:32
53:     #14 0x55bced88b8f2 in seastar::net::posix_network_stack::listen(seastar::socket_address, seastar::listen_options) /v/build/v_deps_build/seastar-prefix/src/seastar/src/net/posix-stack.cc:669:23
53:     #15 0x55bcecc51c3e in seastar::reactor::listen(seastar::socket_address, seastar::listen_options) /v/build/v_deps_build/seastar-prefix/src/seastar/src/core/reactor.cc:1579:42
53:     #16 0x55bcea65eac4 in net::server::start() /var/lib/buildkite-agent/builds/buildkite-amd64-builders-i-029f66767326a3470-1/redpanda/redpanda/src/v/net/server.cc:87:35
53:     #17 0x55bcdbc58708 in rpc::rpc_server::start() /var/lib/buildkite-agent/builds/buildkite-amd64-builders-i-029f66767326a3470-1/redpanda/redpanda/src/v/rpc/rpc_server.h:58:28
53:     #18 0x55bcdbd941b6 in decltype(static_cast<rpc::rpc_server&>(fp0).*fp()) std::__1::__invoke_constexpr<void (rpc::rpc_server::*&)(), rpc::rpc_server&, void>(void (rpc::rpc_server::*&)(), rpc::rpc_server&) /vectorized/llvm/bin/../include/c++/v1/type_traits:3538:23
53:     #19 0x55bcdbd94060 in decltype(auto) std::__1::__apply_tuple_impl<void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>, 0ul>(void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>&&, std::__1::__tuple_indices<0ul>) /vectorized/llvm/bin/../include/c++/v1/tuple:1595:1
53:     #20 0x55bcdbd93f14 in decltype(auto) std::__1::apply<void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&> >(void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>&&) /vectorized/llvm/bin/../include/c++/v1/tuple:1604:1
53:     #21 0x55bcdbd93cf3 in seastar::future<void> seastar::futurize<void>::apply<void (rpc::rpc_server::*&)(), rpc::rpc_server&>(void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>&&) /vectorized/include/seastar/core/future.hh:2113:13
53:     #22 0x55bcdbd93727 in auto seastar::futurize_apply<void (rpc::rpc_server::*&)(), rpc::rpc_server&>(void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>&&) /vectorized/include/seastar/core/future.hh:2192:12
53:     #23 0x55bcdbd9358b in seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&)::'lambda'()::operator()() /vectorized/include/seastar/core/sharded.hh:763:20
53:     #24 0x55bcdbd932d3 in decltype(static_cast<void (rpc::rpc_server::*>(fp)()) std::__1::__invoke_constexpr<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&)::'lambda'()>(void (rpc::rpc_server::*&&)()) /vectorized/llvm/bin/../include/c++/v1/type_traits:3648:23
53:     #25 0x55bcdbd93203 in decltype(auto) std::__1::__apply_tuple_impl<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&)::'lambda'(), std::__1::tuple<> >(void (rpc::rpc_server::*&&)(), std::__1::tuple<>&&, std::__1::__tuple_indices<>) /vectorized/llvm/bin/../include/c++/v1/tuple:1595:1
53:     #26 0x55bcdbd93150 in decltype(auto) std::__1::apply<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&)::'lambda'(), std::__1::tuple<> >(void (rpc::rpc_server::*&&)(), std::__1::tuple<>&&) /vectorized/llvm/bin/../include/c++/v1/tuple:1604:1
53:     #27 0x55bcdbd93000 in seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&) /vectorized/include/seastar/core/sharded.hh:762:16
53:     #28 0x55bcdbd92d3f in decltype(static_cast<void (rpc::rpc_server::*>(fp)()) std::__1::__invoke<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)&, rpc::rpc_server&>(void (rpc::rpc_server::*&&)()) /vectorized/llvm/bin/../include/c++/v1/type_traits:3640:23
53:     #29 0x55bcdbd92ba7 in seastar::future<void> std::__1::__invoke_void_return_wrapper<seastar::future<void>, false>::__call<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)&, rpc::rpc_server&>(seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)&, rpc::rpc_server&) /vectorized/llvm/bin/../include/c++/v1/__functional/invoke.h:30:16
53: 
53: Indirect leak of 104 byte(s) in 1 object(s) allocated from:
53:     #0 0x55bcdb52e13d in operator new(unsigned long) /v/llvm/llvm/src/compiler-rt/lib/asan/asan_new_delete.cpp:95:3
53:     #1 0x55bced002af8 in void seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >::schedule<seastar::internal::promise_base_with_type<void>, seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)>, seastar::futurize<seastar::future<void> >::type seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >::then_wrapped_nrvo<seastar::future<void>, seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)> >(seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)>&&)::'lambda'(seastar::internal::promise_base_with_type<void>&&, seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)>&, seastar::future_state<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)>(seastar::future<void>&&, seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)>&&, seastar::futurize<seastar::future<void> >::type seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >::then_wrapped_nrvo<seastar::future<void>, seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)> >(seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)>&&)::'lambda'(seastar::internal::promise_base_with_type<void>&&, seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)>&, seastar::future_state<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1395:20
53:     #2 0x55bced002992 in seastar::futurize<seastar::future<void> >::type seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >::then_wrapped_nrvo<seastar::future<void>, seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)> >(seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)>&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1680:9
53:     #3 0x55bcecff6473 in seastar::futurize<seastar::future<void> >::type seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >::then_wrapped_common<true, seastar::future<void>, seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)> >(seastar::noncopyable_function<seastar::future<void> (seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >&&)>&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1705:16
53:     #4 0x55bcecdd8581 in seastar::futurize<void>::type seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >::then_wrapped_maybe_erase<true, void, seastar::smp_message_queue::submit_item(unsigned int, std::__1::chrono::time_point<seastar::lowres_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >, std::__1::unique_ptr<seastar::smp_message_queue::work_item, std::__1::default_delete<seastar::smp_message_queue::work_item> >)::$_30>(seastar::smp_message_queue::submit_item(unsigned int, std::__1::chrono::time_point<seastar::lowres_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >, std::__1::unique_ptr<seastar::smp_message_queue::work_item, std::__1::default_delete<seastar::smp_message_queue::work_item> >)::$_30&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1669:16
53:     #5 0x55bcecc7f053 in seastar::futurize<void>::type seastar::future<seastar::semaphore_units<seastar::named_semaphore_exception_factory, seastar::lowres_clock> >::then_wrapped<seastar::smp_message_queue::submit_item(unsigned int, std::__1::chrono::time_point<seastar::lowres_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >, std::__1::unique_ptr<seastar::smp_message_queue::work_item, std::__1::default_delete<seastar::smp_message_queue::work_item> >)::$_30, void>(seastar::smp_message_queue::submit_item(unsigned int, std::__1::chrono::time_point<seastar::lowres_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >, std::__1::unique_ptr<seastar::smp_message_queue::work_item, std::__1::default_delete<seastar::smp_message_queue::work_item> >)::$_30&&) && /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/future.hh:1649:16
53:     #6 0x55bcecc7eeb1 in seastar::smp_message_queue::submit_item(unsigned int, std::__1::chrono::time_point<seastar::lowres_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > >, std::__1::unique_ptr<seastar::smp_message_queue::work_item, std::__1::default_delete<seastar::smp_message_queue::work_item> >) /v/build/v_deps_build/seastar-prefix/src/seastar/src/core/reactor.cc:3203:36
53:     #7 0x55bced8cb6be in seastar::futurize<std::__1::invoke_result<seastar::net::conntrack::handle::~handle()::'lambda'()>::type>::type seastar::smp_message_queue::submit<seastar::net::conntrack::handle::~handle()::'lambda'()>(unsigned int, seastar::smp_submit_to_options, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/smp.hh:269:9
53:     #8 0x55bced8cb0fe in seastar::futurize<std::__1::invoke_result<seastar::net::conntrack::handle::~handle()::'lambda'()>::type>::type seastar::smp::submit_to<seastar::net::conntrack::handle::~handle()::'lambda'()>(unsigned int, seastar::smp_submit_to_options, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/smp.hh:357:44
53:     #9 0x55bced8ca44d in seastar::futurize<std::__1::invoke_result<seastar::net::conntrack::handle::~handle()::'lambda'()>::type>::type seastar::smp::submit_to<seastar::net::conntrack::handle::~handle()::'lambda'()>(unsigned int, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/smp.hh:376:16
53:     #10 0x55bced8c9ff3 in seastar::net::conntrack::handle::~handle() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:88:19
53:     #11 0x55bced8ba89f in seastar::net::posix_ap_server_socket_impl::connection::~connection() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:135:12
53:     #12 0x55bced8e836f in std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>::~pair() /vectorized/llvm/bin/../include/c++/v1/__utility/pair.h:40:29
53:     #13 0x55bced8e8310 in void std::__1::__destroy_at<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>, 0>(std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>*) /vectorized/llvm/bin/../include/c++/v1/__memory/construct_at.h:56:13
53:     #14 0x55bced8e82ac in void std::__1::destroy_at<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>, 0>(std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>*) /vectorized/llvm/bin/../include/c++/v1/__memory/construct_at.h:81:5
53:     #15 0x55bced8e8010 in void std::__1::allocator_traits<std::__1::allocator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, void*> > >::destroy<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>, void, void>(std::__1::allocator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, void*> >&, std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>*) /vectorized/llvm/bin/../include/c++/v1/__memory/allocator_traits.h:317:9
53:     #16 0x55bced8e7d1b in std::__1::__hash_table<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::__unordered_map_hasher<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::__unordered_map_equal<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection> > >::__deallocate_node(std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, void*>*>*) /vectorized/llvm/bin/../include/c++/v1/__hash_table:1572:9
53:     #17 0x55bced8e6211 in std::__1::__hash_table<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::__unordered_map_hasher<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::__unordered_map_equal<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection> > >::~__hash_table() /vectorized/llvm/bin/../include/c++/v1/__hash_table:1511:5
53:     #18 0x55bced8b8eb8 in std::__1::unordered_multimap<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, std::__1::allocator<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection> > >::~unordered_multimap() /vectorized/llvm/bin/../include/c++/v1/unordered_map:2026:5
53:     #19 0x7f2ca22dd82e in __call_tls_dtors (/lib64/libc.so.6+0x4582e) (BuildId: 6e7b96dfb83f0bdcb6a410469b82f86415e5ada3)
53: 
53: Indirect leak of 96 byte(s) in 1 object(s) allocated from:
53:     #0 0x55bcdb52e13d in operator new(unsigned long) /v/llvm/llvm/src/compiler-rt/lib/asan/asan_new_delete.cpp:95:3
53:     #1 0x55bced8cbcf3 in std::__1::__unique_if<seastar::smp_message_queue::async_work_item<seastar::net::conntrack::handle::~handle()::'lambda'()> >::__unique_single std::__1::make_unique<seastar::smp_message_queue::async_work_item<seastar::net::conntrack::handle::~handle()::'lambda'()>, seastar::smp_message_queue&, seastar::smp_service_group&, seastar::net::conntrack::handle::~handle()::'lambda'()>(seastar::smp_message_queue&, seastar::smp_service_group&, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /vectorized/llvm/bin/../include/c++/v1/__memory/unique_ptr.h:725:28
53:     #2 0x55bced8cb5c4 in seastar::futurize<std::__1::invoke_result<seastar::net::conntrack::handle::~handle()::'lambda'()>::type>::type seastar::smp_message_queue::submit<seastar::net::conntrack::handle::~handle()::'lambda'()>(unsigned int, seastar::smp_submit_to_options, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/smp.hh:267:19
53:     #3 0x55bced8cb0fe in seastar::futurize<std::__1::invoke_result<seastar::net::conntrack::handle::~handle()::'lambda'()>::type>::type seastar::smp::submit_to<seastar::net::conntrack::handle::~handle()::'lambda'()>(unsigned int, seastar::smp_submit_to_options, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/smp.hh:357:44
53:     #4 0x55bced8ca44d in seastar::futurize<std::__1::invoke_result<seastar::net::conntrack::handle::~handle()::'lambda'()>::type>::type seastar::smp::submit_to<seastar::net::conntrack::handle::~handle()::'lambda'()>(unsigned int, seastar::net::conntrack::handle::~handle()::'lambda'()&&) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/smp.hh:376:16
53:     #5 0x55bced8c9ff3 in seastar::net::conntrack::handle::~handle() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:88:19
53:     #6 0x55bced8ba89f in seastar::net::posix_ap_server_socket_impl::connection::~connection() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:135:12
53:     #7 0x55bced8e836f in std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>::~pair() /vectorized/llvm/bin/../include/c++/v1/__utility/pair.h:40:29
53:     #8 0x55bced8e8310 in void std::__1::__destroy_at<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>, 0>(std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>*) /vectorized/llvm/bin/../include/c++/v1/__memory/construct_at.h:56:13
53:     #9 0x55bced8e82ac in void std::__1::destroy_at<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>, 0>(std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>*) /vectorized/llvm/bin/../include/c++/v1/__memory/construct_at.h:81:5
53:     #10 0x55bced8e8010 in void std::__1::allocator_traits<std::__1::allocator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, void*> > >::destroy<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>, void, void>(std::__1::allocator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, void*> >&, std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection>*) /vectorized/llvm/bin/../include/c++/v1/__memory/allocator_traits.h:317:9
53:     #11 0x55bced8e7d1b in std::__1::__hash_table<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::__unordered_map_hasher<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::__unordered_map_equal<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection> > >::__deallocate_node(std::__1::__hash_node_base<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, void*>*>*) /vectorized/llvm/bin/../include/c++/v1/__hash_table:1572:9
53:     #12 0x55bced8e6211 in std::__1::__hash_table<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::__unordered_map_hasher<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::__unordered_map_equal<std::__1::tuple<int, seastar::socket_address>, std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection>, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection> > >::~__hash_table() /vectorized/llvm/bin/../include/c++/v1/__hash_table:1511:5
53:     #13 0x55bced8b8eb8 in std::__1::unordered_multimap<std::__1::tuple<int, seastar::socket_address>, seastar::net::posix_ap_server_socket_impl::connection, std::__1::hash<std::__1::tuple<int, seastar::socket_address> >, std::__1::equal_to<std::__1::tuple<int, seastar::socket_address> >, std::__1::allocator<std::__1::pair<std::__1::tuple<int, seastar::socket_address> const, seastar::net::posix_ap_server_socket_impl::connection> > >::~unordered_multimap() /vectorized/llvm/bin/../include/c++/v1/unordered_map:2026:5
53:     #14 0x7f2ca22dd82e in __call_tls_dtors (/lib64/libc.so.6+0x4582e) (BuildId: 6e7b96dfb83f0bdcb6a410469b82f86415e5ada3)
53: 
53: Indirect leak of 40 byte(s) in 1 object(s) allocated from:
53:     #0 0x55bcdb52e13d in operator new(unsigned long) /v/llvm/llvm/src/compiler-rt/lib/asan/asan_new_delete.cpp:95:3
53:     #1 0x55bced9097a8 in seastar::lw_shared_ptr<seastar::net::conntrack::load_balancer> seastar::lw_shared_ptr<seastar::net::conntrack::load_balancer>::make<>() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/shared_ptr.hh:268:18
53:     #2 0x55bced909772 in seastar::lw_shared_ptr<seastar::net::conntrack::load_balancer> seastar::make_lw_shared<seastar::net::conntrack::load_balancer>() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/core/shared_ptr.hh:418:12
53:     #3 0x55bced9096a8 in seastar::net::conntrack::conntrack() /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:98:23
53:     #4 0x55bced90916c in seastar::net::posix_server_socket_impl::posix_server_socket_impl(int, seastar::socket_address, seastar::pollable_fd, seastar::server_socket::load_balancing_algorithm, unsigned int, std::experimental::fundamentals_v1::pmr::polymorphic_allocator<char>*) /v/build/v_deps_build/seastar-prefix/src/seastar/include/seastar/net/posix-stack.hh:170:14
53:     #5 0x55bced8be891 in std::__1::__unique_if<seastar::net::posix_server_socket_impl>::__unique_single std::__1::make_unique<seastar::net::posix_server_socket_impl, int&, seastar::socket_address&, seastar::pollable_fd, seastar::server_socket::load_balancing_algorithm&, unsigned int&, std::experimental::fundamentals_v1::pmr::polymorphic_allocator<char>*&>(int&, seastar::socket_address&, seastar::pollable_fd&&, seastar::server_socket::load_balancing_algorithm&, unsigned int&, std::experimental::fundamentals_v1::pmr::polymorphic_allocator<char>*&) /vectorized/llvm/bin/../include/c++/v1/__memory/unique_ptr.h:725:32
53:     #6 0x55bced88b8f2 in seastar::net::posix_network_stack::listen(seastar::socket_address, seastar::listen_options) /v/build/v_deps_build/seastar-prefix/src/seastar/src/net/posix-stack.cc:669:23
53:     #7 0x55bcecc51c3e in seastar::reactor::listen(seastar::socket_address, seastar::listen_options) /v/build/v_deps_build/seastar-prefix/src/seastar/src/core/reactor.cc:1579:42
53:     #8 0x55bcea65eac4 in net::server::start() /var/lib/buildkite-agent/builds/buildkite-amd64-builders-i-029f66767326a3470-1/redpanda/redpanda/src/v/net/server.cc:87:35
53:     #9 0x55bcdbc58708 in rpc::rpc_server::start() /var/lib/buildkite-agent/builds/buildkite-amd64-builders-i-029f66767326a3470-1/redpanda/redpanda/src/v/rpc/rpc_server.h:58:28
53:     #10 0x55bcdbd941b6 in decltype(static_cast<rpc::rpc_server&>(fp0).*fp()) std::__1::__invoke_constexpr<void (rpc::rpc_server::*&)(), rpc::rpc_server&, void>(void (rpc::rpc_server::*&)(), rpc::rpc_server&) /vectorized/llvm/bin/../include/c++/v1/type_traits:3538:23
53:     #11 0x55bcdbd94060 in decltype(auto) std::__1::__apply_tuple_impl<void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>, 0ul>(void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>&&, std::__1::__tuple_indices<0ul>) /vectorized/llvm/bin/../include/c++/v1/tuple:1595:1
53:     #12 0x55bcdbd93f14 in decltype(auto) std::__1::apply<void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&> >(void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>&&) /vectorized/llvm/bin/../include/c++/v1/tuple:1604:1
53:     #13 0x55bcdbd93cf3 in seastar::future<void> seastar::futurize<void>::apply<void (rpc::rpc_server::*&)(), rpc::rpc_server&>(void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>&&) /vectorized/include/seastar/core/future.hh:2113:13
53:     #14 0x55bcdbd93727 in auto seastar::futurize_apply<void (rpc::rpc_server::*&)(), rpc::rpc_server&>(void (rpc::rpc_server::*&)(), std::__1::tuple<rpc::rpc_server&>&&) /vectorized/include/seastar/core/future.hh:2192:12
53:     #15 0x55bcdbd9358b in seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&)::'lambda'()::operator()() /vectorized/include/seastar/core/sharded.hh:763:20
53:     #16 0x55bcdbd932d3 in decltype(static_cast<void (rpc::rpc_server::*>(fp)()) std::__1::__invoke_constexpr<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&)::'lambda'()>(void (rpc::rpc_server::*&&)()) /vectorized/llvm/bin/../include/c++/v1/type_traits:3648:23
53:     #17 0x55bcdbd93203 in decltype(auto) std::__1::__apply_tuple_impl<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&)::'lambda'(), std::__1::tuple<> >(void (rpc::rpc_server::*&&)(), std::__1::tuple<>&&, std::__1::__tuple_indices<>) /vectorized/llvm/bin/../include/c++/v1/tuple:1595:1
53:     #18 0x55bcdbd93150 in decltype(auto) std::__1::apply<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&)::'lambda'(), std::__1::tuple<> >(void (rpc::rpc_server::*&&)(), std::__1::tuple<>&&) /vectorized/llvm/bin/../include/c++/v1/tuple:1604:1
53:     #19 0x55bcdbd93000 in seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)::operator()(rpc::rpc_server&) /vectorized/include/seastar/core/sharded.hh:762:16
53:     #20 0x55bcdbd92d3f in decltype(static_cast<void (rpc::rpc_server::*>(fp)()) std::__1::__invoke<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)&, rpc::rpc_server&>(void (rpc::rpc_server::*&&)()) /vectorized/llvm/bin/../include/c++/v1/type_traits:3640:23
53:     #21 0x55bcdbd92ba7 in seastar::future<void> std::__1::__invoke_void_return_wrapper<seastar::future<void>, false>::__call<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)&, rpc::rpc_server&>(seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)&, rpc::rpc_server&) /vectorized/llvm/bin/../include/c++/v1/__functional/invoke.h:30:16
53:     #22 0x55bcdbd92a7f in std::__1::__function::__alloc_func<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&), std::__1::allocator<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)>, seastar::future<void> (rpc::rpc_server&)>::operator()(rpc::rpc_server&) /vectorized/llvm/bin/../include/c++/v1/__functional/function.h:180:16
53:     #23 0x55bcdbd8dcab in std::__1::__function::__func<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&), std::__1::allocator<seastar::future<void> seastar::sharded<rpc::rpc_server>::invoke_on_all<void (rpc::rpc_server::*)()>(seastar::smp_submit_to_options, void (rpc::rpc_server::*)())::'lambda'(rpc::rpc_server&)>, seastar::future<void> (rpc::rpc_server&)>::operator()(rpc::rpc_server&) /vectorized/llvm/bin/../include/c++/v1/__functional/function.h:354:12
53:     #24 0x55bcdbd85bc0 in std::__1::__function::__value_func<seastar::future<void> (rpc::rpc_server&)>::operator()(rpc::rpc_server&) const /vectorized/llvm/bin/../include/c++/v1/__functional/function.h:507:16
53:     #25 0x55bcdbd85513 in std::__1::function<seastar::future<void> (rpc::rpc_server&)>::operator()(rpc::rpc_server&) const /vectorized/llvm/bin/../include/c++/v1/__functional/function.h:1184:12
53:     #26 0x55bcdbd85325 in seastar::sharded<rpc::rpc_server>::invoke_on_all(seastar::smp_submit_to_options, std::__1::function<seastar::future<void> (rpc::rpc_server&)>)::'lambda'(unsigned int)::operator()(unsigned int) const::'lambda'()::operator()() const /vectorized/include/seastar/core/sharded.hh:744:20
53:     #27 0x55bcdbd83d53 in seastar::future<void> seastar::futurize<seastar::future<void> >::invoke<seastar::sharded<rpc::rpc_server>::invoke_on_all(seastar::smp_submit_to_options, std::__1::function<seastar::future<void> (rpc::rpc_server&)>)::'lambda'(unsigned int)::operator()(unsigned int) const::'lambda'()&>(seastar::sharded<rpc::rpc_server>::invoke_on_all(seastar::smp_submit_to_options, std::__1::function<seastar::future<void> (rpc::rpc_server&)>)::'lambda'(unsigned int)::operator()(unsigned int) const::'lambda'()&) /vectorized/include/seastar/core/future.hh:2149:20
53:     #28 0x55bcdbd8364b in seastar::futurize<std::__1::invoke_result<seastar::sharded<rpc::rpc_server>::invoke_on_all(seastar::smp_submit_to_options, std::__1::function<seastar::future<void> (rpc::rpc_server&)>)::'lambda'(unsigned int)::operator()(unsigned int) const::'lambda'()>::type>::type seastar::smp::submit_to<seastar::sharded<rpc::rpc_server>::invoke_on_all(seastar::smp_submit_to_options, std::__1::function<seastar::future<void> (rpc::rpc_server&)>)::'lambda'(unsigned int)::operator()(unsigned int) const::'lambda'()>(unsigned int, seastar::smp_submit_to_options, seastar::sharded<rpc::rpc_server>::invoke_on_all(seastar::smp_submit_to_options, std::__1::function<seastar::future<void> (rpc::rpc_server&)>)::'lambda'(unsigned int)::operator()(unsigned int) const::'lambda'()&&) /vectorized/include/seastar/core/smp.hh:349:32
53:     #29 0x55bcdbd83203 in seastar::sharded<rpc::rpc_server>::invoke_on_all(seastar::smp_submit_to_options, std::__1::function<seastar::future<void> (rpc::rpc_server&)>)::'lambda'(unsigned int)::operator()(unsigned int) const /vectorized/include/seastar/core/sharded.hh:743:16
53: 
53: SUMMARY: AddressSanitizer: 520 byte(s) leaked in 5 allocation(s).
53: Test Exit code 1
53: Decoded a Seastar backtrace:
53: Decoded a Seastar backtrace:
53: Decoded a Seastar backtrace:
53: Decoded a Seastar backtrace:
53: Decoded a Seastar backtrace:
53: Decoded a Seastar backtrace:
52/97 Test  #53: test_replicas_rebalancing_tests_rpunit ............***Failed   51.45 sec

Has a similar trace pointing at posix-stack

@dotnwat
Copy link
Member Author

dotnwat commented Dec 21, 2022

Yes, this is the same leak @andrwng.

One option is that we can merge my "fix". Seastar doesn't want to merge it because it doesn't really fix the leak, it just makes ASAN happy by freeing the data if it leaked, before Seastar exits.

dotnwat added a commit to dotnwat/redpanda that referenced this issue Dec 21, 2022
A memory leak pops up in our CI from time to time
(redpanda-data#3338). It is caused by
a very narrow race within Seastar when incoming connections arrive while
a socket server is being shutdown.

I've posted a "fix" for this in upstream Seastar (link below) which is
effectively rejected because it doesn't really fix the leak, but merely
cleans up on exit to make LSAN happy. AFAICT this leak can only happen
when a socket server is being shut down, and in Redpanda, this only
happens when Redpanda is shutting down. In this case it is harmless,
but annoying because it will occassionally fail our CI.

Adding an LSAN suppressions file allows us to instruct LSAN to ignore
this particular leak when it occassionally does trigger.

Fixes: redpanda-data#3338

See scylladb/seastar#1265 for more discussion
and a link to an issue with a reproducer.

Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
@dotnwat dotnwat mentioned this issue Dec 21, 2022
6 tasks
@andrewhsu
Copy link
Member

/backport v22.3.x

vbotbuildovich pushed a commit to vbotbuildovich/redpanda that referenced this issue Jan 27, 2023
A memory leak pops up in our CI from time to time
(redpanda-data#3338). It is caused by
a very narrow race within Seastar when incoming connections arrive while
a socket server is being shutdown.

I've posted a "fix" for this in upstream Seastar (link below) which is
effectively rejected because it doesn't really fix the leak, but merely
cleans up on exit to make LSAN happy. AFAICT this leak can only happen
when a socket server is being shut down, and in Redpanda, this only
happens when Redpanda is shutting down. In this case it is harmless,
but annoying because it will occassionally fail our CI.

Adding an LSAN suppressions file allows us to instruct LSAN to ignore
this particular leak when it occassionally does trigger.

Fixes: redpanda-data#3338

See scylladb/seastar#1265 for more discussion
and a link to an issue with a reproducer.

Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
(cherry picked from commit 778704b)
vbotbuildovich pushed a commit to vbotbuildovich/redpanda that referenced this issue Feb 28, 2023
A memory leak pops up in our CI from time to time
(redpanda-data#3338). It is caused by
a very narrow race within Seastar when incoming connections arrive while
a socket server is being shutdown.

I've posted a "fix" for this in upstream Seastar (link below) which is
effectively rejected because it doesn't really fix the leak, but merely
cleans up on exit to make LSAN happy. AFAICT this leak can only happen
when a socket server is being shut down, and in Redpanda, this only
happens when Redpanda is shutting down. In this case it is harmless,
but annoying because it will occassionally fail our CI.

Adding an LSAN suppressions file allows us to instruct LSAN to ignore
this particular leak when it occassionally does trigger.

Fixes: redpanda-data#3338

See scylladb/seastar#1265 for more discussion
and a link to an issue with a reproducer.

Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
(cherry picked from commit 778704b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants