Give fair queues a dead origin policy and purge them as they grow (#5255) A request queued under a channel that has since died stayed until it was popped, and the purge of dead origins ran only from the batch pops. For the bootstrap server that meant every request of a disconnected peer was still popped and charged to the limiter, so connection churn could grow the backlog past the per channel caps with no ceiling. A consumer that never popped, as with a cap of zero, never purged at all. A queue keyed by channels now takes a nano::dead_origin_policy at construction: serve keeps a dead origin's requests until they are drained, discard drops them with the origin at the next purge. The block, vote and message processors serve, the bootstrap server and vote replier discard. The default constructor is only available to channel-less queues, so no consumer can leave the policy unstated. The purge and the refresh of caps and priorities are paced by maintenance (), which also runs when a new origin is created, the one way the queue grows, so it no longer depends on the consumer popping. Its interval is a public maintenance_interval member shared by the push and pop paths, and it returns the number of requests dropped.
__________
Type: commit
Hash: 5775caf4296959866f6603d5484ab89906d6190a
Created: today
__________
gr0v1ty/nano-node:5775caf4296959866f6603d5484ab89906d6190a
| Test Case | Status | Duration | Median Deviation | Log | Graph |
|---|---|---|---|---|---|
| No test results available yet. Check the GitHub test run for job status and logs. | |||||