Actions
Bug #1733
closedForwarder::setStragglerTimer wrong condition
Start date:
07/03/2014
Due date:
% Done:
100%
Estimated time:
1.00 h
Description
Steps to reproduce:
- start NFD
- create two faces to two different networks that are not interconnected
- register the same prefix toward these two faces
- set broadcast strategy for the prefix
- send Interests continuously at a slow rate; the producer of these Interests is reachable via only one face
- observe nPitEntries counter from
nfd-status
Expected: nPitEntries is relatively stable
Actual: nPitEntries is continuously increasing
Root cause: Forwarder::setStragglerTimer
has a conditional
if (pitEntry->hasUnexpiredOutRecords()) {
NFD_LOG_DEBUG("setStragglerTimer " << pitEntry->getName() <<
" cannot set StragglerTimer when an OutRecord is pending");
return;
}
This condition is wrong.
The straggler timer keeps the PIT entry a "short while" for loop detection and measurement purposes.
The 100ms delay is sufficient for these purposes.
It should not wait for all OutRecords to expire.
To make things worse, due to this condition, the straggler timer is never set again, and the PIT entry would be kept forever.
Actions