DSR did not update, check or invaildate server[x].status #55
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When using the evaluating and testing, I was trying to manually take a server out of rotation, as documented in the example at http://siag.nu/hypermail/pen/0038.html
Using for example :
penctl localhost:8888 server 0 blacklist 300The server was not being taking out of rotation. As far as I could tell, try_server(), which should update server[x].status was not being called in the DSR mode. In additionally, in pen.c:do_cmd(), when running
penctl socket server X ...for any of the servers settings the DSR hashing table is never invalidatedserver_alg ^= ALG_HASH_VALIDAlso, there was no regular checking for for the blacklist timeout. The logical place seemed to be dsr.c:dsr_arp(). Added one new global last_hash_rebuild, and using the blacklist_time global as the a forced periodic server table rehashing, and is of course forced when penctl updates a server.
Added some more debugging to help follow the logic and verify. I have not verified the do_cmd() outside of DSR mode.