mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-03 11:28:48 -05:00
Working example of application and service ready to copy from with minimum documentation Apply suggestions from code review Co-authored-by: * Paweł Olejniczak <58421550+pawel-mudita@users.noreply.github.com> * Paweł Joński <79840715+paweljonskim@users.noreply.github.com> * Bartosz Cichocki <sp2fet@gmail.com>
29 lines
1.3 KiB
Markdown
29 lines
1.3 KiB
Markdown
# Services synchronization
|
|
|
|
If a service has dependencies to other services, it should be started after its dependencies are started.
|
|
|
|
For example, a ServiceA may be dependent on the ServiceDB. It means that the ServiceA can not be started unless the ServiceDB successfully starts.
|
|
|
|
It is a part of the Services Synchronization feature to order services based on their dependencies.
|
|
|
|
## Service Manifest
|
|
|
|
Each service should export its manifest. The manifest may contain the following information:
|
|
- name
|
|
- dependencies to other services
|
|
- start timeout
|
|
|
|
**WARNING**: Currently there is no fail-safe mechanism to handle service startup failure - it will cause non-handled exception `SystemInitialisationError{"System startup failed: unable to start a system service."};`
|
|
|
|
Please see: [ServiceManifest.hpp](../../Service/include/Service/ServiceManifest.hpp) to check current defaults
|
|
|
|
The System Manager needs to read the manifests to run the services in the correct order.
|
|
|
|
## Synchronization algorithm
|
|
|
|
The [topological sorting](https://en.wikipedia.org/wiki/Topological_sorting) algorithm may be used to build a linear ordering of services that are to be started by the System Manager.
|
|
|
|

|
|
|
|
**Important note: The Dependency Graph implementation handles Directed Acyclic Graphs only.**
|