aos/sctp: Add client partial delivery stats
Change-Id: I40f8ab11cde88760215227e339715297e99e2d9f
diff --git a/aos/network/message_bridge_client.fbs b/aos/network/message_bridge_client.fbs
index 7056506..6efe3a9 100644
--- a/aos/network/message_bridge_client.fbs
+++ b/aos/network/message_bridge_client.fbs
@@ -21,6 +21,10 @@
// Number of duplicate packets we received and dropped.
duplicate_packets:uint (id: 4);
+ // Number of extra calls needed to receive a single message
+ // (indicates congestion)
+ partial_deliveries:uint (id: 5);
+
// TODO(austin): Per channel counts?
}
diff --git a/aos/network/message_bridge_client_lib.cc b/aos/network/message_bridge_client_lib.cc
index a5113a0..08350a8 100644
--- a/aos/network/message_bridge_client_lib.cc
+++ b/aos/network/message_bridge_client_lib.cc
@@ -238,6 +238,8 @@
// Duplicate message, ignore.
} else {
connection_->mutate_received_packets(connection_->received_packets() + 1);
+ connection_->mutate_partial_deliveries(connection_->partial_deliveries() +
+ message->partial_deliveries);
channel_state->last_queue_index = remote_data->queue_index();
channel_state->last_timestamp = monotonic_clock::time_point(
diff --git a/aos/network/message_bridge_client_status.cc b/aos/network/message_bridge_client_status.cc
index e8520cf..69f474a 100644
--- a/aos/network/message_bridge_client_status.cc
+++ b/aos/network/message_bridge_client_status.cc
@@ -33,6 +33,7 @@
connection_builder.add_received_packets(0);
connection_builder.add_duplicate_packets(0);
connection_builder.add_monotonic_offset(0);
+ connection_builder.add_partial_deliveries(0);
connection_offsets.emplace_back(connection_builder.Finish());
}
flatbuffers::Offset<
@@ -97,6 +98,8 @@
client_connection_builder.add_duplicate_packets(
connection->duplicate_packets());
}
+ client_connection_builder.add_partial_deliveries(
+ connection->partial_deliveries());
// Strip out the monotonic offset if it isn't populated.
TimestampFilter *filter = &filters_[client_connection_offsets_.size()];
diff --git a/aos/network/message_bridge_test.cc b/aos/network/message_bridge_test.cc
index 1b6f594..7420579 100644
--- a/aos/network/message_bridge_test.cc
+++ b/aos/network/message_bridge_test.cc
@@ -1067,6 +1067,11 @@
->duplicate_packets(),
0u);
+ EXPECT_EQ(pi2_client_statistics_fetcher->connections()
+ ->Get(0)
+ ->partial_deliveries(),
+ 0u);
+
EXPECT_TRUE(ping_fetcher.Fetch());
EXPECT_FALSE(unreliable_ping_fetcher.Fetch());
EXPECT_EQ(ping_timestamp_count, 1);
@@ -1087,6 +1092,11 @@
->duplicate_packets(),
1u);
+ EXPECT_EQ(pi2_client_statistics_fetcher->connections()
+ ->Get(0)
+ ->partial_deliveries(),
+ 0u);
+
EXPECT_EQ(ping_timestamp_count, 1);
EXPECT_FALSE(ping_fetcher.Fetch());
EXPECT_FALSE(unreliable_ping_fetcher.Fetch());
@@ -1192,6 +1202,11 @@
->duplicate_packets(),
0u);
+ EXPECT_EQ(pi2_client_statistics_fetcher->connections()
+ ->Get(0)
+ ->partial_deliveries(),
+ 0u);
+
EXPECT_TRUE(ping_fetcher.Fetch());
EXPECT_FALSE(unreliable_ping_fetcher.Fetch());
EXPECT_EQ(ping_timestamp_count, 1);
@@ -1213,6 +1228,12 @@
->duplicate_packets(),
1u);
+
+ EXPECT_EQ(pi2_client_statistics_fetcher->connections()
+ ->Get(0)
+ ->partial_deliveries(),
+ 0u);
+
EXPECT_EQ(ping_timestamp_count, 1);
EXPECT_FALSE(ping_fetcher.Fetch());
EXPECT_FALSE(unreliable_ping_fetcher.Fetch());