Bug #3545
closedpit::Entry::hasUnexpiredOutRecords does not consider Nack
100%
Description
pit::Entry::hasUnexpiredOutRecords
determines whether a PIT entry has any out-record that is still waiting for Data.
A use case is in RetxSuppressionFixed
and RetxSuppressionExponential
, in which a retransmitted Interest would not be suppressed if there isn't an out-record waiting for Data.
Currently, this function returns true if any out-record's timestamp plus the InterestLifetime is less than now.
In other words, an Interest has been sent to the upstream, InterestLifetime is not exceeded, and Data has not come back (when Data comes back, the out-record is deleted within incoming Data pipeline).
However, if Nack comes back in response to the Interest, the out-record is not deleted within incoming Nack pipeline.
In this case, this function still returns true as if an out-record is waiting for Data, but no Data would ever come back (at upstream node outgoing Nack pipeline deletes the in-record when sending Nack).
Thus, pit::Entry::hasUnexpiredOutRecords
should take incoming Nack into consideration, and return true only if the PIT entry has any out-record that is not only unexpired in terms of InterestLifetime, but also not yet Nacked.
The function shall be renamed to fw::hasPendingOutRecords
to reflect the semantics change.