Documentation ¶
Index ¶
Constants ¶
const ( // RequestQueueQuitPath specifies the path to send quit request to // queue-proxy. This is used for preStop hook of queue-proxy. It: // - marks the service as not ready, so that requests will no longer // be routed to it, // - adds a small delay, so that the container doesn't get killed at // the same time the pod is marked for removal. RequestQueueQuitPath = "/quitquitquit" // RequestQueueHealthPath specifies the path for health checks for // queue-proxy. RequestQueueHealthPath = "/health" )
const ( // ViewReportingPeriod is the interval of time between reporting aggregated views. ViewReportingPeriod = time.Second // ReporterReportingPeriod is the interval of time between reporting stats by queue proxy. // It should be equal to or larger than ViewReportingPeriod so that no stat // will be dropped if LastValue aggregation is used for a view. ReporterReportingPeriod = time.Second // OperationsPerSecondM number of operations per second. OperationsPerSecondM Measurement = iota // AverageConcurrentRequestsM average number of requests currently being handled by this pod. AverageConcurrentRequestsM )
Variables ¶
var ( // ErrUpdateCapacity the the capacity could not be updated as wished. ErrUpdateCapacity = errors.New("failed to add all capacity to the breaker") // ErrRelease indicates that Release was called more often than Acquire. ErrRelease = errors.New("semaphore release error: returned tokens must be <= acquired tokens") )
Functions ¶
func TimeToFirstByteTimeoutHandler ¶ added in v0.3.0
TimeToFirstByteTimeoutHandler returns a Handler that runs `h` with the given time limit in which the first byte of the response must be written.
The new Handler calls h.ServeHTTP to handle each request, but if a call runs for longer than its time limit, the handler responds with a 503 Service Unavailable error and the given message in its body. (If msg is empty, a suitable default message will be sent.) After such a timeout, writes by h to its ResponseWriter will return ErrHandlerTimeout.
A panic from the underlying handler is propagated as-is to be able to make use of custom panic behavior by HTTP handlers. See https://golang.org/pkg/net/http/#Handler.
The implementation is largely inspired by http.TimeoutHandler.
Types ¶
type Breaker ¶
type Breaker struct {
// contains filtered or unexported fields
}
Breaker is a component that enforces a concurrency limit on the execution of a function. It also maintains a queue of function executions in excess of the concurrency limit. Function call attempts beyond the limit of the queue are failed immediately.
func NewBreaker ¶
func NewBreaker(params BreakerParams) *Breaker
NewBreaker creates a Breaker with the desired queue depth, concurrency limit and initial capacity.
func (*Breaker) Capacity ¶ added in v0.4.0
Capacity returns the number of allowed in-flight requests on this breaker.
func (*Breaker) Maybe ¶
Maybe conditionally executes thunk based on the Breaker concurrency and queue parameters. If the concurrency limit and queue capacity are already consumed, Maybe returns immediately without calling thunk. If the thunk was executed, Maybe returns true, else false.
func (*Breaker) UpdateConcurrency ¶ added in v0.4.0
UpdateConcurrency updates the maximum number of in-flight requests.
type BreakerParams ¶ added in v0.4.0
BreakerParams defines the parameters of the breaker.
type Channels ¶
type Channels struct { // Ticks with every request arrived/completed respectively ReqChan chan ReqEvent // Ticks with every stat report request ReportChan <-chan time.Time // Stat reporting channel StatChan chan *autoscaler.Stat }
Channels is a structure for holding the channels for driving Stats. It's just to make the NewStats signature easier to read.
type Reporter ¶ added in v0.3.0
type Reporter struct { Initialized bool // contains filtered or unexported fields }
Reporter structure represents a prometheus exporter.
func NewStatsReporter ¶ added in v0.3.0
func NewStatsReporter(namespace string, config string, revision string, pod string) (*Reporter, error)
NewStatsReporter creates a reporter that collects and reports queue metrics.
func (*Reporter) UnregisterViews ¶ added in v0.3.0
UnregisterViews Unregister views.
type ReqEvent ¶
type ReqEvent struct { Time time.Time EventType ReqEventType }
ReqEvent represents either an incoming or closed request.
type ReqEventType ¶ added in v0.2.0
type ReqEventType int
ReqEventType denotes the type (incoming/closed) of a ReqEvent.
const ( // ReqIn represents an incoming request ReqIn ReqEventType = iota // ReqOut represents a finished request ReqOut )