Project

General

Profile

Actions

Bug #4132

closed

MulticastStrategy/AsfStrategy should not reject forwarded Interests

Added by Junxiao Shi almost 7 years ago. Updated about 6 years ago.

Status:
Closed
Priority:
Urgent
Category:
Forwarding
Target version:
Start date:
Due date:
% Done:

100%

Estimated time:
2.00 h

Description

Topology:

A--R--B
  • All connections are made with point-to-point faces.

Steps to reproduce:

  1. on R, set an affected strategy on /A namespace
  2. on R, add a route for /A prefix toward A
  3. on A and B, add a route for / prefix toward R
  4. on B, express an Interest /A/1; the Interest is forwarded to A
  5. after suppression period (if any) has elapsed, but before InterestLifetime expires: on A, express an Interest /A/1

Actual: NFD log indicates ERROR: [Forwarder] onInterestReject interest=/A/1 cannot reject forwarded Interest.
Expected: no such error message.


Related issues 2 (0 open2 closed)

Related to NFD - Feature #4200: Replace straggler timer with per-strategy decisionClosedTeng Liang

Actions
Related to NFD - Bug #5123: MulticastStrategy rejects (forwarded interest's) PIT entry when the same Interest is received from a different faceClosedAshlesh Gawande

Actions
Actions #1

Updated by Junxiao Shi almost 7 years ago

  • Description updated (diff)
  • Category set to Forwarding
  • Target version set to v0.6

This error message is observed on NDN testbed on 20170613 during 0.5.1-72-gf4056d0 deployment.
This error message is harmless, as the rejecting operation has no effect after emitting this error message.

The quick solution is to avoid calling this->rejectPendingInterest unless suppresion decision is NEW.
The final solution is eliminating "straggler timer" altogether.

Actions #2

Updated by Junxiao Shi almost 7 years ago

  • Subject changed from MulticastStrategy/AsfStrategy should reject forwarded Interests to MulticastStrategy/AsfStrategy should not reject forwarded Interests
  • Assignee set to Ashlesh Gawande

This is assigned to Ashlesh, maintainer of these strategies.

Actions #3

Updated by Ashlesh Gawande almost 7 years ago

So basically this happens when node A tries to send an Interest it just received.
Is there any issue/documentation about removing straggling timer?
Would this still be an issue if per upstream suppression timer is implemented (4066).

Actions #4

Updated by Junxiao Shi almost 7 years ago

  • Related to Feature #4200: Replace straggler timer with per-strategy decision added
Actions #5

Updated by Davide Pesavento about 6 years ago

  • Target version changed from v0.6 to v0.7
Actions #6

Updated by Junxiao Shi about 6 years ago

  • Related to deleted (Feature #4200: Replace straggler timer with per-strategy decision)
Actions #7

Updated by Junxiao Shi about 6 years ago

  • Blocks Feature #4200: Replace straggler timer with per-strategy decision added
Actions #8

Updated by Junxiao Shi about 6 years ago

#4200 would change Strategy::rejectPendingInterest to schedule the PIT entry for immediate deletion. Incorrect invocations in multicast and ASF strategies are harmful because they effectively drop the PIT entry and prevent Data from going to downstream. This must be resolved before #4200.

Actions #9

Updated by Junxiao Shi about 6 years ago

  • Blocks deleted (Feature #4200: Replace straggler timer with per-strategy decision)
Actions #10

Updated by Junxiao Shi about 6 years ago

  • Priority changed from Normal to Urgent
  • Estimated time set to 2.00 h

#4200 is merged, so multicast strategy and ASF strategy have stopped working.

Actions #11

Updated by Ashlesh Gawande about 6 years ago

  • Status changed from New to In Progress

But unit test in multicast and ASF still work?

Okay so for this described scenario the strategies won't work. I am working on adding unit tests then to reproduce.

Actions #12

Updated by Davide Pesavento about 6 years ago

  • Related to Feature #4200: Replace straggler timer with per-strategy decision added
Actions #13

Updated by Ashlesh Gawande about 6 years ago

I am working on top of NFD commit 3cf75dc10be93d024a5ee125e22aef9a7ab25986 (i.e. before straggler timer, #4200).
I am unable to reproduce the scenario as described. The following unit test does not trigger the given log message.
Junxiao, are you able to reproduce using this commit? Could you elaborate on how the strategies have stopped working?

BOOST_AUTO_TEST_CASE(RejectPendingInterest)
{
  /*
  *      +---------+           +---------+            +----------+
  *      |  nodeA  |-----------|  nodeR  |------------|   nodeB  |
  *      +---------+    1ms    +---------+    1ms     +----------+
  */

  TopologyTester topo;
  TopologyNode nodeA = topo.addForwarder("A"),
               nodeR = topo.addForwarder("R"),
               nodeB = topo.addForwarder("B");

  for (TopologyNode node : {nodeA, nodeR, nodeB}) {
    topo.setStrategy<MulticastStrategy>(node);
    //topo.setStrategy<AsfStrategy>(node);
  }

  shared_ptr<TopologyLink> linkAR = topo.addLink("AR", time::milliseconds(1), {nodeA, nodeR}),
                           linkRB = topo.addLink("RB", time::milliseconds(1), {nodeR, nodeB});

  shared_ptr<TopologyAppLink> pingFromB = topo.addAppFace("cB", nodeB),
                              pingFromA = topo.addAppFace("cA", nodeB),
                              pingServer = topo.addAppFace("p", nodeA, Name("/A"));

  topo.registerPrefix(nodeR, linkAR->getFace(nodeR), Name("/A"), 1);
  topo.registerPrefix(nodeA, linkAR->getFace(nodeA), Name("/"), 1);
  topo.registerPrefix(nodeB, linkRB->getFace(nodeB), Name("/"), 1);

  shared_ptr<Interest> interest = makeInterest(Name("/A/1"));
  pingFromB->getClientFace().expressInterest(*interest, nullptr, nullptr, nullptr);

  this->advanceClocks(time::milliseconds(1), time::milliseconds(15));

  pingFromA->getClientFace().expressInterest(*interest, nullptr, nullptr, nullptr);

  this->advanceClocks(time::milliseconds(1), time::milliseconds(15));
}

I think this is because per upstream suppression is being used in multicast and ASF strategies (#note3).

Multicast strategy rejects pending interest when:

nEligibleNextHops == 0 && !isSuppressed

ASF strategy rejects pending interest when:

nexthops.size() == 0 or faceToUse == nullptr
Actions #14

Updated by Junxiao Shi about 6 years ago

  • Status changed from In Progress to Closed
  • % Done changed from 0 to 100

avoid calling this->rejectPendingInterest unless suppression decision is NEW.

It seems that this solution is already implemented.
https://github.com/named-data/NFD/blob/981db808cb37e0bf95d86c721f1dbcd9bc1bdf5c/daemon/fw/multicast-strategy.cpp#L103

Actions #15

Updated by Ashlesh Gawande over 3 years ago

  • Related to Bug #5123: MulticastStrategy rejects (forwarded interest's) PIT entry when the same Interest is received from a different face added
Actions

Also available in: Atom PDF