Test Details Overview

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 Results

Test Case Status Duration Median Deviation Log Graph
No test results available yet. Check the GitHub test run for job status and logs.