Project

General

Profile

Bug #1733

Updated by Junxiao Shi almost 10 years ago

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.

Back