From 7a8cd32bc645c7b33223eeb23abd346535c33b62 Mon Sep 17 00:00:00 2001 From: Terence Hampson Date: Tue, 25 Feb 2025 19:11:15 +0000 Subject: [PATCH 1/3] Add retransmission count to MRP TransmitEvent --- src/messaging/ReliableMessageAnalyticsDelegate.h | 4 ++++ src/messaging/ReliableMessageMgr.cpp | 6 ++++++ src/messaging/tests/TestReliableMessageProtocol.cpp | 12 ++++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/messaging/ReliableMessageAnalyticsDelegate.h b/src/messaging/ReliableMessageAnalyticsDelegate.h index 4eeea4f23b7e5f..3a6b888403cd66 100644 --- a/src/messaging/ReliableMessageAnalyticsDelegate.h +++ b/src/messaging/ReliableMessageAnalyticsDelegate.h @@ -22,6 +22,8 @@ #pragma once +#include + #include #include @@ -65,6 +67,8 @@ class ReliableMessageAnalyticsDelegate // The outgoing message counter associated with the event. If there is no outgoing message counter // this value will be 0. uint32_t messageCounter = 0; + // If the eventType is kRetransmission this value will be populated with which retransmission attempt this is. + std::optional retransmissionCount; }; virtual void OnTransmitEvent(const TransmitEvent & event) = 0; diff --git a/src/messaging/ReliableMessageMgr.cpp b/src/messaging/ReliableMessageMgr.cpp index 9a2bb31777c7e6..69470c234fa31e 100644 --- a/src/messaging/ReliableMessageMgr.cpp +++ b/src/messaging/ReliableMessageMgr.cpp @@ -126,6 +126,12 @@ void ReliableMessageMgr::NotifyMessageSendAnalytics(const RetransTableEntry & en ReliableMessageAnalyticsDelegate::SessionType::kEstablishedCase, .eventType = eventType, .messageCounter = messageCounter }; + + if (eventType == ReliableMessageAnalyticsDelegate::EventType::kRetransmission) + { + event.retransmissionCount = entry.sendCount; + } + mAnalyticsDelegate->OnTransmitEvent(event); } #endif // CHIP_CONFIG_MRP_ANALYTICS_ENABLED diff --git a/src/messaging/tests/TestReliableMessageProtocol.cpp b/src/messaging/tests/TestReliableMessageProtocol.cpp index f30e763c50cd1b..ad65bf25edf01a 100644 --- a/src/messaging/tests/TestReliableMessageProtocol.cpp +++ b/src/messaging/tests/TestReliableMessageProtocol.cpp @@ -2144,6 +2144,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitEven EXPECT_EQ(firstTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(firstTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(firstTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kInitialSend); + EXPECT_EQ(firstTransmitEvent.retransmissionCount, std::nullopt); // We have no way of validating the first messageCounter since this is a randomly generated value, but it should // remain constant for all subsequent transmit events in this test. const uint32_t messageCounter = firstTransmitEvent.messageCounter; @@ -2153,6 +2154,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitEven EXPECT_EQ(secondTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(secondTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(secondTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); + EXPECT_EQ(secondTransmitEvent.retransmissionCount, 1); EXPECT_EQ(messageCounter, secondTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); @@ -2160,6 +2162,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitEven EXPECT_EQ(thirdTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(thirdTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(thirdTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); + EXPECT_EQ(thirdTransmitEvent.retransmissionCount, 2); EXPECT_EQ(messageCounter, thirdTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); @@ -2167,6 +2170,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitEven EXPECT_EQ(forthTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(forthTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(forthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); + EXPECT_EQ(forthTransmitEvent.retransmissionCount, 3); EXPECT_EQ(messageCounter, forthTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); @@ -2174,6 +2178,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitEven EXPECT_EQ(fifthTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(fifthTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(fifthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); + EXPECT_EQ(fifthTransmitEvent.retransmissionCount, 4); EXPECT_EQ(messageCounter, fifthTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); @@ -2181,6 +2186,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitEven EXPECT_EQ(sixthTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(sixthTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(sixthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kAcknowledged); + EXPECT_EQ(sixthTransmitEvent.retransmissionCount, std::nullopt); EXPECT_EQ(messageCounter, sixthTransmitEvent.messageCounter); } @@ -2280,6 +2286,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitFail EXPECT_EQ(firstTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(firstTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(firstTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kInitialSend); + EXPECT_EQ(firstTransmitEvent.retransmissionCount, std::nullopt); // We have no way of validating the first messageCounter since this is a randomly generated value, but it should // remain constant for all subsequent transmit events in this test. const uint32_t messageCounter = firstTransmitEvent.messageCounter; @@ -2289,6 +2296,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitFail EXPECT_EQ(secondTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(secondTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(secondTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); + EXPECT_EQ(secondTransmitEvent.retransmissionCount, 1); EXPECT_EQ(messageCounter, secondTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); @@ -2296,6 +2304,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitFail EXPECT_EQ(thirdTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(thirdTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(thirdTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); + EXPECT_EQ(thirdTransmitEvent.retransmissionCount, 2); EXPECT_EQ(messageCounter, thirdTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); @@ -2303,12 +2312,14 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitFail EXPECT_EQ(forthTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(forthTransmitEvent.fabricIndex, expectedFabricIndex); EXPECT_EQ(forthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); + EXPECT_EQ(forthTransmitEvent.retransmissionCount, 3); EXPECT_EQ(messageCounter, forthTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); auto fifthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front(); EXPECT_EQ(fifthTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(fifthTransmitEvent.fabricIndex, expectedFabricIndex); + EXPECT_EQ(fifthTransmitEvent.retransmissionCount, 4); EXPECT_EQ(fifthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); EXPECT_EQ(messageCounter, fifthTransmitEvent.messageCounter); @@ -2316,6 +2327,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitFail auto sixthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front(); EXPECT_EQ(sixthTransmitEvent.nodeId, expectedNodeId); EXPECT_EQ(sixthTransmitEvent.fabricIndex, expectedFabricIndex); + EXPECT_EQ(sixthTransmitEvent.retransmissionCount, std::nullopt); EXPECT_EQ(sixthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kFailed); EXPECT_EQ(messageCounter, sixthTransmitEvent.messageCounter); } From 38075003528a11293ff3b0ca96b6883a2e89a3ea Mon Sep 17 00:00:00 2001 From: Terence Hampson Date: Tue, 25 Feb 2025 20:09:36 +0000 Subject: [PATCH 2/3] Self review --- src/messaging/ReliableMessageAnalyticsDelegate.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/messaging/ReliableMessageAnalyticsDelegate.h b/src/messaging/ReliableMessageAnalyticsDelegate.h index 3a6b888403cd66..db15c18071db2c 100644 --- a/src/messaging/ReliableMessageAnalyticsDelegate.h +++ b/src/messaging/ReliableMessageAnalyticsDelegate.h @@ -67,7 +67,8 @@ class ReliableMessageAnalyticsDelegate // The outgoing message counter associated with the event. If there is no outgoing message counter // this value will be 0. uint32_t messageCounter = 0; - // If the eventType is kRetransmission this value will be populated with which retransmission attempt this is. + // If the eventType is kRetransmission, this value will be populated with the number of the + // retransmission attempt std::optional retransmissionCount; }; From 8becdc817026baf5a6b6023c6c50bfe599ae30c1 Mon Sep 17 00:00:00 2001 From: Terence Hampson Date: Wed, 26 Feb 2025 17:14:08 +0000 Subject: [PATCH 3/3] Change forth to fourth --- .../tests/TestReliableMessageProtocol.cpp | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/messaging/tests/TestReliableMessageProtocol.cpp b/src/messaging/tests/TestReliableMessageProtocol.cpp index ad65bf25edf01a..376dbf15a2e5d0 100644 --- a/src/messaging/tests/TestReliableMessageProtocol.cpp +++ b/src/messaging/tests/TestReliableMessageProtocol.cpp @@ -2166,12 +2166,12 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitEven EXPECT_EQ(messageCounter, thirdTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); - auto forthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front(); - EXPECT_EQ(forthTransmitEvent.nodeId, expectedNodeId); - EXPECT_EQ(forthTransmitEvent.fabricIndex, expectedFabricIndex); - EXPECT_EQ(forthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); - EXPECT_EQ(forthTransmitEvent.retransmissionCount, 3); - EXPECT_EQ(messageCounter, forthTransmitEvent.messageCounter); + auto fourthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front(); + EXPECT_EQ(fourthTransmitEvent.nodeId, expectedNodeId); + EXPECT_EQ(fourthTransmitEvent.fabricIndex, expectedFabricIndex); + EXPECT_EQ(fourthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); + EXPECT_EQ(fourthTransmitEvent.retransmissionCount, 3); + EXPECT_EQ(messageCounter, fourthTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); auto fifthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front(); @@ -2308,12 +2308,12 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitFail EXPECT_EQ(messageCounter, thirdTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); - auto forthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front(); - EXPECT_EQ(forthTransmitEvent.nodeId, expectedNodeId); - EXPECT_EQ(forthTransmitEvent.fabricIndex, expectedFabricIndex); - EXPECT_EQ(forthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); - EXPECT_EQ(forthTransmitEvent.retransmissionCount, 3); - EXPECT_EQ(messageCounter, forthTransmitEvent.messageCounter); + auto fourthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front(); + EXPECT_EQ(fourthTransmitEvent.nodeId, expectedNodeId); + EXPECT_EQ(fourthTransmitEvent.fabricIndex, expectedFabricIndex); + EXPECT_EQ(fourthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission); + EXPECT_EQ(fourthTransmitEvent.retransmissionCount, 3); + EXPECT_EQ(messageCounter, fourthTransmitEvent.messageCounter); testAnalyticsDelegate.mTransmitEvents.pop(); auto fifthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();