Skip to content

Commit 5b4fb3f

Browse files
authored
hmon: fix cycles interval FFI issue (#134)
- Make optional parameters optional. - Previously uninitialized variable was used if not set. - Prevent negative cycle durations.
1 parent 1662c32 commit 5b4fb3f

6 files changed

Lines changed: 147 additions & 85 deletions

File tree

src/health_monitoring_lib/cpp/health_monitor.cpp

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ using namespace score::hm::logic;
2626
FFICode health_monitor_builder_create(FFIHandle* health_monitor_builder_handle_out);
2727
FFICode health_monitor_builder_destroy(FFIHandle health_monitor_builder_handle);
2828
FFICode health_monitor_builder_build(FFIHandle health_monitor_builder_handle,
29-
uint32_t supervisor_cycle_ms,
30-
uint32_t internal_cycle_ms,
29+
const uint64_t* supervisor_cycle_ms,
30+
const uint64_t* internal_cycle_ms,
3131
FFIHandle* health_monitor_handle_out);
3232
FFICode health_monitor_builder_add_deadline_monitor(FFIHandle health_monitor_builder_handle,
3333
const MonitorTag* monitor_tag,
@@ -115,13 +115,17 @@ HealthMonitorBuilder HealthMonitorBuilder::add_logic_monitor(const MonitorTag& m
115115

116116
HealthMonitorBuilder HealthMonitorBuilder::with_internal_processing_cycle(std::chrono::milliseconds cycle_duration) &&
117117
{
118-
internal_processing_cycle_duration_ = cycle_duration;
118+
auto count{cycle_duration.count()};
119+
SCORE_LANGUAGE_FUTURECPP_ASSERT_MESSAGE(count >= 0, "cycle duration must be positive");
120+
internal_processing_cycle_ms_ = count;
119121
return std::move(*this);
120122
}
121123

122124
HealthMonitorBuilder HealthMonitorBuilder::with_supervisor_api_cycle(std::chrono::milliseconds cycle_duration) &&
123125
{
124-
supervisor_api_cycle_duration_ = cycle_duration;
126+
auto count{cycle_duration.count()};
127+
SCORE_LANGUAGE_FUTURECPP_ASSERT_MESSAGE(count >= 0, "cycle duration must be positive");
128+
supervisor_api_cycle_ms_ = count;
125129
return std::move(*this);
126130
}
127131

@@ -130,12 +134,23 @@ score::cpp::expected<HealthMonitor, Error> HealthMonitorBuilder::build() &&
130134
auto health_monitor_builder_handle = health_monitor_builder_handle_.drop_by_rust();
131135
SCORE_LANGUAGE_FUTURECPP_PRECONDITION(health_monitor_builder_handle.has_value());
132136

133-
uint32_t supervisor_duration_ms = static_cast<uint32_t>(supervisor_api_cycle_duration_.count());
134-
uint32_t internal_duration_ms = static_cast<uint32_t>(internal_processing_cycle_duration_.count());
137+
// Handle optional parameters.
138+
const uint64_t* supervisor_api_cycle_ms{nullptr};
139+
const uint64_t* internal_processing_cycle_ms{nullptr};
140+
if (supervisor_api_cycle_ms_.has_value())
141+
{
142+
supervisor_api_cycle_ms = &supervisor_api_cycle_ms_.value();
143+
}
144+
if (internal_processing_cycle_ms_.has_value())
145+
{
146+
internal_processing_cycle_ms = &internal_processing_cycle_ms_.value();
147+
}
135148

136149
FFIHandle health_monitor_handle{nullptr};
137-
auto result{health_monitor_builder_build(
138-
health_monitor_builder_handle.value(), supervisor_duration_ms, internal_duration_ms, &health_monitor_handle)};
150+
auto result{health_monitor_builder_build(health_monitor_builder_handle.value(),
151+
supervisor_api_cycle_ms,
152+
internal_processing_cycle_ms,
153+
&health_monitor_handle)};
139154
if (result != kSuccess)
140155
{
141156
return score::cpp::unexpected(static_cast<Error>(result));

src/health_monitoring_lib/cpp/include/score/hm/health_monitor.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ class HealthMonitorBuilder final
6565
private:
6666
internal::DroppableFFIHandle health_monitor_builder_handle_;
6767

68-
std::chrono::milliseconds supervisor_api_cycle_duration_;
69-
std::chrono::milliseconds internal_processing_cycle_duration_;
68+
std::optional<uint64_t> supervisor_api_cycle_ms_;
69+
std::optional<uint64_t> internal_processing_cycle_ms_;
7070
};
7171

7272
class HealthMonitor final

src/health_monitoring_lib/rust/deadline/ffi.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -334,8 +334,8 @@ mod tests {
334334
);
335335
let _ = health_monitor_builder_build(
336336
health_monitor_builder_handle,
337-
200,
338-
100,
337+
null_mut(),
338+
null_mut(),
339339
&mut health_monitor_handle as *mut FFIHandle,
340340
);
341341
let _ = health_monitor_get_deadline_monitor(
@@ -383,8 +383,8 @@ mod tests {
383383
);
384384
let _ = health_monitor_builder_build(
385385
health_monitor_builder_handle,
386-
200,
387-
100,
386+
null_mut(),
387+
null_mut(),
388388
&mut health_monitor_handle as *mut FFIHandle,
389389
);
390390
let _ = health_monitor_get_deadline_monitor(
@@ -439,8 +439,8 @@ mod tests {
439439
);
440440
let _ = health_monitor_builder_build(
441441
health_monitor_builder_handle,
442-
200,
443-
100,
442+
null_mut(),
443+
null_mut(),
444444
&mut health_monitor_handle as *mut FFIHandle,
445445
);
446446
let _ = health_monitor_get_deadline_monitor(
@@ -485,8 +485,8 @@ mod tests {
485485
);
486486
let _ = health_monitor_builder_build(
487487
health_monitor_builder_handle,
488-
200,
489-
100,
488+
null_mut(),
489+
null_mut(),
490490
&mut health_monitor_handle as *mut FFIHandle,
491491
);
492492
let _ = health_monitor_get_deadline_monitor(
@@ -535,8 +535,8 @@ mod tests {
535535
);
536536
let _ = health_monitor_builder_build(
537537
health_monitor_builder_handle,
538-
200,
539-
100,
538+
null_mut(),
539+
null_mut(),
540540
&mut health_monitor_handle as *mut FFIHandle,
541541
);
542542
let _ = health_monitor_get_deadline_monitor(
@@ -584,8 +584,8 @@ mod tests {
584584
);
585585
let _ = health_monitor_builder_build(
586586
health_monitor_builder_handle,
587-
200,
588-
100,
587+
null_mut(),
588+
null_mut(),
589589
&mut health_monitor_handle as *mut FFIHandle,
590590
);
591591
let _ = health_monitor_get_deadline_monitor(
@@ -640,8 +640,8 @@ mod tests {
640640
);
641641
let _ = health_monitor_builder_build(
642642
health_monitor_builder_handle,
643-
200,
644-
100,
643+
null_mut(),
644+
null_mut(),
645645
&mut health_monitor_handle as *mut FFIHandle,
646646
);
647647
let _ = health_monitor_get_deadline_monitor(

0 commit comments

Comments
 (0)