Add documentation for scaling handler

- documents ScalingConfig and MakeScalingHandler

Signed-off-by: Alex Ellis (VMware) <alexellis2@gmail.com>
This commit is contained in:
Alex Ellis (VMware) 2018-10-28 12:24:25 +00:00
parent 0601794e23
commit 101b06243b
2 changed files with 16 additions and 6 deletions

View File

@ -12,15 +12,25 @@ import (
// ScalingConfig for scaling behaviours // ScalingConfig for scaling behaviours
type ScalingConfig struct { type ScalingConfig struct {
// MaxPollCount attempts to query a function before giving up
MaxPollCount uint MaxPollCount uint
// FunctionPollInterval delay or interval between polling a function's readiness status
FunctionPollInterval time.Duration FunctionPollInterval time.Duration
// CacheExpiry life-time for a cache entry before considering invalid
CacheExpiry time.Duration CacheExpiry time.Duration
// ServiceQuery queries available/ready replicas for function
ServiceQuery ServiceQuery ServiceQuery ServiceQuery
} }
// MakeScalingHandler creates handler which can scale a function from // MakeScalingHandler creates handler which can scale a function from
// zero to 1 replica(s). // zero to N replica(s). After scaling the next http.HandlerFunc will
func MakeScalingHandler(next http.HandlerFunc, upstream http.HandlerFunc, config ScalingConfig) http.HandlerFunc { // be called. If the function is not ready after the configured
// amount of attempts / queries then next will not be invoked and a status
// will be returned to the client.
func MakeScalingHandler(next http.HandlerFunc, config ScalingConfig) http.HandlerFunc {
cache := FunctionCache{ cache := FunctionCache{
Cache: make(map[string]*FunctionMeta), Cache: make(map[string]*FunctionMeta),
Expiry: config.CacheExpiry, Expiry: config.CacheExpiry,

View File

@ -141,7 +141,7 @@ func main() {
ServiceQuery: alertHandler, ServiceQuery: alertHandler,
} }
functionProxy = handlers.MakeScalingHandler(faasHandlers.Proxy, faasHandlers.QueryFunction, scalingConfig) functionProxy = handlers.MakeScalingHandler(faasHandlers.Proxy, scalingConfig)
} }
// r.StrictSlash(false) // This didn't work, so register routes twice. // r.StrictSlash(false) // This didn't work, so register routes twice.
r.HandleFunc("/function/{name:[-a-zA-Z_0-9]+}", functionProxy) r.HandleFunc("/function/{name:[-a-zA-Z_0-9]+}", functionProxy)