Bug #3981
closedndncatchunks: wrong Nack handling in DiscoverVersionIterative
0%
Description
Steps to reproduce:
nfd-start
ndnputchunks -v -f 20000 /demo/NFD/city-hash.cpp < ./NFD/core/city-hash.cpp
ndncatchunks -v /demo/NFD/city-hash.cpp
, retrieval succeeds- kill the process in step2
ndncatchunks -v /demo/NFD/city-hash.cpp
(within 20 seconds of step3)
Expected: step5 retrieval succeeds, because Data is in ContentStore and not stale
Actual: ERROR: Could not retrieve data for /demo/NFD/city-hash.cpp, reason: NoRoute
If we prevent Nack-NoRoute by setting best-route v1 strategy, step5 retrieval succeeds as expected.
Updated by Junxiao Shi over 7 years ago
- Tracker changed from Feature to Bug
- Assignee set to Shuo Yang
Reported by Marzieh Babaeianjelodar http://www.lists.cs.ucla.edu/pipermail/ndn-interest/2017-February/001562.html.
Assigned to Shuo Yang who is the current maintainer of ndncatchunks. The original authors of I88e4fc1a8e33a0d61a95e2291cccc7b998647489
, Steve and Andrea, are inactive recently.
Updated by Shuo Yang over 7 years ago
I doubt whether or not it is a bug?
The point of using iterative version discovery is to discover the latest version from the producer. (see: https://github.com/named-data/ndn-tools/tree/master/tools/chunks#version-discovery-methods-in-ndncatchunks). It's implemented with the following logic(https://github.com/named-data/ndn-tools/blob/master/tools/chunks/catchunks/discover-version-iterative.cpp):
- consumer express an Interest, and it hits the content store (assuming producer has died).
- consumer express the same Interest again (excluding the first one), this Interest gets no route to go since the producer has died.
I think seeing NACK in this case is what it is supposed to be. If a user just wants to retrieve the content without worrying about the latest version, he can use fixed version discovery instead. I've tested the above 5 steps with fixed version discovery, and it works fine.
Updated by Junxiao Shi over 7 years ago
This is a bug. A network Nack should never result in a worse outcome than a timeout.
Copying Beichuan's argument.
A consumer never knows whether its request will hits the producer or not. Thus the so-called “latest” version is the latest version that is available from the network, not necessarily from the producer. When the producer is not available, the discovery should return the latest version it can find, in this case, the version in the CS. While NACK-NoRoute is fine, the consumer should treat this NACK the same way as it treats a timeout, and concludes that the last version it got is the latest version it can find.
Updated by Shuo Yang over 7 years ago
Code review url: https://gerrit.named-data.net/#/c/3778/
Updated by Davide Pesavento over 7 years ago
- Status changed from New to In Progress
Updated by Junxiao Shi over 7 years ago
- Assignee changed from Shuo Yang to Anonymous
Updated by Davide Pesavento about 7 years ago
- Status changed from In Progress to Feedback
- % Done changed from 80 to 0
Shuo Yang wrote:
Code review url: https://gerrit.named-data.net/#/c/3778/
This change has been abandoned so I'm moving the status to "Feedback" (it should be "New" but redmine doesn't let me).
Updated by Davide Pesavento about 7 years ago
- Subject changed from chunks: wrong Nack handling in DiscoverVersionIterative to ndncatchunks: wrong Nack handling in DiscoverVersionIterative
Updated by Davide Pesavento over 5 years ago
- Status changed from New to Rejected
DiscoverVersionIterative
has been removed in #4556