Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
' SPDX-License-Identifier: Apache-2.0
' *******************************************************************************

@startuml
@startuml "Abstract Launch Manager Configuration Structure"

class LaunchManager
{
Expand All @@ -20,70 +20,103 @@ class LaunchManager

class LaunchConfiguration
{

}

LaunchManager "1" -- "1" LaunchConfiguration

LaunchManager "1" --> "1" LaunchConfiguration
LaunchConfiguration "1" -d-> "1" RunTargetConfig : initial Run Target
LaunchConfiguration "1" -d-> "1" RunTargetConfig : fallback Run Target

class ConfigFile
{

}

LaunchConfiguration "1" -- "1..*" ConfigFile


LaunchConfiguration "1" *--> "1..*" ConfigFile

class ComponentConfig {
'''Component Properties'''
+ {field} component name
+ {field} binary name
+ {field} type (e.g. Reporting process, native process, supervised process)
+ {field} self terminating (true/false)
+ {field} process arguments
'''Deployment Properties'''
+ {field} binary dir
+ {field} working dir
+ {field} ready timeout
+ {field} shutdown timeout
+ {field} environment variables
}

class RunTargetConfig {
+ {field} Run Target name
+ {field} transition timeout
}

ConfigFile "1" -- "1..*" ComponentConfig
class RunTargetRecoveryAction as "RunTarget\nRecoveryAction" {}

RunTargetConfig "1" -d-> "1..*" RunTargetRecoveryAction

ConfigFile "1" *-d-> "1..*" ComponentConfig
ConfigFile "1" *-d-> "1..*" RunTargetConfig

class AliveMonitoring {
+ alive notification interval
+ Startup grace period
+ failure tolerance limit
RunTargetConfig "1" -l-> "1..*" RunTargetConfig : \ndependency
RunTargetConfig "1" -r-> "1..*" ComponentConfig : dependency

class AliveSupervision {
+ {field} expected alive notification interval
+ {field} expected alive notification count (min/max)
+ {field} failure tolerance limit
}

class ComponentRecoveryAction as "Component\nRecoveryAction" {}
class SafeStateRecoveryAction as "SafeState\nRecoveryAction" {}
class ComponentRestartRecoveryAction as "ComponentRestart\nRecoveryAction" {
+ {field} retry count (how many times to try)
+ {field} wait time (before the component can be started again)
}
SafeStateRecoveryAction -u-|> ComponentRecoveryAction
ComponentRestartRecoveryAction -u-|> ComponentRecoveryAction

class RecoveryAction {
+ recovery action type (eg. restart, stop, ignore, DSS)
+ retry count (how many times to try)
+ wait time (before the component can be started again)
class SwitchRunTargetRecoveryAction as "SwitchRunTarget\nRecoveryAction" {
+ {field} next Run Target
}
SwitchRunTargetRecoveryAction -u-|> RunTargetRecoveryAction
SwitchRunTargetRecoveryAction -u-|> ComponentRecoveryAction

class ReadyCondition {}

class Dependency {
+ depency type
class FileStateCondition {
+ {field} state (exists, not exists)
+ {field} polling interval
}

class SandboxConfig {
+ UID
+ GID
+ supplementary groups
+ runmask
+ priority
+ ability
+ security
+ cwd
+ environmental variables
+ command
+ arguments
+ stdin
+ stdout
+ stderr
+ aslr
+ rlimits
+ time between sigterm and sigkill
class ProcessStateCondition {
+ {field} Running/Terminated
}

ComponentConfig "1" -- "1" Dependency
ComponentConfig "1" -- "1" ProcessConfig
ComponentConfig "1" -- "1" AliveMonitoring
ComponentConfig "1" -- "1" RecoveryAction
FileStateCondition -up-|> ReadyCondition
ProcessStateCondition -up-|> ReadyCondition

class SandboxConfig {
+ {field} UID
+ {field} GID
+ {field} supplementary groups
+ {field} runmask
+ {field} priority
+ {field} ability
+ {field} security
+ {field} stdin
+ {field} stdout
+ {field} stderr
+ {field} aslr
+ {field} rlimits
}

Dependency "1" --> "0..*" ComponentConfig: (reference to another component)
ComponentConfig "1" -l-> "1..*" ComponentConfig: dependency
ComponentConfig "1" *-d-> "1" ReadyCondition
ComponentConfig "1" *-d-> "1" AliveSupervision
ComponentConfig "1" *--> "1" SandboxConfig
ComponentConfig "1" *--> "1" ComponentRecoveryAction

@enduml
10 changes: 10 additions & 0 deletions docs/features/lifecycle/architecture/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,16 @@ Static Architecture
:scale: 50
:align: center

The Launch Manager configuration is structured around Run Target and Component configurations.
Each Component configuration specifies how the Component is started, monitored, and recovered during system operation.
Components can have dependencies on other Components, collectively forming a dependency graph.

Run Targets are configured through Run Target configurations, which define dependencies on Components and other Run Targets.
These dependencies determine which Components are activated when a Run Target is activated.

The Launch Manager is configured with an *Initial Run Target* and *Fallback Run Target*. The *Initial Run Target* is activated when the Launch Manager is first started.
The *Fallback Run Target* specifies the Run Target that is activated if a failure occurs that cannot be recovered.


Dynamic Architecture
--------------------
Expand Down
Loading