From 0eb30246a85ba3dfb3327c57aab3a522dc60ead6 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Fri, 31 May 2024 17:03:22 +0200 Subject: [PATCH] small refactor and print in flight packages when timing out --- solanaceae/ngc_ft1/cca.hpp | 2 ++ solanaceae/ngc_ft1/flow_only.cpp | 12 ++++++++---- solanaceae/ngc_ft1/flow_only.hpp | 2 ++ solanaceae/ngc_ft1/ngcft1.cpp | 4 ++-- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/solanaceae/ngc_ft1/cca.hpp b/solanaceae/ngc_ft1/cca.hpp index dd9aaea..12964a5 100644 --- a/solanaceae/ngc_ft1/cca.hpp +++ b/solanaceae/ngc_ft1/cca.hpp @@ -64,6 +64,8 @@ struct CCAI { // get the list of timed out seq_ids virtual std::vector getTimeouts(void) const = 0; + virtual int64_t inFlightCount(void) const { return -1; } + public: // callbacks // data size is without overhead virtual void onSent(SeqIDType seq, size_t data_size) = 0; diff --git a/solanaceae/ngc_ft1/flow_only.cpp b/solanaceae/ngc_ft1/flow_only.cpp index 8c769dd..2b1e03a 100644 --- a/solanaceae/ngc_ft1/flow_only.cpp +++ b/solanaceae/ngc_ft1/flow_only.cpp @@ -98,6 +98,10 @@ std::vector FlowOnly::getTimeouts(void) const { return list; } +int64_t FlowOnly::inFlightCount(void) const { + return _in_flight.size(); +} + void FlowOnly::onSent(SeqIDType seq, size_t data_size) { if constexpr (true) { for (const auto& it : _in_flight) { @@ -105,15 +109,15 @@ void FlowOnly::onSent(SeqIDType seq, size_t data_size) { } } - _in_flight.push_back( + const auto& new_entry = _in_flight.emplace_back( FlyingBunch{ seq, static_cast(getTimeNow()), - data_size + SEGMENT_OVERHEAD + data_size + SEGMENT_OVERHEAD, + false } ); - _in_flight_bytes += data_size + SEGMENT_OVERHEAD; - //_recently_sent_bytes += data_size + SEGMENT_OVERHEAD; + _in_flight_bytes += new_entry.bytes; _time_point_last_update = getTimeNow(); } diff --git a/solanaceae/ngc_ft1/flow_only.hpp b/solanaceae/ngc_ft1/flow_only.hpp index 3cdd2ed..12cd3a7 100644 --- a/solanaceae/ngc_ft1/flow_only.hpp +++ b/solanaceae/ngc_ft1/flow_only.hpp @@ -75,6 +75,8 @@ struct FlowOnly : public CCAI { // get the list of timed out seq_ids std::vector getTimeouts(void) const override; + int64_t inFlightCount(void) const override; + public: // callbacks // data size is without overhead void onSent(SeqIDType seq, size_t data_size) override; diff --git a/solanaceae/ngc_ft1/ngcft1.cpp b/solanaceae/ngc_ft1/ngcft1.cpp index 4b6e8fb..cba0cd9 100644 --- a/solanaceae/ngc_ft1/ngcft1.cpp +++ b/solanaceae/ngc_ft1/ngcft1.cpp @@ -217,7 +217,7 @@ void NGCFT1::updateSendTransfer(float time_delta, uint32_t group_number, uint32_ // timeout increases with active transfers (otherwise we could starve them) if (tf.time_since_activity >= (sending_give_up_after * peer.active_send_transfers)) { // no ack after 30sec, close ft - std::cerr << "NGCFT1 warning: sending ft in progress timed out, deleting\n"; + std::cerr << "NGCFT1 warning: sending ft in progress timed out, deleting (ifc:" << peer.cca->inFlightCount() << ")\n"; dispatch( NGCFT1_Event::send_done, Events::NGCFT1_send_done{ @@ -316,7 +316,7 @@ void NGCFT1::iteratePeer(float time_delta, uint32_t group_number, uint32_t peer_ } } - // change iterat start position to not starve transfers in the back + // change iterate start position to not starve transfers in the back size_t iterated_count = 0; bool last_send_found = false; for (size_t idx = peer.next_send_transfer_send_idx; iterated_count < peer.send_transfers.size(); idx++, iterated_count++) {