mirror of
https://github.com/lightningnetwork/lnd.git
synced 2026-08-14 12:42:48 +02:00
Add a generic BackpressureQueue that uses a DropPredicate to proactively shed load before the queue is completely full. Two predicate types are provided: - DropCheckFunc: length-only drop decision (func(queueLen int) bool) - DropPredicate[T]: item-aware drop decision RandomEarlyDrop returns a DropCheckFunc since RED only considers queue depth. The AsDropPredicate helper adapts it to DropPredicate[T] for use with BackpressureQueue. In addition to the blocking Enqueue/Dequeue methods, the queue exposes TryEnqueue (non-blocking send with drop check), Len, ReceiveChan, and Close. These are needed by the actor package's BackpressureMailbox which uses BackpressureQueue as its core buffer while implementing the Mailbox interface's select-based iteration and lifecycle methods. Property-based tests using pgregory.net/rapid verify queue invariants (capacity bounds, FIFO ordering, model consistency) across randomized enqueue/dequeue sequences with RED enabled.
22 lines
599 B
Modula-2
22 lines
599 B
Modula-2
module github.com/lightningnetwork/lnd/queue
|
|
|
|
go 1.25.5
|
|
|
|
require (
|
|
github.com/lightningnetwork/lnd/fn/v2 v2.0.8
|
|
github.com/lightningnetwork/lnd/ticker v1.0.0
|
|
github.com/stretchr/testify v1.8.1
|
|
pgregory.net/rapid v1.2.0
|
|
)
|
|
|
|
require (
|
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
|
golang.org/x/exp v0.0.0-20231226003508-02704c960a9b // indirect
|
|
golang.org/x/sync v0.7.0 // indirect
|
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
|
)
|
|
|
|
replace github.com/lightningnetwork/lnd/ticker v1.0.0 => ../ticker
|
|
|
|
replace github.com/lightningnetwork/lnd/fn/v2 => ../fn
|