Skip to content

Commit 466d4e2

Browse files
tehampsongmarcosb
authored andcommitted
Add retransmission count to MRP TransmitEvent (project-chip#37768)
* Add retransmission count to MRP TransmitEvent * Self review * Change forth to fourth
1 parent a93e3b1 commit 466d4e2

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

src/messaging/ReliableMessageAnalyticsDelegate.h

+5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
#pragma once
2424

25+
#include <optional>
26+
2527
#include <lib/core/DataModelTypes.h>
2628
#include <lib/core/NodeId.h>
2729

@@ -65,6 +67,9 @@ class ReliableMessageAnalyticsDelegate
6567
// The outgoing message counter associated with the event. If there is no outgoing message counter
6668
// this value will be 0.
6769
uint32_t messageCounter = 0;
70+
// If the eventType is kRetransmission, this value will be populated with the number of the
71+
// retransmission attempt
72+
std::optional<uint8_t> retransmissionCount;
6873
};
6974

7075
virtual void OnTransmitEvent(const TransmitEvent & event) = 0;

src/messaging/ReliableMessageMgr.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,12 @@ void ReliableMessageMgr::NotifyMessageSendAnalytics(const RetransTableEntry & en
126126
ReliableMessageAnalyticsDelegate::SessionType::kEstablishedCase,
127127
.eventType = eventType,
128128
.messageCounter = messageCounter };
129+
130+
if (eventType == ReliableMessageAnalyticsDelegate::EventType::kRetransmission)
131+
{
132+
event.retransmissionCount = entry.sendCount;
133+
}
134+
129135
mAnalyticsDelegate->OnTransmitEvent(event);
130136
}
131137
#endif // CHIP_CONFIG_MRP_ANALYTICS_ENABLED

src/messaging/tests/TestReliableMessageProtocol.cpp

+22-10
Original file line numberDiff line numberDiff line change
@@ -2144,6 +2144,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitEven
21442144
EXPECT_EQ(firstTransmitEvent.nodeId, expectedNodeId);
21452145
EXPECT_EQ(firstTransmitEvent.fabricIndex, expectedFabricIndex);
21462146
EXPECT_EQ(firstTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kInitialSend);
2147+
EXPECT_EQ(firstTransmitEvent.retransmissionCount, std::nullopt);
21472148
// We have no way of validating the first messageCounter since this is a randomly generated value, but it should
21482149
// remain constant for all subsequent transmit events in this test.
21492150
const uint32_t messageCounter = firstTransmitEvent.messageCounter;
@@ -2153,34 +2154,39 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitEven
21532154
EXPECT_EQ(secondTransmitEvent.nodeId, expectedNodeId);
21542155
EXPECT_EQ(secondTransmitEvent.fabricIndex, expectedFabricIndex);
21552156
EXPECT_EQ(secondTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
2157+
EXPECT_EQ(secondTransmitEvent.retransmissionCount, 1);
21562158
EXPECT_EQ(messageCounter, secondTransmitEvent.messageCounter);
21572159

21582160
testAnalyticsDelegate.mTransmitEvents.pop();
21592161
auto thirdTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
21602162
EXPECT_EQ(thirdTransmitEvent.nodeId, expectedNodeId);
21612163
EXPECT_EQ(thirdTransmitEvent.fabricIndex, expectedFabricIndex);
21622164
EXPECT_EQ(thirdTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
2165+
EXPECT_EQ(thirdTransmitEvent.retransmissionCount, 2);
21632166
EXPECT_EQ(messageCounter, thirdTransmitEvent.messageCounter);
21642167

21652168
testAnalyticsDelegate.mTransmitEvents.pop();
2166-
auto forthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
2167-
EXPECT_EQ(forthTransmitEvent.nodeId, expectedNodeId);
2168-
EXPECT_EQ(forthTransmitEvent.fabricIndex, expectedFabricIndex);
2169-
EXPECT_EQ(forthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
2170-
EXPECT_EQ(messageCounter, forthTransmitEvent.messageCounter);
2169+
auto fourthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
2170+
EXPECT_EQ(fourthTransmitEvent.nodeId, expectedNodeId);
2171+
EXPECT_EQ(fourthTransmitEvent.fabricIndex, expectedFabricIndex);
2172+
EXPECT_EQ(fourthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
2173+
EXPECT_EQ(fourthTransmitEvent.retransmissionCount, 3);
2174+
EXPECT_EQ(messageCounter, fourthTransmitEvent.messageCounter);
21712175

21722176
testAnalyticsDelegate.mTransmitEvents.pop();
21732177
auto fifthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
21742178
EXPECT_EQ(fifthTransmitEvent.nodeId, expectedNodeId);
21752179
EXPECT_EQ(fifthTransmitEvent.fabricIndex, expectedFabricIndex);
21762180
EXPECT_EQ(fifthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
2181+
EXPECT_EQ(fifthTransmitEvent.retransmissionCount, 4);
21772182
EXPECT_EQ(messageCounter, fifthTransmitEvent.messageCounter);
21782183

21792184
testAnalyticsDelegate.mTransmitEvents.pop();
21802185
auto sixthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
21812186
EXPECT_EQ(sixthTransmitEvent.nodeId, expectedNodeId);
21822187
EXPECT_EQ(sixthTransmitEvent.fabricIndex, expectedFabricIndex);
21832188
EXPECT_EQ(sixthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kAcknowledged);
2189+
EXPECT_EQ(sixthTransmitEvent.retransmissionCount, std::nullopt);
21842190
EXPECT_EQ(messageCounter, sixthTransmitEvent.messageCounter);
21852191
}
21862192

@@ -2280,6 +2286,7 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitFail
22802286
EXPECT_EQ(firstTransmitEvent.nodeId, expectedNodeId);
22812287
EXPECT_EQ(firstTransmitEvent.fabricIndex, expectedFabricIndex);
22822288
EXPECT_EQ(firstTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kInitialSend);
2289+
EXPECT_EQ(firstTransmitEvent.retransmissionCount, std::nullopt);
22832290
// We have no way of validating the first messageCounter since this is a randomly generated value, but it should
22842291
// remain constant for all subsequent transmit events in this test.
22852292
const uint32_t messageCounter = firstTransmitEvent.messageCounter;
@@ -2289,33 +2296,38 @@ TEST_F(TestReliableMessageProtocol, CheckReliableMessageAnalyticsForTransmitFail
22892296
EXPECT_EQ(secondTransmitEvent.nodeId, expectedNodeId);
22902297
EXPECT_EQ(secondTransmitEvent.fabricIndex, expectedFabricIndex);
22912298
EXPECT_EQ(secondTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
2299+
EXPECT_EQ(secondTransmitEvent.retransmissionCount, 1);
22922300
EXPECT_EQ(messageCounter, secondTransmitEvent.messageCounter);
22932301

22942302
testAnalyticsDelegate.mTransmitEvents.pop();
22952303
auto thirdTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
22962304
EXPECT_EQ(thirdTransmitEvent.nodeId, expectedNodeId);
22972305
EXPECT_EQ(thirdTransmitEvent.fabricIndex, expectedFabricIndex);
22982306
EXPECT_EQ(thirdTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
2307+
EXPECT_EQ(thirdTransmitEvent.retransmissionCount, 2);
22992308
EXPECT_EQ(messageCounter, thirdTransmitEvent.messageCounter);
23002309

23012310
testAnalyticsDelegate.mTransmitEvents.pop();
2302-
auto forthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
2303-
EXPECT_EQ(forthTransmitEvent.nodeId, expectedNodeId);
2304-
EXPECT_EQ(forthTransmitEvent.fabricIndex, expectedFabricIndex);
2305-
EXPECT_EQ(forthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
2306-
EXPECT_EQ(messageCounter, forthTransmitEvent.messageCounter);
2311+
auto fourthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
2312+
EXPECT_EQ(fourthTransmitEvent.nodeId, expectedNodeId);
2313+
EXPECT_EQ(fourthTransmitEvent.fabricIndex, expectedFabricIndex);
2314+
EXPECT_EQ(fourthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
2315+
EXPECT_EQ(fourthTransmitEvent.retransmissionCount, 3);
2316+
EXPECT_EQ(messageCounter, fourthTransmitEvent.messageCounter);
23072317

23082318
testAnalyticsDelegate.mTransmitEvents.pop();
23092319
auto fifthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
23102320
EXPECT_EQ(fifthTransmitEvent.nodeId, expectedNodeId);
23112321
EXPECT_EQ(fifthTransmitEvent.fabricIndex, expectedFabricIndex);
2322+
EXPECT_EQ(fifthTransmitEvent.retransmissionCount, 4);
23122323
EXPECT_EQ(fifthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kRetransmission);
23132324
EXPECT_EQ(messageCounter, fifthTransmitEvent.messageCounter);
23142325

23152326
testAnalyticsDelegate.mTransmitEvents.pop();
23162327
auto sixthTransmitEvent = testAnalyticsDelegate.mTransmitEvents.front();
23172328
EXPECT_EQ(sixthTransmitEvent.nodeId, expectedNodeId);
23182329
EXPECT_EQ(sixthTransmitEvent.fabricIndex, expectedFabricIndex);
2330+
EXPECT_EQ(sixthTransmitEvent.retransmissionCount, std::nullopt);
23192331
EXPECT_EQ(sixthTransmitEvent.eventType, ReliableMessageAnalyticsDelegate::EventType::kFailed);
23202332
EXPECT_EQ(messageCounter, sixthTransmitEvent.messageCounter);
23212333
}

0 commit comments

Comments
 (0)