class Queue
Immutable policy for one class of requests.
Nested Classes and Modules
class BuilderBuilds a queue policy using the configuration DSL.
Definitions
def initialize(name, matcher:, eligibility:, admission:, balance_policy:, depth_limit:, wait_limit:, shed_status:, shed_headers:)
Signature
-
parameter
nameSymbol | String The stable queue name.
-
parameter
matcherProc | Nil The request classifier.
-
parameter
eligibilityProc | Nil The backend eligibility policy.
-
parameter
admission#admit? | #call | Nil The queue admission policy.
-
parameter
balance_policy#select The backend balance policy.
-
parameter
depth_limitInteger | Nil The maximum queue depth.
-
parameter
wait_limitFloat | Nil The maximum queue wait.
-
parameter
shed_statusInteger The rejection response status.
-
parameter
shed_headersHash The rejection response headers.
Implementation
def initialize(name, matcher:, eligibility:, admission:, balance_policy:, depth_limit:, wait_limit:, shed_status:, shed_headers:)
@name = name.to_sym
@matcher = matcher
@eligibility = eligibility
@admission = admission
@balance_policy = balance_policy
@depth_limit = depth_limit
@wait_limit = wait_limit
@shed_status = shed_status
@shed_headers = shed_headers
end
def match?(request)
Signature
-
parameter
requestProtocol::HTTP::Request The request to classify.
-
returns
Boolean | Nil Whether the request matches this queue.
Implementation
def match?(request)
@matcher&.call(request)
end
def eligible?(backend, request)
Signature
-
returns
Boolean Whether a backend may serve the request.
Implementation
def eligible?(backend, request)
!@eligibility || @eligibility.call(backend, request)
end
def admit?(request, pending:)
Signature
-
returns
Boolean Whether a request may enter the pending queue.
Implementation
def admit?(request, pending:)
return true unless @admission
if @admission.respond_to?(:admit?)
@admission.admit?(request, queue: self, pending: pending)
else
@admission.call(request, queue: self, pending: pending)
end
end