From 6e39c2ffdeab71e9804fa42748bc571b2bdce8b2 Mon Sep 17 00:00:00 2001 From: Kamil Braun Date: Wed, 10 Jan 2024 17:02:50 +0100 Subject: [PATCH] gossiper: store source_location instead of string in endpoint_permit The original code extracted only the function_name from the source_location for logging. We'll use more information from the source_location in later commits. --- gms/gossiper.cc | 19 +++++++++---------- gms/gossiper.hh | 4 ++-- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/gms/gossiper.cc b/gms/gossiper.cc index 00efe7e7b6..bbcea86197 100644 --- a/gms/gossiper.cc +++ b/gms/gossiper.cc @@ -775,14 +775,14 @@ future<> gossiper::do_status_check() { } } -gossiper::endpoint_permit::endpoint_permit(endpoint_locks_map::entry_ptr&& ptr, inet_address addr, std::string caller) noexcept +gossiper::endpoint_permit::endpoint_permit(endpoint_locks_map::entry_ptr&& ptr, inet_address addr, seastar::compat::source_location caller) noexcept : _ptr(std::move(ptr)) , _permit_id(_ptr->pid) , _addr(std::move(addr)) , _caller(std::move(caller)) { ++_ptr->holders; - logger.debug("{}: lock_endpoint {}: acquired: permit_id={} holders={}", _caller, _addr, _permit_id, _ptr->holders); + logger.debug("{}: lock_endpoint {}: acquired: permit_id={} holders={}", _caller.function_name(), _addr, _permit_id, _ptr->holders); } gossiper::endpoint_permit::endpoint_permit(endpoint_permit&& o) noexcept @@ -799,9 +799,9 @@ gossiper::endpoint_permit::~endpoint_permit() { bool gossiper::endpoint_permit::release() noexcept { if (auto ptr = std::exchange(_ptr, nullptr)) { assert(ptr->pid == _permit_id); - logger.debug("{}: lock_endpoint {}: released: permit_id={} holders={}", _caller, _addr, _permit_id, ptr->holders); + logger.debug("{}: lock_endpoint {}: released: permit_id={} holders={}", _caller.function_name(), _addr, _permit_id, ptr->holders); if (!--ptr->holders) { - logger.debug("{}: lock_endpoint {}: released: permit_id={}", _caller, _addr, _permit_id); + logger.debug("{}: lock_endpoint {}: released: permit_id={}", _caller.function_name(), _addr, _permit_id); ptr->units.return_all(); ptr->pid = null_permit_id; _permit_id = null_permit_id; @@ -820,27 +820,26 @@ future gossiper::lock_endpoint(inet_address ep, permi if (this_shard_id() != 0) { on_internal_error(logger, "lock_endpoint must be called on shard 0"); } - std::string caller = l.function_name(); auto eptr = co_await _endpoint_locks.get_or_load(ep, [] (const inet_address& ep) { return endpoint_lock_entry(); }); if (pid) { if (eptr->pid == pid) { // Already locked with the same permit - co_return endpoint_permit(std::move(eptr), std::move(ep), std::move(caller)); + co_return endpoint_permit(std::move(eptr), std::move(ep), std::move(l)); } else { // permit_id mismatch means either that the endpoint lock was released, // or maybe we're passed a permit_id that was acquired for a different endpoint. - on_internal_error_noexcept(logger, fmt::format("{}: lock_endpoint {}: permit_id={}: endpoint_lock_entry has mismatching permit_id={}", caller, ep, pid, eptr->pid)); + on_internal_error_noexcept(logger, fmt::format("{}: lock_endpoint {}: permit_id={}: endpoint_lock_entry has mismatching permit_id={}", l.function_name(), ep, pid, eptr->pid)); } } pid = permit_id::create_random_id(); - logger.debug("{}: lock_endpoint {}: waiting: permit_id={}", caller, ep, pid); + logger.debug("{}: lock_endpoint {}: waiting: permit_id={}", l.function_name(), ep, pid); eptr->units = co_await get_units(eptr->sem, 1, _abort_source); eptr->pid = pid; if (eptr->holders) { - on_internal_error_noexcept(logger, fmt::format("{}: lock_endpoint {}: newly held endpoint_lock_entry has {} holders", caller, ep, eptr->holders)); + on_internal_error_noexcept(logger, fmt::format("{}: lock_endpoint {}: newly held endpoint_lock_entry has {} holders", l.function_name(), ep, eptr->holders)); } _abort_source.check(); - co_return endpoint_permit(std::move(eptr), std::move(ep), std::move(caller)); + co_return endpoint_permit(std::move(eptr), std::move(ep), std::move(l)); } void gossiper::permit_internal_error(const inet_address& addr, permit_id pid) { diff --git a/gms/gossiper.hh b/gms/gossiper.hh index 967e0e03d4..5174d6fe2e 100644 --- a/gms/gossiper.hh +++ b/gms/gossiper.hh @@ -160,9 +160,9 @@ public: endpoint_locks_map::entry_ptr _ptr; permit_id _permit_id; inet_address _addr; - std::string _caller; + seastar::compat::source_location _caller; public: - endpoint_permit(endpoint_locks_map::entry_ptr&& ptr, inet_address addr, std::string caller) noexcept; + endpoint_permit(endpoint_locks_map::entry_ptr&& ptr, inet_address addr, seastar::compat::source_location caller) noexcept; endpoint_permit(endpoint_permit&&) noexcept; ~endpoint_permit(); bool release() noexcept;