<div dir="auto"><div>Hi Stefano<div dir="auto"><br></div><div dir="auto"><span style="font-family:sans-serif">What forwarding strategy are you using on this prefix?</span><br></div><div dir="auto">How much time elapses between A's Interest and B's Interest arrive at E? If this time is too long, many strategies may think that the consumer believes the Interest has been lost, and would thus resend the Interest. The threshold is usually a few milliseconds.</div><div dir="auto"><br></div><div dir="auto">Yours, Junxiao</div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 13, 2019, 19:46 Stefano Lupo <<a href="mailto:lupos@tcd.ie">lupos@tcd.ie</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
Hello everyone.
<div class="m_6313548662123846992moz-forward-container">
<p><br>
</p>
<p>Sorry in advance if this has been discussed elsewhere, or if I
am overlooking something! I am currently working on a project
using NDN and have encountered a problem with interests not
being aggregated as I thought they would be. To highlight the
issue consider the following case:</p>
<p> ---- B<br>
</p>
<p> /<br>
</p>
<p>G --- E<br>
</p>
<p> \</p>
<p> ---- A</p>
<p>In this example, G is the producer of some data under <i>/test/g</i>,
A and B are consumers interested in the data G produces and E is
an intermediate router connecting G to A/B. Each of these nodes
are running in a docker container on the same machine and I set
up the faces and routes before hand using <i>nfdc</i> in the
following manner:</p>
<p>- On <b>nodeA</b>: <i>nfdc face create udp://<a href="http://nodee.com" target="_blank" rel="noreferrer">nodee.com</a>; nfdc
route add /test/g <face_id_of_e></i></p>
<p><i>- </i><i>On <b>node</b><b>B</b>: </i><i>nfdc face create
udp://<a href="http://nodee.com" target="_blank" rel="noreferrer">nodee.com</a>; nfdc route add /test/g <face_id_of_e></i></p>
<p><i>- </i><i>On <b>nodeE</b>: </i><i><i>nfdc face create
udp://<a href="http://nodeg.com" target="_blank" rel="noreferrer">nodeg.com</a>; nfdc route add /test/g <face_id_of_g></i></i></p>
<p>Note I don't make faces / routes in the direction of the
dataflow (i.e. there is no premade face/route from E --> A)
as I don't think they are needed. Also these host names resolve
correctly through the use of an overlay network in docker. <br>
</p>
<p><i><i><br>
</i></i></p>
<p>Node G also runs NFD and a jNDN app which registers the prefix
<i>/test/g </i>and I can control when to call <i>face.processEvents()
</i>using a key stroke, so that I can control when things
happen. <br>
</p>
<p><br>
</p>
<p>I then ran this test with NFD's <i>Forwarder</i> and <i>ContentStore</i>
modules set to a log level of DEBUG so I could see what was
going on:</p>
<p><br>
</p>
<p>- On <b>node A</b>: <i>ndnpeek /test/g/0 -l 1000000 <br>
</i></p>
<p><i> - </i>This expresses an interest for <i>/test/g/0</i>
with a long timeout for those who might not be familiar<br>
</p>
<p><i> - </i>This reaches node E who creates a PIT entry and
forwards it to node G as expected</p>
<p> - This then reaches node G who's NFD forwards it on to the
jNDN app for handling</p>
<p> - However the app does <b>not</b> respond with the
Data or even see the Interest yet, as I will manually call <i>face.processEvents()</i>
with a key stroke<i> later<br>
</i></p>
<p><i><br>
</i></p>
<p><i>- </i>On <b>node B</b>: <i>ndnpeek /test/g/0 -l 1000000</i></p>
<p> - This again reaches node E <br>
</p>
<p> - Node E does <b>not</b> create a <b>new </b>PIT entry
(or at least the <i>nPitEntries</i> from the output of <i>nfdc
status</i> doesn't change), but presumably adds node B's face
to the existing entry.</p>
<p> - <b>However, node E then forwards a <u>second</u>
Interest to G with the same name of <i>/test/g/0</i></b></p>
<p><b> </b>- This second interest reaches node G's NFD who
proceeds to forward the second interest to the jNDN app.</p>
- This is the behavior I wasn't expecting!<br>
<p><br>
</p>
<p>- On <b>node G</b>: I finally call <i>face.processEvents()</i><br>
</p>
<p> - Node G then sees the <b>two</b> Interests (which have
the <b>exact same name</b>) and responds to them with the
appropriate Data</p>
<p> - Whichever Data packet reaches node G's NFD first is then
forwarded to node E and onto nodes A and B</p>
<p> - The Data packet that reaches node G's NFD second is then
marked as unsolicited and dropped by the NFD</p>
<p><br>
</p>
<p>Is this intended behavior or have I set something up wrong? The
packet produced by G is multicasted back to both A and B through
E indicating that the PIT entries are correct, but it seems odd
that the application level producer at node G must see both of
these interests? For context I am currently prototyping a small
P2P multiplayer game that runs over NDN, meaning Interest
aggregation could save producers a lot of cycles and network
traffic. <br>
</p>
<p>The logs produced by the NFDs at each of the nodes are
available at <a href="https://github.com/stefano-lupo/NFD-Interest-Aggregation-Logs" target="_blank" rel="noreferrer">this
repo</a> if anyone would like to take a look - I included
copies which have only (what I think is) the relevant
information and some comments on what happens.</p>
<p><br>
</p>
<p>Thanks in advance for any information.</p>
<p>Stefano<br>
</p>
</div>
</div><br>
</blockquote></div></div></div>