Feature #4200
closedReplace straggler timer with per-strategy decision
100%
Description
NFD straggler timer keeps PIT entry alive for 100ms after being satisfied by Data or being "rejected" (either strategy decides not to forward, or strategy returns a Nack-NoRoute). The purpose were duplicate detection and measurements.
The straggler timer is not needed for detecting loops, because if the Interest has been satisfied and then a copy of that Interest comes back to a node, the node would respond with cached Data, thus breaking the loop.
The straggler timer is ineffective for detecting multi-path arrival, because PIT in-records have been deleted when straggler timer starts.
Historically, before #1953 introduced DNL, the PIT entry contained a "Nonce list" which can effectively detect duplicates, but now it's gone.
While the straggler timer is useful for measurement purposes, not every strategy needs it.
The presence and ubiquitous application of straggler also changes the semantics of PIT: the PIT contains both pending Interests and "recently satisfied Interests", and is named "Interest table" in NFD devguide, causing confusion because its semantics differs from "PIT" in literatures.
In this issue, straggler timer is to be replaced with per-strategy decision of PIT entry lifetime extension.
nfd::Pit
is back as "pending Interest table", which normally only contains pending Interests.- If an incoming Interest is satisfied by cached Data in CS, no PIT entry shall be created. For example, incoming Interest pipeline can perform CS lookup before PIT insertion.
- If a strategy needs to collect additional Data replies for measurement purposes after a pending Interest has been satisfied, it may request to extend PIT entry lifetime for a certain duration in
beforeSatisfyInterest
trigger. If Data/Nack reply arrives within the PIT entry lifetime, the strategy would be triggered, and the PIT lifetime extension is no longer valid. Within the trigger callback, the strategy must request to extend PIT entry lifetime again if needed, otherwise the PIT entry would be removed as soon as the trigger finishes execution. - If a strategy decides to delay Interest forwarding, its
afterReceiveInterest
trigger must request to extend PIT entry lifetime. Strategy::rejectPendingInterest
action is no longer needed. If a strategy trigger neither extends PIT lifetime nor forwards the Interest, the PIT entry is removed as soon as the trigger finishes execution.
Updated by Junxiao Shi over 7 years ago
- Related to Bug #4132: MulticastStrategy/AsfStrategy should not reject forwarded Interests added
Updated by Junxiao Shi over 7 years ago
- Description updated (diff)
Beichuan has approved this proposal in 20170309 research meeting. It was previously named "eliminate straggler timer" but Beichuan suggested that "per-strategy decision" is more accurate.
Updated by Junxiao Shi almost 7 years ago
- Assignee set to Teng Liang
- Target version set to v0.7
Updated by Junxiao Shi almost 7 years ago
- Blocks Bug #4369: PIT entry not removed when NACKed from all upstreams added
Updated by Junxiao Shi almost 7 years ago
- Related to deleted (Bug #4132: MulticastStrategy/AsfStrategy should not reject forwarded Interests)
Updated by Junxiao Shi almost 7 years ago
- Blocked by Bug #4132: MulticastStrategy/AsfStrategy should not reject forwarded Interests added
Updated by Teng Liang almost 7 years ago
- Status changed from New to Code review
- % Done changed from 0 to 100
Updated by Teng Liang almost 7 years ago
The code for this feature is merged, but I am unable to close this thread.
Updated by Davide Pesavento almost 7 years ago
- Status changed from Code review to Feedback
Did you update the NFD devguide?
Updated by Teng Liang almost 7 years ago
Davide Pesavento wrote:
Did you update the NFD devguide?
Not yet. Will do it.
Updated by Davide Pesavento almost 7 years ago
- Status changed from Feedback to In Progress
- % Done changed from 100 to 50
It's not clear to me if the last bullet point in the description is saying that rejectPendingInterest
should be removed in this issue. Junxiao, please clarify.
I am unable to close this thread
It can't be closed because it's blocked by #4132.
Updated by Junxiao Shi almost 7 years ago
It's not clear to me if the last bullet point in the description is saying that
rejectPendingInterest
should be removed in this issue.
The initial design was:
- Content Store miss pipeline sets PIT expiry timer to "now"
- if the strategy forwards the Interest, PIT expiry timer becomes "normal" (i.e. when the last in-record expires)
- if the strategy wants to forward the Interest a little later, it must extend PIT entry lifetime
- if the strategy decides not to forward the Interest, do nothing and the PIT entry disappears
The implementation is:
- Content Store miss pipeline sets PIT expiry timer to "normal"
- if the strategy decides not to forward the Interest, shorten PIT entry lifetime to zero (
rejectPendingInterest
is a convenient helper function) - if the strategy wants to forward the Interest either now or later, it may do so before PIT entry expires
Both designs make sense. NFD devguide needs to reflect what is implemented.
It can't be closed because it's blocked by #4132.
As indicated in #4132-8, multicast strategy and ASF strategy have stopped working.
However, given #4200 change is already merged, I'll remove the blocking relation and raise priority of #4132.
Updated by Junxiao Shi almost 7 years ago
- Blocked by deleted (Bug #4132: MulticastStrategy/AsfStrategy should not reject forwarded Interests)
Updated by Davide Pesavento almost 7 years ago
- Related to Bug #4132: MulticastStrategy/AsfStrategy should not reject forwarded Interests added
Updated by Davide Pesavento almost 7 years ago
- % Done changed from 50 to 90
Both designs make sense. NFD devguide needs to reflect what is implemented.
Ok, so only documentation update is missing for this issue.
Updated by Teng Liang over 6 years ago
The NFD developer guide is updated accordingly (see commit 99302934a57448be268def81abf4b8619462d1f3). Please take a look. Thanks.
Updated by Davide Pesavento over 6 years ago
- Status changed from In Progress to Feedback
- % Done changed from 90 to 100