Skip to content

Commit bf2703f

Browse files
committed
Use new launch manager configuration
1 parent 33e11bb commit bf2703f

30 files changed

Lines changed: 1069 additions & 129 deletions

score/launch_manager/daemon/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ cc_binary(
3535
deps = [
3636
"//score/launch_manager/daemon/src/alive_monitor",
3737
"//score/launch_manager/daemon/src/common:log",
38+
"//score/launch_manager/daemon/src/configuration:flatbuffer_config_loader",
3839
"//score/launch_manager/daemon/src/osal:ipc_comms",
3940
"//score/launch_manager/daemon/src/process_group_manager",
4041
"//score/launch_manager/daemon/src/process_group_manager:alive_monitor_thread",
4142
"//score/launch_manager/daemon/src/process_state_client:process_state_notifier",
4243
"//score/launch_manager/daemon/src/recovery_client",
44+
"@score_baselibs//score/filesystem",
4345
],
4446
)

score/launch_manager/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@ namespace daemon {
2727
AliveMonitorImpl::AliveMonitorImpl(std::shared_ptr<score::lcm::IRecoveryClient> recovery_client, std::unique_ptr<watchdog::IWatchdogIf> watchdog, std::unique_ptr<score::lcm::IProcessStateReceiver> process_state_receiver)
2828
: m_recovery_client(recovery_client), m_watchdog(std::move(watchdog)), m_logger{score::lcm::saf::logging::PhmLogger::getLogger(score::lcm::saf::logging::PhmLogger::EContext::factory)}, m_process_state_receiver{std::move(process_state_receiver)} {}
2929

30-
EInitCode AliveMonitorImpl::init() noexcept {
30+
EInitCode AliveMonitorImpl::init(
31+
const std::vector<score::mw::launch_manager::configuration::ComponentConfig>& components) noexcept {
3132
score::lcm::saf::daemon::EInitCode initResult{score::lcm::saf::daemon::EInitCode::kGeneralError};
3233
try {
3334
m_osClock.startMeasurement();
3435

3536
m_daemon = std::make_unique<score::lcm::saf::daemon::PhmDaemon>(m_osClock, m_logger, std::move(m_watchdog), std::move(m_process_state_receiver));
36-
initResult = m_daemon->init(m_recovery_client);
37+
initResult = m_daemon->init(m_recovery_client, components);
3738

3839
if (initResult == score::lcm::saf::daemon::EInitCode::kNoError) {
3940
const long ms{m_osClock.endMeasurement()};

score/launch_manager/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ class AliveMonitorImpl : public IAliveMonitor {
3535
public:
3636
AliveMonitorImpl(std::shared_ptr<score::lcm::IRecoveryClient> recovery_client, std::unique_ptr<watchdog::IWatchdogIf> watchdog, std::unique_ptr<score::lcm::IProcessStateReceiver> process_state_receiver);
3737

38-
EInitCode init() noexcept override;
38+
EInitCode init(
39+
const std::vector<score::mw::launch_manager::configuration::ComponentConfig>& components) noexcept override;
3940

4041
bool run(std::atomic_bool& cancel_thread) noexcept override;
4142

score/launch_manager/daemon/src/alive_monitor/details/daemon/BUILD

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ cc_library(
2828
strip_include_prefix = "/score/launch_manager/daemon/src/alive_monitor/details/daemon",
2929
visibility = ["//score/launch_manager/daemon/src/alive_monitor:__subpackages__"],
3030
deps = [
31-
"//score/launch_manager/daemon/src/alive_monitor/details/factory:flat_cfg_factory",
31+
"//score/launch_manager/daemon/src/alive_monitor/details/factory:config_cfg_factory",
3232
"//score/launch_manager/daemon/src/alive_monitor/details/factory:machine_config_factory",
3333
"//score/launch_manager/daemon/src/alive_monitor/details/ifappl:checkpoint",
3434
"//score/launch_manager/daemon/src/alive_monitor/details/ifappl:data_structures",
@@ -38,6 +38,7 @@ cc_library(
3838
"//score/launch_manager/daemon/src/alive_monitor/details/logging:phm_logging",
3939
"//score/launch_manager/daemon/src/alive_monitor/details/supervision:alive",
4040
"//score/launch_manager/daemon/src/alive_monitor/details/timers:timers_os_clock",
41+
"//score/launch_manager/daemon/src/configuration:config",
4142
],
4243
)
4344

@@ -52,7 +53,6 @@ cc_library(
5253
":phm_daemon_config",
5354
":sw_cluster_handler",
5455
"//score/launch_manager/control_client",
55-
"//score/launch_manager/daemon/src/alive_monitor/details/factory:flat_cfg_factory",
5656
"//score/launch_manager/daemon/src/alive_monitor/details/factory:machine_config_factory",
5757
"//score/launch_manager/daemon/src/alive_monitor/details/ifappl:monitor_if_daemon",
5858
"//score/launch_manager/daemon/src/alive_monitor/details/ifexm:process_state_reader",
@@ -62,6 +62,7 @@ cc_library(
6262
"//score/launch_manager/daemon/src/alive_monitor/details/timers:cycle_timer",
6363
"//score/launch_manager/daemon/src/alive_monitor/details/timers:timers_os_clock",
6464
"//score/launch_manager/daemon/src/alive_monitor/details/watchdog:i_watchdog_if",
65+
"//score/launch_manager/daemon/src/configuration:config",
6566
"//score/launch_manager/lifecycle_client",
6667
],
6768
)
@@ -86,5 +87,6 @@ cc_library(
8687
":i_health_monitor",
8788
"//score/launch_manager/daemon/src/alive_monitor/details/logging:phm_logging",
8889
"//score/launch_manager/daemon/src/alive_monitor/details/watchdog:watchdog_impl",
90+
"//score/launch_manager/daemon/src/configuration:config",
8991
],
9092
)

score/launch_manager/daemon/src/alive_monitor/details/daemon/IAliveMonitor.hpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
#define SAF_DAEMON_HEALTH_MONITOR_HPP_INCLUDED
1515

1616
#include <atomic>
17+
#include <vector>
1718

1819
#include "score/mw/launch_manager/alive_monitor/details/daemon/PhmDaemon.hpp"
20+
#include "score/mw/launch_manager/configuration/config.hpp"
1921

2022
namespace score
2123
{
@@ -31,9 +33,11 @@ class IAliveMonitor {
3133
public:
3234
virtual ~IAliveMonitor() = default;
3335

34-
/// @brief Initialize the HealthMonitor functionality
36+
/// @brief Initialize the HealthMonitor functionality.
37+
/// @param components All component configurations; supervised components are extracted internally.
3538
/// @return kNoError if initialization was successful, otherwise an appropriate error code.
36-
virtual EInitCode init() noexcept = 0;
39+
virtual EInitCode init(
40+
const std::vector<score::mw::launch_manager::configuration::ComponentConfig>& components) noexcept = 0;
3741

3842
/// @brief Run the HealthMonitor functionality in a cyclic manner until cancellation is requested.
3943
/// @param cancel_thread Atomic boolean flag to signal thread cancellation.

score/launch_manager/daemon/src/alive_monitor/details/daemon/PhmDaemon.cpp

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
#include "score/mw/launch_manager/alive_monitor/details/daemon/PhmDaemon.hpp"
1515

16-
#include "score/mw/launch_manager/alive_monitor/details/factory/FlatCfgFactory.hpp"
1716
#include "score/mw/launch_manager/alive_monitor/details/ifappl/MonitorIfDaemon.hpp"
1817
#include "score/mw/launch_manager/alive_monitor/details/supervision/Alive.hpp"
1918
#include "score/mw/launch_manager/alive_monitor/details/timers/Timers_OsClock.hpp"
@@ -82,40 +81,16 @@ void PhmDaemon::performCyclicTriggers(void)
8281
}
8382
}
8483

85-
bool PhmDaemon::construct(const factory::MachineConfigFactory::SupervisionBufferConfig& f_bufferConfig_r) noexcept(
86-
false)
84+
bool PhmDaemon::construct(
85+
const factory::MachineConfigFactory::SupervisionBufferConfig& f_bufferConfig_r,
86+
const std::vector<score::mw::launch_manager::configuration::ComponentConfig>& components) noexcept(false)
8787
{
88-
bool isSuccess{true};
89-
90-
score::Result<std::vector<std::string>> listSwClustersPhm{{"MainCluster"}};
91-
if (!listSwClustersPhm.has_value())
88+
swClusterHandlers.emplace_back("MainCluster");
89+
const bool isSuccess =
90+
swClusterHandlers.back().constructWorkers(recoveryClient, processStateReader, f_bufferConfig_r, components);
91+
if (!isSuccess)
9292
{
93-
logger_r.LogError()
94-
<< "Phm Daemon: retrieving the list of PHM software cluster configurations failed with error:"
95-
<< listSwClustersPhm.error().Message();
96-
isSuccess = false;
97-
}
98-
else
99-
{
100-
if (listSwClustersPhm.value().size() == 0U)
101-
{
102-
logger_r.LogWarn() << "Phm Daemon: is starting without any software cluster configurations!";
103-
}
104-
105-
// Reserve the vector swClusterHandlers obtained from flatcfg before constructing the SwClusters
106-
swClusterHandlers.reserve(listSwClustersPhm.value().size());
107-
108-
for (auto strSwClusterName : listSwClustersPhm.value())
109-
{
110-
swClusterHandlers.emplace_back(strSwClusterName);
111-
isSuccess = swClusterHandlers.back().constructWorkers(recoveryClient, processStateReader, f_bufferConfig_r);
112-
if (!isSuccess)
113-
{
114-
logger_r.LogError() << "Phm Daemon: failed to create worker objects for swclusterhandler:"
115-
<< strSwClusterName;
116-
break;
117-
}
118-
}
93+
logger_r.LogError() << "Phm Daemon: failed to create worker objects for swclusterhandler: MainCluster";
11994
}
12095
return isSuccess;
12196
}

score/launch_manager/daemon/src/alive_monitor/details/daemon/PhmDaemon.hpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "score/mw/launch_manager/alive_monitor/details/timers/CycleTimeValidator.hpp"
3030
#include "score/mw/launch_manager/alive_monitor/details/timers/CycleTimer.hpp"
3131
#include "score/mw/launch_manager/alive_monitor/details/watchdog/IWatchdogIf.hpp"
32+
#include "score/mw/launch_manager/configuration/config.hpp"
3233
namespace score
3334
{
3435
namespace lcm
@@ -89,8 +90,10 @@ class PhmDaemon
8990
/// @brief Wraps the initialization steps of the PHM daemon
9091
/// (Constructing the workers, adjusting the cycle time, initialization of fixed step timer)
9192
/// @param[in] recovery_client Shared pointer to recovery client
93+
/// @param[in] components All component configurations; supervised ones are used for alive supervision
9294
/// @return See EInitCode definition
93-
EInitCode init(std::shared_ptr<score::lcm::IRecoveryClient> recovery_client) noexcept(false)
95+
EInitCode init(std::shared_ptr<score::lcm::IRecoveryClient> recovery_client,
96+
const std::vector<score::mw::launch_manager::configuration::ComponentConfig>& components) noexcept(false)
9497
{
9598
recoveryClient = recovery_client;
9699

@@ -100,7 +103,7 @@ class PhmDaemon
100103
return EInitCode::kMachineConfigInitFailed;
101104
}
102105

103-
if (!construct(machineConfig.getSupervisionBufferConfig()))
106+
if (!construct(machineConfig.getSupervisionBufferConfig(), components))
104107
{
105108
return EInitCode::kConstructFlatCfgFactoryFailed;
106109
}
@@ -217,8 +220,10 @@ class PhmDaemon
217220
/// @brief Create SwCluster objects & Invoke construction of worker objects
218221
/// @details Create the SwclusterHandler objects and the workers for the SwclusterHandler
219222
/// @param[in] f_bufferConfig_r The buffer configuration used for worker construction
223+
/// @param[in] components All component configurations; supervised ones drive alive supervision
220224
/// @return bool true if workers creation succeeded, false otherwise
221-
bool construct(const factory::MachineConfigFactory::SupervisionBufferConfig& f_bufferConfig_r) noexcept(false);
225+
bool construct(const factory::MachineConfigFactory::SupervisionBufferConfig& f_bufferConfig_r,
226+
const std::vector<score::mw::launch_manager::configuration::ComponentConfig>& components) noexcept(false);
222227

223228
/// @brief Perform cyclic execution of Phm daemon
224229
/// @details Perform cyclic execution of Phm daemon functionalities, for e.g., evaluation of supervisions.

score/launch_manager/daemon/src/alive_monitor/details/daemon/SwClusterHandler.cpp

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
#include "score/mw/launch_manager/alive_monitor/details/daemon/SwClusterHandler.hpp"
1515

16-
#include "score/mw/launch_manager/alive_monitor/details/factory/FlatCfgFactory.hpp"
16+
#include "score/mw/launch_manager/alive_monitor/details/factory/ConfigCfgFactory.hpp"
1717
#include "score/mw/launch_manager/alive_monitor/details/ifappl/Checkpoint.hpp"
1818
#include "score/mw/launch_manager/alive_monitor/details/ifappl/MonitorIfDaemon.hpp"
1919
#include "score/mw/launch_manager/alive_monitor/details/supervision/Alive.hpp"
@@ -44,41 +44,34 @@ SwClusterHandler::SwClusterHandler(const std::string& f_swClusterName_r)
4444

4545
SwClusterHandler::~SwClusterHandler() = default;
4646

47-
/* RULECHECKER_comment(0, 3, check_max_cyclomatic_complexity, "Max cyclomatic complexity violation\
48-
is tolerated for this function. ", true_no_defect) */
4947
bool SwClusterHandler::constructWorkers(
5048
std::shared_ptr<score::lcm::IRecoveryClient> f_recoveryClient_r,
5149
ifexm::ProcessStateReader& f_processStateReader_r,
52-
const factory::MachineConfigFactory::SupervisionBufferConfig& f_bufferConfig_r) noexcept(false)
50+
const factory::MachineConfigFactory::SupervisionBufferConfig& f_bufferConfig_r,
51+
const std::vector<score::mw::launch_manager::configuration::ComponentConfig>& components) noexcept(false)
5352
{
54-
bool isSuccess{false};
55-
factory::FlatCfgFactory flatCfgFactory{f_bufferConfig_r};
53+
logger_r.LogDebug() << "Software Cluster Handler starts constructing workers:" << f_swClusterName;
5654

57-
const std::string filename = "hm_demo.bin";
58-
isSuccess = flatCfgFactory.init(filename);
59-
if (isSuccess)
60-
{
61-
logger_r.LogDebug() << "Software Cluster Handler starts constructing workers:" << f_swClusterName;
62-
isSuccess = flatCfgFactory.createProcessStates(processStates, f_processStateReader_r);
63-
}
55+
factory::ConfigCfgFactory cfgFactory{components, f_bufferConfig_r};
56+
57+
bool isSuccess = cfgFactory.createProcessStates(processStates, f_processStateReader_r);
6458
if (isSuccess)
6559
{
66-
isSuccess = flatCfgFactory.createMonitorIfIpcs(monitorIfIpcs);
60+
isSuccess = cfgFactory.createMonitorIfIpcs(monitorIfIpcs);
6761
}
6862
if (isSuccess)
6963
{
70-
isSuccess = flatCfgFactory.createMonitorIf(monitorInterfaces, monitorIfIpcs, processStates);
64+
isSuccess = cfgFactory.createMonitorIf(monitorInterfaces, monitorIfIpcs, processStates);
7165
}
7266
if (isSuccess)
7367
{
74-
isSuccess = flatCfgFactory.createSupervisionCheckpoints(checkpoints, monitorInterfaces, processStates);
68+
isSuccess = cfgFactory.createSupervisionCheckpoints(checkpoints, monitorInterfaces, processStates);
7569
}
7670
if (isSuccess)
7771
{
78-
isSuccess =
79-
flatCfgFactory.createAliveSupervisions(aliveSupervisions, checkpoints, processStates, f_recoveryClient_r);
72+
isSuccess = cfgFactory.createAliveSupervisions(aliveSupervisions, checkpoints, processStates, f_recoveryClient_r);
8073
}
81-
if (isSuccess == false)
74+
if (!isSuccess)
8275
{
8376
logger_r.LogError() << "Software Cluster Handler is unable to construct the required worker objects.";
8477
}

score/launch_manager/daemon/src/alive_monitor/details/daemon/SwClusterHandler.hpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "score/mw/launch_manager/alive_monitor/details/ifexm/ProcessStateReader.hpp"
2121
#include "score/mw/launch_manager/alive_monitor/details/logging/PhmLogger.hpp"
2222
#include "score/mw/launch_manager/alive_monitor/details/timers/Timers_OsClock.hpp"
23+
#include "score/mw/launch_manager/configuration/config.hpp"
2324
#include <string>
2425
#include <vector>
2526

@@ -85,16 +86,18 @@ class SwClusterHandler
8586
/// @brief No Move Assignment
8687
SwClusterHandler& operator=(SwClusterHandler&&) = delete;
8788

88-
/// @brief Construct required worker objects for the Software Cluster
89-
/// @details Construct the interfaces, checkpoints, supervisions and recovery notifications
89+
/// @brief Construct required worker objects from the in-memory component configuration.
90+
/// @details Uses ConfigCfgFactory instead of reading hm_demo.bin from disk.
9091
/// @param [in] f_recoveryClient_r Interface to the launch manager for recovery
9192
/// @param [in] f_processStateReader_r Process state reader object for PHM daemon
92-
/// @param [in] f_bufferConfig_r Configuration settings for constructing workers
93+
/// @param [in] f_bufferConfig_r Configuration settings for constructing workers
94+
/// @param [in] components All component configurations from the loaded Config
9395
/// @return Construction is successful (true), otherwise failure (false)
9496
bool constructWorkers(
9597
std::shared_ptr<score::lcm::IRecoveryClient> f_recoveryClient_r,
9698
ifexm::ProcessStateReader& f_processStateReader_r,
97-
const factory::MachineConfigFactory::SupervisionBufferConfig& f_bufferConfig_r) noexcept(false);
99+
const factory::MachineConfigFactory::SupervisionBufferConfig& f_bufferConfig_r,
100+
const std::vector<score::mw::launch_manager::configuration::ComponentConfig>& components) noexcept(false);
98101

99102
/// @brief Perform cyclic execution
100103
/// @details Perform cyclic execution required for supervision of the Software Cluster

score/launch_manager/daemon/src/alive_monitor/details/factory/BUILD

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,34 @@ cc_library(
5757
}),
5858
)
5959

60+
cc_library(
61+
name = "config_cfg_factory",
62+
srcs = ["ConfigCfgFactory.cpp"],
63+
hdrs = ["ConfigCfgFactory.hpp"],
64+
include_prefix = "score/mw/launch_manager/alive_monitor/details/factory",
65+
strip_include_prefix = "/score/launch_manager/daemon/src/alive_monitor/details/factory",
66+
visibility = ["//score/launch_manager/daemon/src/alive_monitor:__subpackages__"],
67+
deps = [
68+
":i_phm_factory",
69+
":machine_config_factory",
70+
"//score/launch_manager/daemon/src/alive_monitor/details/common:types",
71+
"//score/launch_manager/daemon/src/alive_monitor/details/ifappl:checkpoint",
72+
"//score/launch_manager/daemon/src/alive_monitor/details/ifappl:monitor_if_daemon",
73+
"//score/launch_manager/daemon/src/alive_monitor/details/ifexm:process_state",
74+
"//score/launch_manager/daemon/src/alive_monitor/details/ifexm:process_state_reader",
75+
"//score/launch_manager/daemon/src/alive_monitor/details/logging:phm_logging",
76+
"//score/launch_manager/daemon/src/alive_monitor/details/supervision:alive",
77+
"//score/launch_manager/daemon/src/alive_monitor/details/supervision:supervision_cfg",
78+
"//score/launch_manager/daemon/src/alive_monitor/details/timers:time_conversion",
79+
"//score/launch_manager/daemon/src/alive_monitor/details/timers:timers_os_clock",
80+
"//score/launch_manager/daemon/src/common:identifier_hash",
81+
"//score/launch_manager/daemon/src/configuration:config",
82+
] + select({
83+
"@platforms//os:qnx": [],
84+
"@platforms//os:linux": ["//externals/acl"],
85+
}),
86+
)
87+
6088
cc_library(
6189
name = "flat_cfg_factory",
6290
srcs = ["FlatCfgFactory.cpp"],

0 commit comments

Comments
 (0)