class Queue

Immutable policy for one class of requests.

Nested Classes and Modules

class Builder

Builds 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 name Symbol | String

The stable queue name.

parameter matcher Proc | Nil

The request classifier.

parameter eligibility Proc | Nil

The backend eligibility policy.

parameter admission #admit? | #call | Nil

The queue admission policy.

parameter balance_policy #select

The backend balance policy.

parameter depth_limit Integer | Nil

The maximum queue depth.

parameter wait_limit Float | Nil

The maximum queue wait.

parameter shed_status Integer

The rejection response status.

parameter shed_headers Hash

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 request Protocol::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