Actions
Bug #1771
closedIncorrect logic in pit::Entry::canForwardTo
Start date:
07/17/2014
Due date:
% Done:
0%
Estimated time:
Description
Part of the decision whether an Interest can be forwarded to face is related to incoming entries:
InRecordCollection::const_iterator inIt = std::find_if(
m_inRecords.begin(), m_inRecords.end(),
bind(&predicate_FaceRecord_ne_Face_and_unexpired, _1, &face, time::steady_clock::now()));
bool hasUnexpiredOtherInRecord = inIt != m_inRecords.end();
if (!hasUnexpiredOtherInRecord) {
return false;
}
This code essentially prohibits Interests to be forwarded to any face from which Interest for the same name was recently received. While this effectively prevents Interests to be forwarded to the same face the Interest were received from, this logic is incorrect as it prevents other use cases. In particular, some ChronoSync operations would be harmed by this. Consider the following example
+------+ /sync +------+
| | >>> | |
| | --------------------- | |
+------+ <<<< +------+
^ /sync ^
| ^ | ^
| ^ | ^
| |
App App
Application sends /sync
interest, which is propagated to the other node. The other node sends the same Interests, which should be propagated down to the application. The logic above prevent this to happen.
Actions