mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
* fn: mutex while waiting I/O considered harmful *) Removed hold mutex while wait I/O cases these included possible disk I/O and network I/O. *) Error/Context Close/Shutdown semantics changed since the context timeout and comments were misleading. Close always waits for pending gRPC session to complete. Context usage here was merely 'wait up to x secs to report an error' which only logs the error anyway. Instead, the runner can log the error. And context still can be passed around perhaps for future opencensus instrumentation.
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package runnerpool
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
"time"
|
|
|
|
"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(rp RunnerPool, ctx context.Context, call RunnerCall) error
|
|
}
|
|
|
|
// RunnerPool is the abstraction for getting an ordered list of runners to try for a call
|
|
type RunnerPool interface {
|
|
Runners(call RunnerCall) ([]Runner, error)
|
|
Shutdown(ctx context.Context) error
|
|
}
|
|
|
|
// PKIData encapsulates TLS certificate data
|
|
type PKIData struct {
|
|
Ca string
|
|
Key string
|
|
Cert string
|
|
}
|
|
|
|
// MTLSRunnerFactory represents a factory method for constructing runners using mTLS
|
|
type MTLSRunnerFactory func(addr, certCommonName string, pki *PKIData) (Runner, error)
|
|
|
|
// 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)
|
|
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 {
|
|
LbDeadline() time.Time
|
|
RequestBody() io.ReadCloser
|
|
ResponseWriter() http.ResponseWriter
|
|
StdErr() io.ReadWriteCloser
|
|
Model() *models.Call
|
|
}
|