named-data / python-ndn

An NDN client library with AsyncIO support in Python 3
https://python-ndn.readthedocs.io/en/latest
Apache License 2.0
24 stars 18 forks source link

Frequent Prefix Registration Failure #34

Open justincpresley opened 3 years ago

justincpresley commented 3 years ago

System: Ubuntu 20.04 Forwarder Version: NFD-nightly, latest pull Scope: When working with heavy applications using python-ndn that register more than 2+ prefixes. Error Frequency: Around 1 per 10 registrations, starting to see this problem more though.

Situation: When working on ndn-hydra, an application that listens to around 6+ different prefixes, I noticed that I would consistently get the error Registration for PREFIX failed: 403 authorization rejected for about half of the times that I ran the application. I dismissed this fact when first encountered, and later become curious which lead me to open this issue for NFD-nightly as I thought it was a forwarding-related problem.

Reproducing: You can see this error in action if you run ndn-hydra. It might not happen in the very first run, but a couple will bound to produce this error.

Problem: As stated in the issue, @yoursunny noted that the error is likely a result of python-ndn not implementing stop and wait correctly. More information is found inside that issue.

justincpresley commented 3 years ago

Hey, feel more than free to delay this issue until appropriate time can be allocated. It is not an urgent issue and can be worked around till it can be fixed.

zjkmxy commented 3 years ago

Last time this happens because the same key was used to sign multiple registration commands in one ms. Somehow NFD prevents this. I added a delay function in sending command Interests to slow it down. If you use python-ndn with multithreading, probably the delay does not work properly. You can try to slow down registration (1-2ms is enough, which does not impede performance much) and see what happens.

yoursunny commented 3 years ago

If you specifically talk about Hydra:

justincpresley commented 3 years ago

I would like to point out that even running one Hydra node results in this problem, so while ensuring instance separation (like key maagement) could help, the existence of multiple instances does not complete the problem.