NccStrategy doesn't explore potential upstreams
A---B | | C---D
- consumer on A, producer on D
- A-B-D link RTT is 20ms
- A-C-D link RTT is 20ms
Steps to reproduce:
- send Interests from A to D
- observe packets sent through B & C.
- wait until the exploration period is over (ncc selected a best face and adjusted the prediction to be higher than the path RTT).
- reduce the RTT of the non-selected path to 10 ms. (If B was selected as best next hop, change A-C-D link RTT to 10ms).
Expected: ncc adjusts the prediction down until best face times out, and then explores and selects the other face.
Actual: ncc doesn't explore the second face and continue to use the previously selected face as the best face.
I believe this bug is caused by undesired call of timeoutOnBestFace. Unlike doPropagate, timeoutOnBestFace is not canceled when the interest is satisfied, but only when PITEntryInfo is deleted. I suspect that in some cases, timeoutOnBestFace is scheduled to run before the pit entry is erased, and therefore the prediction is adjusted up even though the interest was satisfied. (The prediction is adjusted down upon the arrival of the Data packet and then immediately adjusted up).
This bug can cause undesired behavior in other scenarios as well.