Project

General

Profile

Actions

Bug #4369

closed

PIT entry not removed when NACKed from all upstreams

Added by Alex Afanasyev about 7 years ago. Updated over 6 years ago.

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

0%

Estimated time:
3.00 h

Description

While I'm trying to make a simple scenario to reproduce the issue, here is a highly concerning logs from a simple test case from ndnSIM. It is a simple two node topology, with node 0 route for /prefix pointing to node 1 and node 1 has no data producer installed.

Look at the timing of operations:

+10.000000000s 0 nfd.InternalForwarderTransport:InternalForwarderTransport(): [INFO ] [id=0,local=ndnFace://0,remote=ndnFace://0] Creating transport
+10.000000000s 0 nfd.Forwarder:onIncomingInterest(): [DEBUG] onIncomingInterest face=258 interest=/prefix/someData
+10.000000000s 0 nfd.Forwarder:onContentStoreMiss(): [DEBUG] onContentStoreMiss interest=/prefix/someData
+10.000000000s 0 nfd.Forwarder:onOutgoingInterest(): [DEBUG] onOutgoingInterest face=256 interest=/prefix/someData
+10.000000000s 0 nfd.InternalForwarderTransport:receiveFromLink(): [LOGIC] [id=257,local=internal://,remote=internal://] receiveFromLink
+10.000000000s 0 nfd.InternalForwarderTransport:doSend(): [LOGIC] [id=1,local=internal://,remote=internal://] doSend
+10.014404296s 1 nfd.Forwarder:onIncomingInterest(): [DEBUG] onIncomingInterest face=256 interest=/prefix/someData
+10.014404296s 1 nfd.Forwarder:onContentStoreMiss(): [DEBUG] onContentStoreMiss interest=/prefix/someData
+10.014404296s 1 nfd.Forwarder:onOutgoingNack(): [DEBUG] onOutgoingNack face=256 nack=/prefix/someData~NoRoute OK
+10.014404296s 1 nfd.Forwarder:onInterestReject(): [DEBUG] onInterestReject interest=/prefix/someData
+10.031005858s 0 nfd.Forwarder:onIncomingNack(): [DEBUG] onIncomingNack face=256 nack=/prefix/someData~NoRoute OK
+10.031005858s 0 nfd.Forwarder:onOutgoingNack(): [DEBUG] onOutgoingNack face=258 nack=/prefix/someData~NoRoute OK
+10.031005858s 0 nfd.InternalForwarderTransport:doSend(): [LOGIC] [id=258,local=ndnFace://0,remote=ndnFace://0] doSend
+10.031005858s 0 test:operator()(): [DEBUG] got nack
+10.114404296s 1 nfd.Forwarder:onInterestFinalize(): [DEBUG] onInterestFinalize interest=/prefix/someData unsatisfied
+14.000000000s 0 nfd.Forwarder:onInterestUnsatisfied(): [DEBUG] onInterestUnsatisfied interest=/prefix/someData
+14.000000000s 0 nfd.Forwarder:onInterestFinalize(): [DEBUG] onInterestFinalize interest=/prefix/someData unsatisfied

Especially the last two. They should not have existed. Why PIT entry is not removed just after 10.031005858s?

I couldn't find any place where entry is moved to straggler timer after Strategy::sendNacks. Is it a bug or intentional?


Related issues 1 (0 open1 closed)

Blocked by NFD - Feature #4200: Replace straggler timer with per-strategy decisionClosedTeng Liang

Actions
Actions #1

Updated by Junxiao Shi about 7 years ago

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

This behavior is by design under currently implemented protocol. Information in PIT out-record is needed to detect duplicate Nonce. The alternate would be inserting all these Nonces to DNL, which would significantly increase DNL size.

Under new NDN forwarding behavior specification (https://hdl.handle.net/10150/625652 section 3.2.3), the PIT entry should be deleted as soon as all upstreams have Nacked. Note that current NFD does not conform to this specification. It should be changed completely.

Actions #2

Updated by Alex Afanasyev about 7 years ago

PIT entry should at the very least go to straggle timer and be deleted afterwards under "current design". Behavior for receiving NACKs from all upstreams should be exactly the same as receiving and satisfying PIT entry with a Data packet.

Actions #3

Updated by Junxiao Shi about 7 years ago

I wouldn't argue about "current design". I already have a forwarding behavior specification in the dissertation.

The "current design" is vague on the behavior of Nack processing, because Nack doesn't exist when forwarding pipelines are initially designed.

Actions #4

Updated by Alex Afanasyev about 7 years ago

In November 1, 2017 call we agreed to remove PIT entry after straggler timer when all upstream are NACKed and strategy NACKs all downstream. This is effectively the same behavior as for satisfying PIT entry with a data packet.

Actions #5

Updated by Junxiao Shi almost 7 years ago

  • Assignee deleted (Junxiao Shi)
Actions #6

Updated by Junxiao Shi almost 7 years ago

  • Blocked by Feature #4200: Replace straggler timer with per-strategy decision added
Actions #7

Updated by Junxiao Shi almost 7 years ago

  • Assignee set to Teng Liang
  • Start date deleted (10/31/2017)
  • Estimated time set to 3.00 h

Incoming Nack pipeline should set PIT entry lifetime to zero if all out-records are Nacked.
It is not advisable to change this together with #4200 because the implication on DNL needs to further studies.

Actions #8

Updated by Teng Liang almost 7 years ago

Junxiao Shi wrote:

Incoming Nack pipeline should set PIT entry lifetime to zero if all out-records are Nacked.

This is updated with #4200. Can we close it?

Actions #9

Updated by Junxiao Shi over 6 years ago

  • Status changed from New to Closed
Actions

Also available in: Atom PDF