summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPradeepKiruvale <pradeepkumar.kj@softwareag.com>2022-08-18 16:23:54 +0530
committerGitHub <noreply@github.com>2022-08-18 16:23:54 +0530
commit46d625f7ca0470b29460c3eda1f62a6ac4713861 (patch)
treef5276c15976737fc2a140cf967484843eb279ff4
parent54160cf3c127859619bf1e51cb7bef69b4c9c110 (diff)
Restart of tedge-mapper-c8y is recreating deleted child devices (#1344)
* Create external device only after alarm message sync Signed-off-by: Pradeep Kumar K J <pradeepkumar.kj@softwareag.com>
-rw-r--r--crates/core/tedge_mapper/src/c8y/converter.rs27
-rw-r--r--crates/core/tedge_mapper/src/c8y/tests.rs2
2 files changed, 16 insertions, 13 deletions
diff --git a/crates/core/tedge_mapper/src/c8y/converter.rs b/crates/core/tedge_mapper/src/c8y/converter.rs
index 12f3ec3c..03123697 100644
--- a/crates/core/tedge_mapper/src/c8y/converter.rs
+++ b/crates/core/tedge_mapper/src/c8y/converter.rs
@@ -274,20 +274,23 @@ where
) -> Result<Vec<Message>, ConversionError> {
if topic.name.starts_with("tedge/alarms") {
let mut mqtt_messages: Vec<Message> = Vec::new();
- let topic_split: Vec<&str> = topic.name.split('/').collect();
- if topic_split.len() == 5 {
- let child_id = topic_split[4];
- // Create a child device, if it does not exists already
- if !child_id.is_empty() && !self.children.contains(child_id) {
- self.children.insert(child_id.to_string());
- mqtt_messages.push(Message::new(
- &Topic::new_unchecked(SMARTREST_PUBLISH_TOPIC),
- format!("101,{child_id},{child_id},thin-edge.io-child"),
- ));
- }
- }
self.size_threshold.validate(message)?;
let mut messages = self.alarm_converter.try_convert_alarm(message)?;
+ if !messages.is_empty() {
+ // When there is some messages to be sent on behalf of a child device,
+ // this child device must be declared first, if not done yet
+ let topic_split: Vec<&str> = topic.name.split('/').collect();
+ if topic_split.len() == 5 {
+ let child_id = topic_split[4];
+ if !child_id.is_empty() && !self.children.contains(child_id) {
+ self.children.insert(child_id.to_string());
+ mqtt_messages.push(Message::new(
+ &Topic::new_unchecked(SMARTREST_PUBLISH_TOPIC),
+ format!("101,{child_id},{child_id},thin-edge.io-child"),
+ ));
+ }
+ }
+ }
mqtt_messages.append(&mut messages);
Ok(mqtt_messages)
} else if topic.name.starts_with(INTERNAL_ALARMS_TOPIC) {
diff --git a/crates/core/tedge_mapper/src/c8y/tests.rs b/crates/core/tedge_mapper/src/c8y/tests.rs
index 2d37ce87..e72f9eed 100644
--- a/crates/core/tedge_mapper/src/c8y/tests.rs
+++ b/crates/core/tedge_mapper/src/c8y/tests.rs
@@ -681,7 +681,7 @@ async fn test_sync_child_alarms() {
let alarm_message = Message::new(&Topic::new_unchecked(alarm_topic), alarm_payload);
// During the sync phase, alarms are not converted immediately, but only cached to be synced later
- assert_eq!(converter.convert(&alarm_message).await.len(), 1);
+ assert!(converter.convert(&alarm_message).await.is_empty());
let non_alarm_topic = "tedge/measurements/external_sensor";
let non_alarm_payload = r#"{"temp": 1}"#;