Skip to content

eclipse-score/lifecycle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

272 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lifecycle & Health

Overview

Lifecycle Feature

Portable and high-performance implementation of the Lifecycle feature for the S-CORE project.

High level functionality provided by Lifecycle:

  • Launch Manager
    • Portability: LaunchManager works with multiple operating systems including Linux and QNX8.
    • Component Lifecycle Control: Spawning and terminating OS processes according to their configured parameters (executable path, user/group identity, environment, scheduling policy, etc.).
    • Run Target Management: Determining which components are active at any given time by activating and deactivating named Run Targets in response to requests from a StateManager.
    • Dependency Resolution: Ensuring components start and stop in the correct order based on declared startup and shutdown dependencies.
    • Failure Recovery: Detecting unexpected process termination and executing configured recovery actions such as restarting a component or switching to a recovery Run Target.
    • External Watchdog Integration: Compatible with external watchdogs through configurable watchdog device file.
  • Health Monitor
    • Supervision Types: Supports Heartbeat, Deadline, and Logical supervision to verify the timing and control flow of process execution.
    • Alive Notifications: Supervision results are translated into alive notifications sent to the Launch Manager to communicate supervision status and report failures.

Public APIs

High Level Overview

Health Monitoring API

//score/health_monitor:health_monitoring_cc
//score/health_monitor:health_monitoring_rust

The Health Monitoring library provides APIs for the following supervisions:

  • Heartbeat Supervision
  • Deadline Supervision
  • Logical Supervision

These supervision results are translated to alive notifications that are sent to the Launch Manager via its Alive API.

See the C++ Supervised Example Application and Rust Supervised Example Application.

Alive API

//score/launch_manager:alive_cc
//score/launch_manager:alive_rust

The Alive API allows applications to report alive notifications to the Launch Manager. Applications may either use the higher-level Health Monitoring APIs or directly report alive notifications to the Launch Manager via the Alive API.

Lifecycle API

//score/launch_manager:lifecycle_cc
//score/launch_manager:lifecycle_rust

Applications can report the Running state to the Launch Manager to signal that initialization is finished and dependent applications can now be started.

Applications may either use the higher-level score::mw::lifecycle::Application API or the lower level score::mw::lifecycle::report_running function.

See examples Application Example and report_running example.

Control API

//score/launch_manager:control_cc

The Control API is intended for implementing a State Manager that controls which Run Target is currently active.

See the Example StateManager.

Launch Manager

//score/launch_manager:launch_manager

The launch_manager target contains the daemon executable.

The Launch Manager is configured with a JSON file that is compiled to a binary format using the bazel macro:

load("//:defs.bzl", "launch_manager_config")

launch_manager_config(
    name = "examples_test_config",
    config = ":lifecycle_demo_test.json",
    flatbuffer_out_dir = "etc",
)

See the demo scenario for an example.

Mocks

//score/launch_manager:applicationcontext_mock_cc
//score/launch_manager:lifecycle_mock_cc
//score/launch_manager:report_running_mock_cc

Documentation

Getting Started

Building

It is recommended to use the devcontainer for building the project. See eclipse-score/devcontainer/README.md#inside-the-container for setup instructions.

Build all components for different platforms:

QNX

bazel build --config=x86_64-qnx //...
bazel build --config=arm64-qnx //...

Linux

bazel build --config=x86_64-linux //...
bazel build --config=arm64-linux //...

Testing

bazel test --config=x86_64-linux //score/... //tests/...

Run tests with sanitizers: ASan + UBSan + LSan (recommended):

bazel test --config=asan_ubsan_lsan --config=x86_64-linux //score/... //tests/...

Demo

See instructions here on how to execute a demo scenario.

Repository Structure

score_lifecycle/
├── score/                 # Lifecycle implementation
│   ├── launch_manager/    # Launch Manager daemon + library implementation + unit/component tests
│   └── health_monitor/    # Health Monitoring library implementation + unit/component tests
├── external/              # Third party software
├── examples/              # Example applications
├── scripts/               # Launch Manager Configuration generation
└── tests/                 # Feature Integration tests

Contributing

We welcome contributions! See our Contributing Guide for details.

Support

Community


About

Repository for the lifecycle feature

Resources

License

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors