From 35a82cd67f94e10c05b9196d023bb3ee3c680466 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Sat, 13 Dec 2025 13:36:51 +0100 Subject: [PATCH] make onLoss return if found --- solanaceae/ngc_ft1/cca.hpp | 3 ++- solanaceae/ngc_ft1/flow_only.cpp | 11 ++++++++--- solanaceae/ngc_ft1/flow_only.hpp | 2 +- solanaceae/ngc_ft1/ledbat.cpp | 6 ++++-- solanaceae/ngc_ft1/ledbat.hpp | 2 +- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/solanaceae/ngc_ft1/cca.hpp b/solanaceae/ngc_ft1/cca.hpp index 089585c..d8eecf9 100644 --- a/solanaceae/ngc_ft1/cca.hpp +++ b/solanaceae/ngc_ft1/cca.hpp @@ -69,7 +69,8 @@ struct CCAI { virtual void onAck(std::vector seqs) = 0; // if discard, not resent, not inflight - virtual void onLoss(SeqIDType seq, bool discard) = 0; + // return if found + virtual bool onLoss(SeqIDType seq, bool discard) = 0; // signal congestion externally (eg. send queue is full) virtual void onCongestion(void) {}; diff --git a/solanaceae/ngc_ft1/flow_only.cpp b/solanaceae/ngc_ft1/flow_only.cpp index c7f72bc..0479cac 100644 --- a/solanaceae/ngc_ft1/flow_only.cpp +++ b/solanaceae/ngc_ft1/flow_only.cpp @@ -211,15 +211,18 @@ void FlowOnly::onAck(std::vector seqs) { } } -void FlowOnly::onLoss(SeqIDType seq, bool discard) { +bool FlowOnly::onLoss(SeqIDType seq, bool discard) { auto it = std::find_if(_in_flight.begin(), _in_flight.end(), [seq](const auto& v) -> bool { assert(!std::isnan(v.timestamp)); return v.id == seq; }); + // we care about it still being there, when we do not discard if (it == _in_flight.end()) { - // error - return; // not found, ignore ?? + if (!discard) { + std::cerr << "FLOW seq not found!\n"; + } + return false; // not found, ignore ?? } //std::cerr << "FLOW loss\n"; @@ -249,5 +252,7 @@ void FlowOnly::onLoss(SeqIDType seq, bool discard) { // this is usually a safe indicator for congestion/maxed connection onCongestion(); } + + return true; } diff --git a/solanaceae/ngc_ft1/flow_only.hpp b/solanaceae/ngc_ft1/flow_only.hpp index 1f8fd18..b29ec91 100644 --- a/solanaceae/ngc_ft1/flow_only.hpp +++ b/solanaceae/ngc_ft1/flow_only.hpp @@ -86,6 +86,6 @@ struct FlowOnly : public CCAI { void onAck(std::vector seqs) override; // if discard, not resent, not inflight - void onLoss(SeqIDType seq, bool discard) override; + bool onLoss(SeqIDType seq, bool discard) override; }; diff --git a/solanaceae/ngc_ft1/ledbat.cpp b/solanaceae/ngc_ft1/ledbat.cpp index f56c9d4..e4aca6b 100644 --- a/solanaceae/ngc_ft1/ledbat.cpp +++ b/solanaceae/ngc_ft1/ledbat.cpp @@ -131,7 +131,7 @@ void LEDBAT::onAck(std::vector seqs) { updateWindows(); } -void LEDBAT::onLoss(SeqIDType seq, bool discard) { +bool LEDBAT::onLoss(SeqIDType seq, bool discard) { auto it = std::find_if(_in_flight.begin(), _in_flight.end(), [seq](const auto& v) -> bool { assert(!std::isnan(std::get<1>(v))); return std::get<0>(v) == seq; @@ -139,7 +139,7 @@ void LEDBAT::onLoss(SeqIDType seq, bool discard) { if (it == _in_flight.end()) { // error - return; // not found, ignore ?? + return false; // not found, ignore ?? } if (PLOTTING) { @@ -165,6 +165,8 @@ void LEDBAT::onLoss(SeqIDType seq, bool discard) { #endif updateWindows(); + + return true; } float LEDBAT::getCurrentDelay(void) const { diff --git a/solanaceae/ngc_ft1/ledbat.hpp b/solanaceae/ngc_ft1/ledbat.hpp index 00edd13..4e24d2f 100644 --- a/solanaceae/ngc_ft1/ledbat.hpp +++ b/solanaceae/ngc_ft1/ledbat.hpp @@ -72,7 +72,7 @@ struct LEDBAT : public CCAI { void onAck(std::vector seqs) override; // if discard, not resent, not inflight - void onLoss(SeqIDType seq, bool discard) override; + bool onLoss(SeqIDType seq, bool discard) override; private: using clock = std::chrono::steady_clock;