executor
Last updated: 2025-10-27 01:08:01.159558 File source: link on GitLab
executor
Table of Contents
Specification
Description
The executor package is responsible for executing the jobs received by the device management service (DMS). It provides an unified interface to run various executors such as docker, firecracker etc
Structure and Organisation
Here is quick overview of the contents of this pacakge:
README: Current file which is aimed towards developers who wish to use and modify the executor functionality.
init: This file initializes a logger instance for the executor package.
types: This file contains the interfaces that other packages in the DMS call to utilise functionality offered by the executor package.
docker: This folder contains the implementation of docker executor.
firecracker: This folder contains the implementation of firecracker executor.
Class Diagram
Source
Rendered from source file
!$rootUrlGitlab = "https://gitlab.com/nunet/device-management-service/-/raw/main"
!$packageRelativePath = "/executor"
!$packageUrlGitlab = $rootUrlGitlab + $packageRelativePath
!include $packageUrlGitlab/specs/class_diagram.pumlFunctionality
The main functionality offered by the executor package is defined via the Executor interface.
type Executor interface {
// Start initiates an execution for the given ExecutionRequest.
// It returns an error if the execution already exists and is in a started or terminal state.
// Implementations may also return other errors based on resource limitations or internal faults.
Start(ctx context.Context, request *types.ExecutionRequest) error
// Run initiates and waits for the completion of an execution for the given ExecutionRequest.
// It returns a ExecutionResult and an error if any part of the operation fails.
// Specifically, it will return an error if the execution already exists and is in a started or terminal state.
Run(ctx context.Context, request *types.ExecutionRequest) (*types.ExecutionResult, error)
// Wait monitors the completion of an execution identified by its executionID.
// It returns two channels:
// 1. A channel that emits the execution result once the task is complete.
// 2. An error channel that relays any issues encountered, such as when the
// execution is non-existent or has already concluded.
Wait(ctx context.Context, executionID string) (<-chan *types.ExecutionResult, <-chan error)
// Cancel attempts to cancel an ongoing execution identified by its executionID.
// Returns an error if the execution does not exist or is already in a terminal state.
Cancel(ctx context.Context, executionID string) error
// GetLogStream provides a stream of output for an ongoing or completed execution identified by its executionID.
// The 'Tail' flag indicates whether to exclude hstorical data or not.
// The 'follow' flag indicates whether the stream should continue to send data as it is produced.
// Returns an io.ReadCloser to read the output stream and an error if the operation fails.
// Specifically, it will return an error if the execution does not exist.
GetLogStream(ctx context.Context, executionID string) (io.ReadCloser, error)
}Its methods are explained below:
Start
signature:
Start(ctx context.Context, request executor.ExecutionRequest) -> errorinput #1:
Go contextinput #2:
executor.ExecutionRequestoutput:
error
Start function takes a Go context object and a executor.ExecutionRequest type as input. It returns an error if the execution already exists and is in a started or terminal state. Implementations may also return other errors based on resource limitations or internal faults.
Run
signature:
Run(ctx context.Context, request executor.ExecutionRequest) -> (executor.ExecutionResult, error)input #1:
Go contextinput #2:
executor.ExecutionRequestoutput (success):
executor.ExecutionResultoutput (error):
error
Run initiates and waits for the completion of an execution for the given Execution Request. It returns a executor.ExecutionResult and an error if any part of the operation fails. Specifically, it will return an error if the execution already exists and is in a started or terminal state.
Wait
signature:
Wait(ctx context.Context, executionID string) -> (<-chan executor.ExecutionResult, <-chan error)input #1:
Go contextinput #2:
executor.ExecutionRequest.ExecutionIDoutput #1: Channel that returns
executor.ExecutionResultoutput #2: Channel that returns
error
Wait monitors the completion of an execution identified by its executionID. It returns two channels:
A channel that emits the execution result once the task is complete;
An error channel that relays any issues encountered, such as when the execution is non-existent or has already concluded.
Cancel
signature:
Cancel(ctx context.Context, executionID string) -> errorinput #1:
Go contextinput #2:
executor.ExecutionRequest.ExecutionIDoutput:
error
Cancel attempts to terminate an ongoing execution identified by its executionID. It returns an error if the execution does not exist or is already in a terminal state.
GetLogStream
signature:
GetLogStream(ctx context.Context, request executor.LogStreamRequest, executionID string) -> (io.ReadCloser, error)input #1:
Go contextinput #2:
executor.LogStreamRequestinput #3:
executor.ExecutionRequest.ExecutionIDoutput #1:
io.ReadCloseroutput #2:
error
GetLogStream provides a stream of output for an ongoing or completed execution identified by its executionID. There are two flags that can be used to modify the functionality:
The
Tailflag indicates whether to exclude historical data or not.The
followflag indicates whether the stream should continue to send data as it is produced.
It returns an io.ReadCloser object to read the output stream and an error if the operation fails. Specifically, it will return an error if the execution does not exist.
Data Types
types.ExecutionRequest: This is the input thatexecutorreceives to initiate a job execution.types.ExecutionResult: This contains the result of the job execution.executor.LogStreamRequest: This contains input parameters sent to theexecutorto get job execution logs.
// LogStreamRequest is the request object for streaming logs from an execution
type LogStreamRequest struct {
// ID of the job
JobID string
// ID of the execution
ExecutionID string
// Tail the logs
Tail bool
// Follow the logs
Follow bool
}types.SpecConfig: This allows arbitrary configuration/parameters as needed during implementation of specific executor.types.Resources: This contains resources to be used for execution.storage.StorageVolume: This contains parameters of storage volume used during execution.
Testing
Unit tests are defined in subpackages which implement the interface defined in this package.
Proposed Functionality / Requirements
List of issues
All issues that are related to the implementation of executor package can be found below. These include any proposals for modifications to the package or new functionality needed to cover the requirements of other packages.
References
Last updated

