mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
64 lines
2.4 KiB
Go
64 lines
2.4 KiB
Go
package runnerpool
|
|
|
|
import (
|
|
"context"
|
|
"crypto/tls"
|
|
"io"
|
|
"net/http"
|
|
|
|
"github.com/fnproject/fn/api/common"
|
|
"github.com/fnproject/fn/api/models"
|
|
)
|
|
|
|
// Placer implements a placement strategy for calls that are load-balanced
|
|
// across runners in a pool
|
|
type Placer interface {
|
|
PlaceCall(ctx context.Context, rp RunnerPool, call RunnerCall) error
|
|
GetPlacerConfig() PlacerConfig
|
|
}
|
|
|
|
// RunnerPool is the abstraction for getting an ordered list of runners to try for a call
|
|
type RunnerPool interface {
|
|
// returns an error for unrecoverable errors that should not be retried
|
|
Runners(ctx context.Context, call RunnerCall) ([]Runner, error)
|
|
Shutdown(ctx context.Context) error
|
|
}
|
|
|
|
// MTLSRunnerFactory represents a factory method for constructing runners using mTLS
|
|
type MTLSRunnerFactory func(addr string, tlsConf *tls.Config) (Runner, error)
|
|
|
|
// RunnerStatus is general information on Runner health as returned by Runner::Status() call
|
|
type RunnerStatus struct {
|
|
ActiveRequestCount int32 // Number of active running requests on Runner
|
|
RequestsReceived uint64 // Number of requests received by Runner
|
|
RequestsHandled uint64 // Number of requests handled without NACK by Runner
|
|
StatusFailed bool // True if Status execution failed
|
|
Cached bool // True if Status was provided from cache
|
|
StatusId string // Call ID for Status
|
|
Details string // General/Debug Log information
|
|
ErrorCode int32 // If StatusFailed, then error code is set
|
|
ErrorStr string // Error details if StatusFailed and ErrorCode is set
|
|
CreatedAt common.DateTime // Status creation date at Runner
|
|
StartedAt common.DateTime // Status execution date at Runner
|
|
CompletedAt common.DateTime // Status completion date at Runner
|
|
}
|
|
|
|
// Runner is the interface to invoke the execution of a function call on a specific runner
|
|
type Runner interface {
|
|
TryExec(ctx context.Context, call RunnerCall) (bool, error)
|
|
Status(ctx context.Context) (*RunnerStatus, error)
|
|
Close(ctx context.Context) error
|
|
Address() string
|
|
}
|
|
|
|
// RunnerCall provides access to the necessary details of request in order for it to be
|
|
// processed by a RunnerPool
|
|
type RunnerCall interface {
|
|
SlotHashId() string
|
|
Extensions() map[string]string
|
|
RequestBody() io.ReadCloser
|
|
ResponseWriter() http.ResponseWriter
|
|
StdErr() io.ReadWriteCloser
|
|
Model() *models.Call
|
|
}
|