Project

General

Profile

Actions

Bug #1733

closed

Forwarder::setStragglerTimer wrong condition

Added by Junxiao Shi over 10 years ago. Updated over 10 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Forwarding
Target version:
Start date:
07/03/2014
Due date:
% Done:

100%

Estimated time:
1.00 h

Description

Steps to reproduce:

  1. start NFD
  2. create two faces to two different networks that are not interconnected
  3. register the same prefix toward these two faces
  4. set broadcast strategy for the prefix
  5. send Interests continuously at a slow rate; the producer of these Interests is reachable via only one face
  6. 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

Also available in: Atom PDF