diff options
author | PradeepKiruvale <pradeepkumar.kj@softwareag.com> | 2022-08-18 16:23:54 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-18 16:23:54 +0530 |
commit | 46d625f7ca0470b29460c3eda1f62a6ac4713861 (patch) | |
tree | f5276c15976737fc2a140cf967484843eb279ff4 | |
parent | 54160cf3c127859619bf1e51cb7bef69b4c9c110 (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.rs | 27 | ||||
-rw-r--r-- | crates/core/tedge_mapper/src/c8y/tests.rs | 2 |
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}"#; |