compute

package
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 24, 2024 License: Apache-2.0 Imports: 34 Imported by: 0

Documentation

Overview

Package compute is a generated GoMock package.

Index

Constants

View Source
const StorageDirectoryPerms = 0755

Variables

This section is empty.

Functions

This section is empty.

Types

type AskForBidRequest

type AskForBidRequest struct {
	RoutingMetadata
	// Execution specifies the job to be executed.
	Execution *models.Execution
	// WaitForApproval specifies whether the compute node should wait for the requester to approve the bid.
	// if set to true, the compute node will not start the execution until the requester approves the bid.
	// If set to false, the compute node will automatically start the execution after bidding and when resources are available.
	WaitForApproval bool
}

type AskForBidResponse

type AskForBidResponse struct {
	ExecutionMetadata
}

type BaseEndpoint

type BaseEndpoint struct {
	// contains filtered or unexported fields
}

Base implementation of Endpoint

func NewBaseEndpoint

func NewBaseEndpoint(params BaseEndpointParams) BaseEndpoint

func (BaseEndpoint) AskForBid

func (s BaseEndpoint) AskForBid(ctx context.Context, request AskForBidRequest) (AskForBidResponse, error)

func (BaseEndpoint) BidAccepted

func (BaseEndpoint) BidRejected

func (BaseEndpoint) CancelExecution

func (BaseEndpoint) ExecutionLogs added in v0.3.26

func (BaseEndpoint) GetNodeID

func (s BaseEndpoint) GetNodeID() string

type BaseEndpointParams

type BaseEndpointParams struct {
	ID              string
	ExecutionStore  store.ExecutionStore
	UsageCalculator capacity.UsageCalculator
	Bidder          Bidder
	Executor        Executor
	LogServer       *logstream.Server
}

type BaseExecutor

type BaseExecutor struct {
	ID string

	Storages storage.StorageProvider
	// contains filtered or unexported fields
}

BaseExecutor is the base implementation for backend service. All operations are executed asynchronously, and a callback is used to notify the caller of the result.

func NewBaseExecutor

func NewBaseExecutor(params BaseExecutorParams) *BaseExecutor

func (*BaseExecutor) Cancel

func (e *BaseExecutor) Cancel(ctx context.Context, state store.LocalExecutionState) (err error)

Cancel the execution.

func (*BaseExecutor) Run

func (e *BaseExecutor) Run(ctx context.Context, state store.LocalExecutionState) (err error)

Run the execution after it has been accepted, and propose a result to the requester to be verified.

func (*BaseExecutor) Start added in v1.0.4

func (e *BaseExecutor) Start(ctx context.Context, execution *models.Execution) *StartResult

func (*BaseExecutor) Wait added in v1.0.4

type BaseExecutorParams

type BaseExecutorParams struct {
	ID                     string
	Callback               Callback
	Store                  store.ExecutionStore
	Storages               storage.StorageProvider
	StorageDirectory       string
	Executors              executor.ExecutorProvider
	ResultsPath            ResultsPath
	Publishers             publisher.PublisherProvider
	FailureInjectionConfig model.FailureInjectionComputeConfig
}

type BidAcceptedRequest

type BidAcceptedRequest struct {
	RoutingMetadata
	ExecutionID   string
	Accepted      bool
	Justification string
}

type BidAcceptedResponse

type BidAcceptedResponse struct {
	ExecutionMetadata
}

type BidRejectedRequest

type BidRejectedRequest struct {
	RoutingMetadata
	ExecutionID   string
	Justification string
}

type BidRejectedResponse

type BidRejectedResponse struct {
	ExecutionMetadata
}

type BidResult added in v0.3.26

type BidResult struct {
	RoutingMetadata
	ExecutionMetadata
	Accepted bool
	Reason   string
}

BidResult is the result of the compute node bidding on a job that is returned to the caller through a Callback.

type Bidder added in v0.3.26

type Bidder struct {
	// contains filtered or unexported fields
}

func NewBidder added in v0.3.26

func NewBidder(params BidderParams) Bidder

func (Bidder) ReturnBidResult added in v0.3.26

func (b Bidder) ReturnBidResult(
	ctx context.Context, localExecutionState store.LocalExecutionState, response *bidstrategy.BidStrategyResponse)

func (Bidder) RunBidding added in v0.3.26

func (b Bidder) RunBidding(ctx context.Context, request AskForBidRequest, usageCalc capacity.UsageCalculator)

TODO: evaluate the need for async bidding and marking bids as waiting

type BidderParams added in v0.3.26

type BidderParams struct {
	NodeID           string
	SemanticStrategy bidstrategy.SemanticBidStrategy
	ResourceStrategy bidstrategy.ResourceBidStrategy
	Store            store.ExecutionStore
	Executor         Executor
	Callback         Callback
	GetApproveURL    func() *url.URL
}

type Callback

type Callback interface {
	OnBidComplete(ctx context.Context, result BidResult)
	OnRunComplete(ctx context.Context, result RunResult)
	OnCancelComplete(ctx context.Context, result CancelResult)
	OnComputeFailure(ctx context.Context, err ComputeError)
}

Callback Callbacks are used to notify the caller of the result of a job execution.

type CallbackMock added in v0.3.26

type CallbackMock struct {
	OnBidCompleteHandler    func(ctx context.Context, result BidResult)
	OnCancelCompleteHandler func(ctx context.Context, result CancelResult)
	OnComputeFailureHandler func(ctx context.Context, err ComputeError)
	OnRunCompleteHandler    func(ctx context.Context, result RunResult)
}

func (CallbackMock) OnBidComplete added in v0.3.26

func (c CallbackMock) OnBidComplete(ctx context.Context, result BidResult)

OnBidComplete implements Callback

func (CallbackMock) OnCancelComplete added in v0.3.26

func (c CallbackMock) OnCancelComplete(ctx context.Context, result CancelResult)

OnCancelComplete implements Callback

func (CallbackMock) OnComputeFailure added in v0.3.26

func (c CallbackMock) OnComputeFailure(ctx context.Context, err ComputeError)

OnComputeFailure implements Callback

func (CallbackMock) OnRunComplete added in v0.3.26

func (c CallbackMock) OnRunComplete(ctx context.Context, result RunResult)

OnRunComplete implements Callback

type CancelExecutionRequest

type CancelExecutionRequest struct {
	RoutingMetadata
	ExecutionID   string
	Justification string
}

type CancelExecutionResponse

type CancelExecutionResponse struct {
	ExecutionMetadata
}

type CancelResult

type CancelResult struct {
	RoutingMetadata
	ExecutionMetadata
}

CancelResult Result of a job cancel that is returned to the caller through a Callback.

type ChainedCallback

type ChainedCallback struct {
	// contains filtered or unexported fields
}

ChainedCallback Callback that chains multiple callbacks and delegates the calls to them.

func NewChainedCallback

func NewChainedCallback(params ChainedCallbackParams) *ChainedCallback

func (ChainedCallback) OnBidComplete added in v0.3.26

func (c ChainedCallback) OnBidComplete(ctx context.Context, result BidResult)

func (ChainedCallback) OnCancelComplete

func (c ChainedCallback) OnCancelComplete(ctx context.Context, result CancelResult)

func (ChainedCallback) OnComputeFailure

func (c ChainedCallback) OnComputeFailure(ctx context.Context, err ComputeError)

func (ChainedCallback) OnRunComplete

func (c ChainedCallback) OnRunComplete(ctx context.Context, result RunResult)

type ChainedCallbackParams

type ChainedCallbackParams struct {
	Callbacks []Callback
}

type ComputeError

type ComputeError struct {
	RoutingMetadata
	ExecutionMetadata
	Err string
}

func (ComputeError) Error

func (e ComputeError) Error() string

type Endpoint

type Endpoint interface {
	// AskForBid asks for a bid for a given job, which will assign executionID to the job and return a bid
	// is interested in bidding on.
	AskForBid(context.Context, AskForBidRequest) (AskForBidResponse, error)
	// BidAccepted accepts a bid for a given executionID, which will trigger executing the job in the backend.
	// The execution can be synchronous or asynchronous, depending on the backend implementation.
	BidAccepted(context.Context, BidAcceptedRequest) (BidAcceptedResponse, error)
	// BidRejected rejects a bid for a given executionID.
	BidRejected(context.Context, BidRejectedRequest) (BidRejectedResponse, error)
	// CancelExecution cancels a job for a given executionID.
	CancelExecution(context.Context, CancelExecutionRequest) (CancelExecutionResponse, error)
	// ExecutionLogs returns the address of a suitable log server
	ExecutionLogs(ctx context.Context, request ExecutionLogsRequest) (<-chan *concurrency.AsyncResult[models.ExecutionLog], error)
}

Endpoint is the frontend and entry point to the compute node. Requesters, whether through API, CLI or other means, do interact with the frontend service to submit jobs, ask for bids, accept or reject bids, etc.

type ExecutionLogsRequest added in v0.3.26

type ExecutionLogsRequest struct {
	RoutingMetadata
	ExecutionID string
	Tail        bool
	Follow      bool
}

type ExecutionLogsResponse added in v0.3.26

type ExecutionLogsResponse struct {
	Address           string
	ExecutionFinished bool
}

type ExecutionMetadata

type ExecutionMetadata struct {
	ExecutionID string
	JobID       string
}

func NewExecutionMetadata

func NewExecutionMetadata(execution *models.Execution) ExecutionMetadata

type Executor

type Executor interface {
	// Run triggers the execution of a job.
	Run(ctx context.Context, localExecutionState store.LocalExecutionState) error
	// Cancel cancels the execution of a job.
	Cancel(ctx context.Context, localExecutionState store.LocalExecutionState) error
}

Executor Backend service that is responsible for running and publishing executions. Implementations can be synchronous or asynchronous by using Callbacks.

type ExecutorBuffer

type ExecutorBuffer struct {
	ID string
	// contains filtered or unexported fields
}

ExecutorBuffer is a backend.Executor implementation that buffers executions locally until enough capacity is available to be able to run them. The buffer accepts a delegate backend.Executor that will be used to run the jobs. The buffer is implemented as a FIFO queue, where the order of the executions is determined by the order in which they were enqueued. However, an execution with high resource usage requirements might be skipped if there are newer jobs with lower resource usage requirements that can be executed immediately. This is done to improve utilization of compute nodes, though it might result in starvation and should be re-evaluated in the future.

func NewExecutorBuffer

func NewExecutorBuffer(params ExecutorBufferParams) *ExecutorBuffer

func (*ExecutorBuffer) Cancel

func (s *ExecutorBuffer) Cancel(_ context.Context, localExecutionState store.LocalExecutionState) error

func (*ExecutorBuffer) EnqueuedExecutionsCount added in v1.0.4

func (s *ExecutorBuffer) EnqueuedExecutionsCount() int

EnqueuedExecutionsCount return number of items enqueued

func (*ExecutorBuffer) Run

func (s *ExecutorBuffer) Run(ctx context.Context, localExecutionState store.LocalExecutionState) error

Run enqueues the execution and tries to run it if there is enough capacity.

func (*ExecutorBuffer) RunningExecutions

func (s *ExecutorBuffer) RunningExecutions() []store.LocalExecutionState

RunningExecutions return list of running executions

type ExecutorBufferParams

type ExecutorBufferParams struct {
	ID                         string
	DelegateExecutor           Executor
	Callback                   Callback
	RunningCapacityTracker     capacity.Tracker
	EnqueuedCapacityTracker    capacity.Tracker
	DefaultJobExecutionTimeout time.Duration
}

type InputCleanupFn added in v1.0.4

type InputCleanupFn = func(context.Context) error

InputCleanupFn is a function type that defines the contract for cleaning up resources associated with input volume data after the job execution has either completed or failed to start. The function is expected to take a context.Context as an argument, which can be used for timeout and cancellation signals. It returns an error if the cleanup operation fails.

For example, an InputCleanupFn might be responsible for deallocating storage used for input volumes, or deleting temporary input files that were created as part of the job's execution. The nature of it operation depends on the storage provided by `strgprovider` and input sources of the jobs associated tasks. For the case of a wasm job its input and entry module storage volumes should be removed via the method after the jobs execution reaches a terminal state.

func PrepareRunArguments added in v1.0.4

func PrepareRunArguments(
	ctx context.Context,
	strgprovider storage.StorageProvider,
	storageDirectory string,
	execution *models.Execution,
	resultsDir string,
) (*executor.RunCommandRequest, InputCleanupFn, error)

type ManagementClient added in v1.2.3

type ManagementClient struct {
	// contains filtered or unexported fields
}

ManagementClient is used to call management functions with the requester nodes, via the NATS transport. When `Start`ed it will periodically send an update to the requester node with the latest node info for this node.

func NewManagementClient added in v1.2.3

func NewManagementClient(params ManagementClientParams) *ManagementClient

func (*ManagementClient) RegisterNode added in v1.2.3

func (m *ManagementClient) RegisterNode(ctx context.Context) error

RegisterNode sends a registration request to the requester node. If we successfully register, a sentinel file is created to indicate that we are registered. If present the requester node will know it is already registered. If not present, it will attempt to register again, expecting the requester node to gracefully handle any previous registrations.

func (*ManagementClient) Start added in v1.2.3

func (m *ManagementClient) Start(ctx context.Context)

func (*ManagementClient) Stop added in v1.2.3

func (m *ManagementClient) Stop()

type ManagementClientParams added in v1.2.3

type ManagementClientParams struct {
	NodeID               string
	LabelsProvider       models.LabelsProvider
	ManagementProxy      ManagementEndpoint
	NodeInfoDecorator    models.NodeInfoDecorator
	RegistrationFilePath string
	ResourceTracker      capacity.Tracker
}

type ManagementEndpoint added in v1.2.3

type ManagementEndpoint interface {
	// Register registers a compute node with the requester node.
	Register(context.Context, requests.RegisterRequest) (*requests.RegisterResponse, error)
	// UpdateInfo sends an update of node info to the requester node
	UpdateInfo(context.Context, requests.UpdateInfoRequest) (*requests.UpdateInfoResponse, error)
	// UpdateResources updates the resources currently in use by a specific node
	UpdateResources(context.Context, requests.UpdateResourcesRequest) (*requests.UpdateResourcesResponse, error)
}

ManagementEndpoint is the transport-based interface for compute nodes to register with the requester node, update information and perform heartbeats.

type MockCallback added in v1.0.0

type MockCallback struct {
	// contains filtered or unexported fields
}

MockCallback is a mock of Callback interface.

func NewMockCallback added in v1.0.4

func NewMockCallback(ctrl *gomock.Controller) *MockCallback

NewMockCallback creates a new mock instance.

func (*MockCallback) EXPECT added in v1.0.4

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockCallback) OnBidComplete added in v1.0.0

func (m *MockCallback) OnBidComplete(ctx context.Context, result BidResult)

OnBidComplete mocks base method.

func (*MockCallback) OnCancelComplete added in v1.0.0

func (m *MockCallback) OnCancelComplete(ctx context.Context, result CancelResult)

OnCancelComplete mocks base method.

func (*MockCallback) OnComputeFailure added in v1.0.0

func (m *MockCallback) OnComputeFailure(ctx context.Context, err ComputeError)

OnComputeFailure mocks base method.

func (*MockCallback) OnRunComplete added in v1.0.0

func (m *MockCallback) OnRunComplete(ctx context.Context, result RunResult)

OnRunComplete mocks base method.

type MockCallbackMockRecorder added in v1.0.4

type MockCallbackMockRecorder struct {
	// contains filtered or unexported fields
}

MockCallbackMockRecorder is the mock recorder for MockCallback.

func (*MockCallbackMockRecorder) OnBidComplete added in v1.0.4

func (mr *MockCallbackMockRecorder) OnBidComplete(ctx, result any) *gomock.Call

OnBidComplete indicates an expected call of OnBidComplete.

func (*MockCallbackMockRecorder) OnCancelComplete added in v1.0.4

func (mr *MockCallbackMockRecorder) OnCancelComplete(ctx, result any) *gomock.Call

OnCancelComplete indicates an expected call of OnCancelComplete.

func (*MockCallbackMockRecorder) OnComputeFailure added in v1.0.4

func (mr *MockCallbackMockRecorder) OnComputeFailure(ctx, err any) *gomock.Call

OnComputeFailure indicates an expected call of OnComputeFailure.

func (*MockCallbackMockRecorder) OnRunComplete added in v1.0.4

func (mr *MockCallbackMockRecorder) OnRunComplete(ctx, result any) *gomock.Call

OnRunComplete indicates an expected call of OnRunComplete.

type MockEndpoint added in v1.0.4

type MockEndpoint struct {
	// contains filtered or unexported fields
}

MockEndpoint is a mock of Endpoint interface.

func NewMockEndpoint added in v1.0.4

func NewMockEndpoint(ctrl *gomock.Controller) *MockEndpoint

NewMockEndpoint creates a new mock instance.

func (*MockEndpoint) AskForBid added in v1.0.4

AskForBid mocks base method.

func (*MockEndpoint) BidAccepted added in v1.0.4

BidAccepted mocks base method.

func (*MockEndpoint) BidRejected added in v1.0.4

BidRejected mocks base method.

func (*MockEndpoint) CancelExecution added in v1.0.4

CancelExecution mocks base method.

func (*MockEndpoint) EXPECT added in v1.0.4

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockEndpoint) ExecutionLogs added in v1.0.4

ExecutionLogs mocks base method.

type MockEndpointMockRecorder added in v1.0.4

type MockEndpointMockRecorder struct {
	// contains filtered or unexported fields
}

MockEndpointMockRecorder is the mock recorder for MockEndpoint.

func (*MockEndpointMockRecorder) AskForBid added in v1.0.4

func (mr *MockEndpointMockRecorder) AskForBid(arg0, arg1 any) *gomock.Call

AskForBid indicates an expected call of AskForBid.

func (*MockEndpointMockRecorder) BidAccepted added in v1.0.4

func (mr *MockEndpointMockRecorder) BidAccepted(arg0, arg1 any) *gomock.Call

BidAccepted indicates an expected call of BidAccepted.

func (*MockEndpointMockRecorder) BidRejected added in v1.0.4

func (mr *MockEndpointMockRecorder) BidRejected(arg0, arg1 any) *gomock.Call

BidRejected indicates an expected call of BidRejected.

func (*MockEndpointMockRecorder) CancelExecution added in v1.0.4

func (mr *MockEndpointMockRecorder) CancelExecution(arg0, arg1 any) *gomock.Call

CancelExecution indicates an expected call of CancelExecution.

func (*MockEndpointMockRecorder) ExecutionLogs added in v1.0.4

func (mr *MockEndpointMockRecorder) ExecutionLogs(ctx, request any) *gomock.Call

ExecutionLogs indicates an expected call of ExecutionLogs.

type MockExecutor added in v1.0.4

type MockExecutor struct {
	// contains filtered or unexported fields
}

MockExecutor is a mock of Executor interface.

func NewMockExecutor added in v1.0.4

func NewMockExecutor(ctrl *gomock.Controller) *MockExecutor

NewMockExecutor creates a new mock instance.

func (*MockExecutor) Cancel added in v1.0.4

func (m *MockExecutor) Cancel(ctx context.Context, localExecutionState store.LocalExecutionState) error

Cancel mocks base method.

func (*MockExecutor) EXPECT added in v1.0.4

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockExecutor) Run added in v1.0.4

func (m *MockExecutor) Run(ctx context.Context, localExecutionState store.LocalExecutionState) error

Run mocks base method.

type MockExecutorMockRecorder added in v1.0.4

type MockExecutorMockRecorder struct {
	// contains filtered or unexported fields
}

MockExecutorMockRecorder is the mock recorder for MockExecutor.

func (*MockExecutorMockRecorder) Cancel added in v1.0.4

func (mr *MockExecutorMockRecorder) Cancel(ctx, localExecutionState any) *gomock.Call

Cancel indicates an expected call of Cancel.

func (*MockExecutorMockRecorder) Run added in v1.0.4

func (mr *MockExecutorMockRecorder) Run(ctx, localExecutionState any) *gomock.Call

Run indicates an expected call of Run.

type NodeInfoDecorator added in v1.2.1

type NodeInfoDecorator struct {
	// contains filtered or unexported fields
}

func NewNodeInfoDecorator added in v1.2.1

func NewNodeInfoDecorator(params NodeInfoDecoratorParams) *NodeInfoDecorator

func (*NodeInfoDecorator) DecorateNodeInfo added in v1.2.1

func (n *NodeInfoDecorator) DecorateNodeInfo(ctx context.Context, nodeInfo models.NodeInfo) models.NodeInfo

type NodeInfoDecoratorParams added in v1.2.1

type NodeInfoDecoratorParams struct {
	Executors          executor.ExecutorProvider
	Publisher          publisher.PublisherProvider
	Storages           storage.StorageProvider
	CapacityTracker    capacity.Tracker
	ExecutorBuffer     *ExecutorBuffer
	MaxJobRequirements models.Resources
}

type RegistrationFile added in v1.2.3

type RegistrationFile struct {
	// contains filtered or unexported fields
}

RegistrationFile is a sentinel on disk whose presence is used to denote that a node has successfully registered with the requester. This file is per-node to allow multiple compute nodes using the same shared directory for config.

func NewRegistrationFile added in v1.2.3

func NewRegistrationFile(path string) *RegistrationFile

func (*RegistrationFile) Exists added in v1.2.3

func (r *RegistrationFile) Exists() bool

func (*RegistrationFile) Set added in v1.2.3

func (r *RegistrationFile) Set() error

type ResultsPath added in v1.0.4

type ResultsPath struct {
	// where do we copy the results from jobs temporarily?
	ResultsDir string
}

func NewResultsPath added in v1.0.4

func NewResultsPath() (*ResultsPath, error)

func (*ResultsPath) Close added in v1.0.4

func (results *ResultsPath) Close() error

func (*ResultsPath) EnsureResultsDir added in v1.0.4

func (results *ResultsPath) EnsureResultsDir(executionID string) (string, error)

EnsureResultsDir ensures that the results directory exists.

func (*ResultsPath) PrepareResultsDir added in v1.0.4

func (results *ResultsPath) PrepareResultsDir(executionID string) (string, error)

PrepareResultsDir creates a temporary directory to store the results of a job execution.

type RoutingMetadata

type RoutingMetadata struct {
	SourcePeerID string
	TargetPeerID string
}

type RunResult

type RunResult struct {
	RoutingMetadata
	ExecutionMetadata
	PublishResult    *models.SpecConfig
	RunCommandResult *models.RunCommandResult
}

RunResult Result of a job execution that is returned to the caller through a Callback.

type StartResult added in v1.0.4

type StartResult struct {
	Err error
	// contains filtered or unexported fields
}

func (*StartResult) Cleanup added in v1.0.4

func (r *StartResult) Cleanup(ctx context.Context) error

type Startup added in v1.0.4

type Startup struct {
	// contains filtered or unexported fields
}

func NewStartup added in v1.0.4

func NewStartup(execStore store.ExecutionStore, execBuffer Executor) *Startup

func (*Startup) Execute added in v1.0.4

func (s *Startup) Execute(ctx context.Context) error

Execute is used by the compute node to perform startup tasks that should happen before the node takes part in the rest of the network. This might be executions setup, or cleaning previous inputs etc.

Directories

Path Synopsis
Package store is a generated GoMock package.
Package store is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL