Documentation ¶
Index ¶
- Constants
- Variables
- func GetAPIErrorCode(e error) int
- func IsAPIError(e error) bool
- func IsFuncError(err error) bool
- func NewFuncError(err APIError) error
- func ValidTriggerType(a string) bool
- func ValidTriggerTypes() []string
- type APIError
- type APIErrorWrapper
- type Annotations
- func (m Annotations) Equals(other Annotations) bool
- func (m Annotations) Get(key string) ([]byte, bool)
- func (m Annotations) GetString(key string) (string, error)
- func (m Annotations) MergeChange(newVs Annotations) Annotations
- func (m *Annotations) Scan(value interface{}) error
- func (m Annotations) Subset(other Annotations) bool
- func (m Annotations) Validate() APIError
- func (m Annotations) Value() (driver.Value, error)
- func (m Annotations) With(key string, data interface{}) (Annotations, error)
- func (m Annotations) Without(key string) Annotations
- type App
- type AppFilter
- type AppList
- type AppWrapper
- type Call
- type CallFilter
- type CallList
- type Config
- type Datastore
- type ErrInvalidSyslog
- type Error
- type ErrorWrapper
- type Fn
- type FnFilter
- type FnList
- type FuncError
- type Headers
- type LogStore
- type MessageQueue
- type MilliCPUs
- type ResourceConfig
- type Trigger
- type TriggerFilter
- type TriggerList
Constants ¶
const ( // TypeNone ... TypeNone = "" // TypeSync ... TypeSync = "sync" // TypeAsync ... TypeAsync = "async" // TypeDetached is used for calls which return an ack to the caller as soon as the call starts TypeDetached = "detached" )
const ( MinMilliCPUs = 0 // 0 is unlimited MaxMilliCPUs = 1024000 // 1024 CPUs )
const FnInvokeEndpointAnnotation = "fnproject.io/fn/invokeEndpoint"
FnInvokeEndpointAnnotation is the annotation that exposes the fn invoke endpoint For want of a better place to put this it's here
const (
MaxTriggerName = 30
)
TODO we can put constants all in this file too
const TriggerHTTPEndpointAnnotation = "fnproject.io/trigger/httpEndpoint"
TriggerHTTPEndpointAnnotation is the annotation that exposes the HTTP trigger endpoint For want of a better place to put this it's here
const TriggerTypeHTTP = "http"
TriggerTypeHTTP represents an HTTP trigger
Variables ¶
var ( ErrAppsMissingID = err{ // contains filtered or unexported fields } ErrAppIDProvided = err{ // contains filtered or unexported fields } ErrAppsIDMismatch = err{ // contains filtered or unexported fields } ErrAppsMissingName = err{ // contains filtered or unexported fields } ErrAppsTooLongName = err{ // contains filtered or unexported fields } ErrAppsInvalidName = err{ // contains filtered or unexported fields } ErrAppsAlreadyExists = err{ // contains filtered or unexported fields } ErrAppsMissingNew = err{ // contains filtered or unexported fields } ErrAppsNameImmutable = err{ // contains filtered or unexported fields } ErrAppsNotFound = err{ // contains filtered or unexported fields } )
var ( ErrMethodNotAllowed = err{ // contains filtered or unexported fields } ErrInvalidJSON = err{ // contains filtered or unexported fields } ErrClientCancel = err{ // contains filtered or unexported fields } ErrCallTimeoutServerBusy = err{ // contains filtered or unexported fields } ErrUnsupportedMediaType = err{ // contains filtered or unexported fields } ErrMissingID = err{ // contains filtered or unexported fields } ErrMissingAppID = err{ // contains filtered or unexported fields } ErrMissingFnID = err{ // contains filtered or unexported fields } ErrMissingName = err{ // contains filtered or unexported fields } ErrCreatedAtProvided = err{ // contains filtered or unexported fields } ErrUpdatedAtProvided = err{ // contains filtered or unexported fields } ErrDatastoreEmptyApp = err{ // contains filtered or unexported fields } ErrDatastoreEmptyCallID = err{ // contains filtered or unexported fields } ErrDatastoreEmptyFn = err{ // contains filtered or unexported fields } ErrDatastoreEmptyFnID = err{ // contains filtered or unexported fields } ErrInvalidPayload = err{ // contains filtered or unexported fields } ErrFoundDynamicURL = err{ // contains filtered or unexported fields } ErrPathMalformed = err{ // contains filtered or unexported fields } ErrInvalidToTime = err{ // contains filtered or unexported fields } ErrInvalidFromTime = err{ // contains filtered or unexported fields } ErrInvalidMemory = err{ // contains filtered or unexported fields } ErrCallResourceTooBig = err{ // contains filtered or unexported fields } ErrCallNotFound = err{ // contains filtered or unexported fields } ErrInvalidCPUs = err{ // contains filtered or unexported fields } ErrCallLogNotFound = err{ // contains filtered or unexported fields } ErrPathNotFound = err{ // contains filtered or unexported fields } ErrInvalidAnnotationKey = err{ // contains filtered or unexported fields } ErrInvalidAnnotationKeyLength = err{ // contains filtered or unexported fields } ErrInvalidAnnotationValue = err{ // contains filtered or unexported fields } ErrInvalidAnnotationValueLength = err{ // contains filtered or unexported fields } ErrTooManyAnnotationKeys = err{ // contains filtered or unexported fields } ErrTooManyRequests = err{ // contains filtered or unexported fields } ErrAsyncUnsupported = err{ // contains filtered or unexported fields } ErrDetachUnsupported = err{ // contains filtered or unexported fields } ErrCallHandlerNotFound = err{ // contains filtered or unexported fields } ErrServiceReservationFailure = err{ // contains filtered or unexported fields } ErrDockerPullTimeout = ferr{ // contains filtered or unexported fields } ErrFunctionResponseTooBig = ferr{ // contains filtered or unexported fields } ErrFunctionResponse = ferr{ // contains filtered or unexported fields } ErrFunctionFailed = ferr{ // contains filtered or unexported fields } ErrFunctionInvalidResponse = ferr{ // contains filtered or unexported fields } ErrRequestContentTooBig = ferr{ // contains filtered or unexported fields } ErrCallTimeout = ferr{ // contains filtered or unexported fields } ErrContainerInitFail = ferr{ // contains filtered or unexported fields } ErrContainerInitTimeout = ferr{ // contains filtered or unexported fields } )
var ( MaxMemory uint64 = 8 * 1024 // 8GB MaxTimeout int32 = 300 // 5m MaxIdleTimeout int32 = 3600 // 1h DefaultTimeout int32 = 30 // seconds DefaultIdleTimeout int32 = 30 // seconds DefaultMemory uint64 = 128 // MB ErrFnsIDMismatch = err{ // contains filtered or unexported fields } ErrFnsIDProvided = err{ // contains filtered or unexported fields } ErrFnsMissingID = err{ // contains filtered or unexported fields } ErrFnsMissingName = err{ // contains filtered or unexported fields } ErrFnsInvalidName = err{ // contains filtered or unexported fields } ErrFnsTooLongName = err{ // contains filtered or unexported fields } ErrFnsMissingAppID = err{ // contains filtered or unexported fields } ErrFnsMissingImage = err{ // contains filtered or unexported fields } ErrFnsInvalidImage = err{ // contains filtered or unexported fields } ErrFnsInvalidTimeout = err{ // contains filtered or unexported fields } ErrFnsInvalidIdleTimeout = err{ // contains filtered or unexported fields } ErrFnsNotFound = err{ // contains filtered or unexported fields } ErrFnsExists = err{ // contains filtered or unexported fields } )
var ( //ErrTriggerIDProvided indicates that a trigger ID was specified when it shouldn't have been ErrTriggerIDProvided = err{ // contains filtered or unexported fields } //ErrTriggerIDMismatch indicates an ID was provided that did not match the ID of the corresponding operation/call ErrTriggerIDMismatch = err{ // contains filtered or unexported fields } //ErrTriggerMissingName - name not specified on a trigger object ErrTriggerMissingName = err{ // contains filtered or unexported fields } //ErrTriggerTooLongName - name exceeds maximum permitted name ErrTriggerTooLongName = err{ // contains filtered or unexported fields } //ErrTriggerInvalidName - name does not comply with naming spec ErrTriggerInvalidName = err{ // contains filtered or unexported fields } //ErrTriggerMissingAppID - no API id specified on trigger creation ErrTriggerMissingAppID = err{ // contains filtered or unexported fields } //ErrTriggerMissingFnID - no FNID specified on trigger creation ErrTriggerMissingFnID = err{ // contains filtered or unexported fields } //ErrTriggerFnIDNotSameApp - specified Fn does not belong to the same app as the provided AppID ErrTriggerFnIDNotSameApp = err{ // contains filtered or unexported fields } //ErrTriggerTypeUnknown - unsupported trigger type ErrTriggerTypeUnknown = err{ // contains filtered or unexported fields } //ErrTriggerMissingSource - no source spceified for trigger ErrTriggerMissingSource = err{ // contains filtered or unexported fields } //ErrTriggerMissingSourcePrefix - source does not have a / prefix ErrTriggerMissingSourcePrefix = err{ // contains filtered or unexported fields } //ErrTriggerNotFound - trigger not found ErrTriggerNotFound = err{ // contains filtered or unexported fields } //ErrTriggerExists - a trigger with the specified name already exists ErrTriggerExists = err{ // contains filtered or unexported fields } //ErrTriggerSourceExists - another trigger on the same app has the same source and type ErrTriggerSourceExists = err{ // contains filtered or unexported fields } )
Functions ¶
func GetAPIErrorCode ¶
GetAPIErrorCode returns 0 if an error is not an APIError, or the result of the Code() method from an APIError
func IsFuncError ¶ added in v0.3.649
IsFuncError checks if err is of type FuncError
func NewFuncError ¶ added in v0.3.649
NewFuncError returns a FuncError
func ValidTriggerType ¶
ValidTriggerType checks that a given trigger type is valid on this service
func ValidTriggerTypes ¶
func ValidTriggerTypes() []string
ValidTriggerTypes lists the supported trigger types in this service
Types ¶
type APIError ¶
APIError any error that implements this interface will return an API response with the provided status code and error message body
func NewAPIError ¶
NewAPIError returns an APIError given a code and error
type APIErrorWrapper ¶
APIErrorWrapper wraps an error with an APIError such that the APIError governs the HTTP response but the root error remains accessible.
func NewAPIErrorWrapper ¶
func NewAPIErrorWrapper(apiErr APIError, rootErr error) APIErrorWrapper
type Annotations ¶
type Annotations map[string]*annotationValue
Annotations encapsulates key-value metadata associated with resource. The structure is immutable via its public API and nil-safe for its contract permissive nilability is here to simplify updates and reduce the need for nil handling in extensions - annotations should be updated by over-writing the original object:
target.Annotations = target.Annotations.With("fooKey",1)
old MD remains empty Annotations is lenable
func EmptyAnnotations ¶
func EmptyAnnotations() Annotations
func (Annotations) Equals ¶
func (m Annotations) Equals(other Annotations) bool
Equals is defined based on un-ordered k/v comparison at of the annotation keys and (compacted) values of annotations, JSON object-value equality for values is property-order dependent
func (Annotations) Get ¶
func (m Annotations) Get(key string) ([]byte, bool)
Get returns a raw JSON value of a annotation key
func (Annotations) GetString ¶
func (m Annotations) GetString(key string) (string, error)
GetString returns a string value if the annotation value is a string, otherwise an error
func (Annotations) MergeChange ¶
func (m Annotations) MergeChange(newVs Annotations) Annotations
MergeChange merges a delta (possibly including deletes) with an existing annotations object and returns a new (copy) annotations object or an error. This assumes that both old and new annotations objects contain only valid keys and only newVs may contain deletes
func (*Annotations) Scan ¶
func (m *Annotations) Scan(value interface{}) error
Scan implements sql.Scanner
func (Annotations) Subset ¶
func (m Annotations) Subset(other Annotations) bool
func (Annotations) Validate ¶
func (m Annotations) Validate() APIError
Validate validates a final annotations object prior to store, This will reject partial/patch changes with empty values (containing deletes)
func (Annotations) Value ¶
func (m Annotations) Value() (driver.Value, error)
Value implements sql.Valuer, returning a string
func (Annotations) With ¶
func (m Annotations) With(key string, data interface{}) (Annotations, error)
With Creates a new annotations object containing the specified value - this does not perform size checks on the total number of keys this validates the correctness of the key and value. this returns a new the annotations object with the key set.
func (Annotations) Without ¶
func (m Annotations) Without(key string) Annotations
Without returns a new annotations object with a value excluded
type App ¶
type App struct { ID string `json:"id" db:"id"` Name string `json:"name" db:"name"` Config Config `json:"config,omitempty" db:"config"` Annotations Annotations `json:"annotations,omitempty" db:"annotations"` SyslogURL *string `json:"syslog_url,omitempty" db:"syslog_url"` CreatedAt common.DateTime `json:"created_at,omitempty" db:"created_at"` UpdatedAt common.DateTime `json:"updated_at,omitempty" db:"updated_at"` }
func (*App) EqualsWithAnnotationSubset ¶
type AppWrapper ¶
type AppWrapper struct {
App *App `json:"app"`
}
func (*AppWrapper) Validate ¶
func (m *AppWrapper) Validate() error
type Call ¶
type Call struct { // Unique identifier representing a specific call. ID string `json:"id" db:"id"` // NOTE: this is stale, retries are not implemented atm, but this is nice, so leaving // States and valid transitions. // // +---------+ // +---------> delayed <----------------+ // +----+----+ | // | | // | | // +----v----+ | // +---------> queued <----------------+ // +----+----+ * // | * // | retry * creates new call // +----v----+ * // | running | * // +--+-+-+--+ | // +---------|-|-|-----+-------------+ // +---|---------+ | +-----|---------+ | // | | | | | | // +-----v---^-+ +--v-------^+ +--v---^-+ // | success | | cancelled | | error | // +-----------+ +-----------+ +--------+ // // * delayed - has a delay. // * queued - Ready to be consumed when it's turn comes. // * running - Currently consumed by a runner which will attempt to process it. // * success - (or complete? success/error is common javascript terminology) // * error - Something went wrong. In this case more information can be obtained // by inspecting the "reason" field. // - timeout // - killed - forcibly killed by worker due to resource restrictions or access // violations. // - bad_exit - exited with non-zero status due to program termination/crash. // * cancelled - cancelled via API. More information in the reason field. // - client_request - Request was cancelled by a client. Status string `json:"status" db:"status"` // Name of Docker image to use. Image string `json:"image,omitempty" db:"-"` // Number of seconds to wait before queueing the call for consumption for the // first time. Must be a positive integer. Calls with a delay start in state // "delayed" and transition to "running" after delay seconds. Delay int32 `json:"delay,omitempty" db:"-"` // Type indicates whether a task is to be run synchronously or asynchronously. Type string `json:"type,omitempty" db:"-"` // Payload for the call. This is only used by async calls, to store their input. // TODO should we copy it into here too for debugging sync? Payload string `json:"payload,omitempty" db:"-"` // Full request url that spawned this invocation. URL string `json:"url,omitempty" db:"-"` // Method of the http request used to make this call. Method string `json:"method,omitempty" db:"-"` // Priority of the call. Higher has more priority. 3 levels from 0-2. Calls // at same priority are processed in FIFO order. Priority *int32 `json:"priority,omitempty" db:"-"` // Maximum runtime in seconds. Timeout int32 `json:"timeout,omitempty" db:"-"` // Hot function idle timeout in seconds before termination. IdleTimeout int32 `json:"idle_timeout,omitempty" db:"-"` // Tmpfs size in megabytes. TmpFsSize uint32 `json:"tmpfs_size,omitempty" db:"-"` // Memory is the amount of RAM this call is allocated. Memory uint64 `json:"memory,omitempty" db:"-"` // CPU as in MilliCPUs where each CPU core is split into 1000 units, specified either // *) milliCPUs as "100m" which is 1/10 of a CPU or // *) as floating point number "0.1" which is 1/10 of a CPU CPUs MilliCPUs `json:"cpus,omitempty" db:"-"` // Config is the set of configuration variables for the call Config Config `json:"config,omitempty" db:"-"` // Annotations is the set of annotations for the app/fn of the call. Annotations Annotations `json:"annotations,omitempty" db:"-"` // Headers are headers from the request that created this call Headers http.Header `json:"headers,omitempty" db:"-"` // SyslogURL is a syslog URL to send all logs to. SyslogURL string `json:"syslog_url,omitempty" db:"-"` // Time when call completed, whether it was successul or failed. Always in UTC. CompletedAt common.DateTime `json:"completed_at,omitempty" db:"completed_at"` // Time when call was submitted. Always in UTC. CreatedAt common.DateTime `json:"created_at,omitempty" db:"created_at"` // Time when call started execution. Always in UTC. StartedAt common.DateTime `json:"started_at,omitempty" db:"started_at"` // Stats is a list of metrics from this call's execution, possibly empty. Stats drivers.Stats `json:"stats,omitempty" db:"stats"` // Error is the reason why the call failed, it is only non-empty if // status is equal to "error". Error string `json:"error,omitempty" db:"error"` // App this call belongs to. AppID string `json:"app_id" db:"app_id"` // Name of the app. AppName string `json:"app_name" db:"app_name"` // Trigger this call belongs to. TriggerID string `json:"trigger_id" db:"trigger_id"` // Fn this call belongs to. FnID string `json:"fn_id" db:"fn_id"` }
Call is a representation of a specific invocation of a fn.
type CallFilter ¶
type Datastore ¶
type Datastore interface { // GetAppByID gets an App by ID. // Returns ErrAppsNotFound if no app is found. GetAppByID(ctx context.Context, appID string) (*App, error) // GetAppID gets an app ID by app name, ensures if app exists. // Returns ErrDatastoreEmptyAppName for empty appName. // Returns ErrAppsNotFound if no app is found. GetAppID(ctx context.Context, appName string) (string, error) // GetApps gets a slice of Apps, optionally filtered by name, and a cursor. // Missing filter or empty name will match all Apps. GetApps(ctx context.Context, filter *AppFilter) (*AppList, error) // InsertApp inserts an App. Returns ErrDatastoreEmptyApp when app is nil, and // ErrDatastoreEmptyAppName when app.Name is empty. // Returns ErrAppsAlreadyExists if an App by the same name already exists. InsertApp(ctx context.Context, app *App) (*App, error) // UpdateApp updates an App's Config. Returns ErrDatastoreEmptyApp when app is nil, and // ErrDatastoreEmptyAppName when app.Name is empty. // Returns ErrAppsNotFound if an App is not found. UpdateApp(ctx context.Context, app *App) (*App, error) // RemoveApp removes the App named appName. Returns ErrDatastoreEmptyAppName if appName is empty. // Returns ErrAppsNotFound if an App is not found. RemoveApp(ctx context.Context, appID string) error // InsertFn inserts a new function if one does not exist, applying any defaults necessary, InsertFn(ctx context.Context, fn *Fn) (*Fn, error) // UpdateFn updates a function that exists under the same id. // ErrMissingName is func.Name is empty. UpdateFn(ctx context.Context, fn *Fn) (*Fn, error) // GetFns returns a list of funcs, and a cursor, applying any additional filters provided. GetFns(ctx context.Context, filter *FnFilter) (*FnList, error) // GetFnByID returns a function by ID. Returns ErrDatastoreEmptyFnID if fnID is empty. // Returns ErrFnsNotFound if a fn is not found. GetFnByID(ctx context.Context, fnID string) (*Fn, error) // RemoveFn removes a function. Returns ErrDatastoreEmptyFnID if fnID is empty. // Returns ErrFnsNotFound if a func is not found. RemoveFn(ctx context.Context, fnID string) error // InsertTrigger inserts a trigger. Returns ErrDatastoreEmptyTrigger when trigger is nil, and specific errors for each field // Returns ErrTriggerAlreadyExists if the exact apiID, fnID, source, type combination already exists InsertTrigger(ctx context.Context, trigger *Trigger) (*Trigger, error) //UpdateTrigger updates a trigger object in the data store UpdateTrigger(ctx context.Context, trigger *Trigger) (*Trigger, error) // Removes a Trigger. Returns field specific errors if they are empty. // Returns nil if successful RemoveTrigger(ctx context.Context, triggerID string) error // GetTriggerByID gets a trigger by it's id. // Returns ErrTriggerNotFound when no matching trigger is found GetTriggerByID(ctx context.Context, triggerID string) (*Trigger, error) // GetTriggers gets a list of triggers that match the specified filter // Return ErrDatastoreEmptyAppId if no AppID set in the filter GetTriggers(ctx context.Context, filter *TriggerFilter) (*TriggerList, error) // GetTriggerBySource loads a trigger by type and source ID - this is only needed when the data store is also used for agent read access GetTriggerBySource(ctx context.Context, appId string, triggerType, source string) (*Trigger, error) // implements io.Closer to shutdown io.Closer }
type ErrInvalidSyslog ¶
type ErrInvalidSyslog string
func (ErrInvalidSyslog) Code ¶
func (e ErrInvalidSyslog) Code() int
func (ErrInvalidSyslog) Error ¶
func (e ErrInvalidSyslog) Error() string
type Error ¶
type ErrorWrapper ¶
type ErrorWrapper struct {
Error *Error `json:"error,omitempty"`
}
ErrorWrapper uniform error output (v1) only
func (*ErrorWrapper) Validate ¶
func (m *ErrorWrapper) Validate() error
type Fn ¶
type Fn struct { // ID is the generated resource id. ID string `json:"id" db:"id"` // Name is a user provided name for this fn. Name string `json:"name" db:"name"` // AppID is the name of the app this fn belongs to. AppID string `json:"app_id" db:"app_id"` // Image is the fully qualified container registry address to execute. // examples: hub.docker.io/me/myfunc, me/myfunc, me/func:0.0.1 Image string `json:"image" db:"image"` // ResourceConfig specifies resource constraints. ResourceConfig // embed (TODO or not?) // Config is the configuration passed to a function at execution time. Config Config `json:"config" db:"config"` // Annotations allow additional configuration of a function, these are not passed to the function. Annotations Annotations `json:"annotations,omitempty" db:"annotations"` // CreatedAt is the UTC timestamp when this function was created. CreatedAt common.DateTime `json:"created_at,omitempty" db:"created_at"` // UpdatedAt is the UTC timestamp of the last time this func was modified. UpdatedAt common.DateTime `json:"updated_at,omitempty" db:"updated_at"` }
Fn contains information about a function configuration.
func (*Fn) EqualsWithAnnotationSubset ¶
type FuncError ¶ added in v0.3.649
type FuncError interface { APIError // contains filtered or unexported methods }
FuncError is an error that is the function's fault, that uses the APIError but distinguishes fault to function specific errors
type LogStore ¶
type LogStore interface { // InsertLog will insert the log at callID, overwriting if it previously // existed. InsertLog(ctx context.Context, call *Call, callLog io.Reader) error // GetLog will return the log at callID, an error will be returned if the log // cannot be found. GetLog(ctx context.Context, fnID, callID string) (io.Reader, error) // InsertCall inserts a call into the datastore, it will error if the call already // exists. InsertCall(ctx context.Context, call *Call) error // GetCall2 returns a call at a certain id GetCall(ctx context.Context, fnID, callID string) (*Call, error) // GetCalls returns a list of calls that satisfy the given CallFilter. If no // calls exist, an empty list and a nil error are returned. GetCalls(ctx context.Context, filter *CallFilter) (*CallList, error) // Close will close any underlying connections as needed. // Close is not safe to be called from multiple threads. io.Closer }
type MessageQueue ¶
type MessageQueue interface { // Push a call onto the queue. If any error is returned, the call SHOULD not be // queued. Note that this does not completely avoid double queueing, that is // OK, a check against the datastore will be performed after a dequeue. // // If the job's Delay value is > 0, the job should NOT be enqueued. The job // should only be available in the queue after at least Delay seconds have // elapsed. No ordering is required among multiple jobs queued with similar // delays. That is, if jobs {A, C} are queued at t seconds, both with Delay // = 5 seconds, and the same priority, then they may be available on the // queue as [C, A] or [A, C]. Push(context.Context, *Call) (*Call, error) // Remove a job from the front of the queue, reserve it for a timeout and // return it. MQ implementations MUST NOT lose jobs in case of errors. That // is, in case of reservation failure, it should be possible to retrieve the // job on a future reservation. Reserve(context.Context) (*Call, error) // If a reservation is pending, consider it acknowledged and delete it. If // the job does not have an outstanding reservation, error. If a job did not // exist, succeed. Delete(context.Context, *Call) error // Close will close any underlying connections as needed. // Close is not safe to be called from multiple threads. io.Closer }
When a job is required to be restored to the queue, it should maintain it's approximate order in the queue. That is, for jobs [A, B, C], with A being the head of the queue: Reserve() leads to A being passed to a consumer, and timeout started. Next Reserve() leads to B being dequeued. This consumer finishes running the call, leading to Delete() being called. B is now permanently erased from the queue. A's timeout occurs before the job is finished. At this point the ordering should be [A, C] and not [C, A].
type MilliCPUs ¶
type MilliCPUs uint64
MilliCPU units
func (*MilliCPUs) MarshalJSON ¶
implements json.Marshaler
func (*MilliCPUs) UnmarshalJSON ¶
implements json.Unmarshaler
type ResourceConfig ¶
type ResourceConfig struct { // Memory is the amount of memory allotted, in MB. Memory uint64 `json:"memory,omitempty" db:"memory"` // Timeout is the max execution time for a function, in seconds. // TODO this should probably be milliseconds? Timeout int32 `json:"timeout,omitempty" db:"timeout"` // IdleTimeout is the // TODO this should probably be milliseconds IdleTimeout int32 `json:"idle_timeout,omitempty" db:"idle_timeout"` }
ResourceConfig specified resource constraints imposed on a function execution.
type Trigger ¶
type Trigger struct { ID string `json:"id" db:"id"` Name string `json:"name" db:"name"` AppID string `json:"app_id" db:"app_id"` FnID string `json:"fn_id" db:"fn_id"` CreatedAt common.DateTime `json:"created_at,omitempty" db:"created_at"` UpdatedAt common.DateTime `json:"updated_at,omitempty" db:"updated_at"` Type string `json:"type" db:"type"` Source string `json:"source" db:"source"` Annotations Annotations `json:"annotations,omitempty" db:"annotations"` }
Trigger represents a binding between a Function and an external event source
func (*Trigger) Equals ¶
Equals compares two triggers for semantic equality it ignores timestamp fields but includes annotations
func (*Trigger) EqualsWithAnnotationSubset ¶
EqualsWithAnnotationSubset is equivalent to Equals except it accepts cases where t's annotations are strict subset of t2
type TriggerFilter ¶
type TriggerFilter struct { //AppID searches for triggers in APP - mandatory AppID string // this is exact match mandatory //FNID searches for triggers belonging to a specific function FnID string // this is exact match //Name is the name of the trigger Name string // exact match Cursor string PerPage int }
TriggerFilter is a search criteria on triggers
type TriggerList ¶
type TriggerList struct { NextCursor string `json:"next_cursor,omitempty"` Items []*Trigger `json:"items"` }
TriggerList is a container of triggers returned by search, optionally indicating the next page cursor