Create an enum for sender errors
Will replace usages of bools, and will now currently only be used
for indicating that messages were sent too fast
After we merge this commit we will replace this enum with a general
Status class for all of aos, similar to absl::Status.
Change-Id: I4b5b2e7685744b3c6826a241cd3c84190eaa96ee
Signed-off-by: milind-u <milind.upadhyay@gmail.com>
diff --git a/aos/network/message_bridge_client_lib.cc b/aos/network/message_bridge_client_lib.cc
index 2b46dc2..f535c4f 100644
--- a/aos/network/message_bridge_client_lib.cc
+++ b/aos/network/message_bridge_client_lib.cc
@@ -257,13 +257,14 @@
// Publish the message.
RawSender *sender = channel_state->sender.get();
- sender->Send(remote_data->data()->data(), remote_data->data()->size(),
- monotonic_clock::time_point(
- chrono::nanoseconds(remote_data->monotonic_sent_time())),
- realtime_clock::time_point(
- chrono::nanoseconds(remote_data->realtime_sent_time())),
- remote_data->queue_index(),
- UUID::FromVector(remote_data->boot_uuid()));
+ sender->CheckOk(sender->Send(
+ remote_data->data()->data(), remote_data->data()->size(),
+ monotonic_clock::time_point(
+ chrono::nanoseconds(remote_data->monotonic_sent_time())),
+ realtime_clock::time_point(
+ chrono::nanoseconds(remote_data->realtime_sent_time())),
+ remote_data->queue_index(),
+ UUID::FromVector(remote_data->boot_uuid())));
client_status_->SampleFilter(
client_index_,
diff --git a/aos/network/message_bridge_client_status.cc b/aos/network/message_bridge_client_status.cc
index faade70..357026a 100644
--- a/aos/network/message_bridge_client_status.cc
+++ b/aos/network/message_bridge_client_status.cc
@@ -122,7 +122,7 @@
builder.MakeBuilder<ClientStatistics>();
client_statistics_builder.add_connections(client_connections_offset);
- builder.Send(client_statistics_builder.Finish());
+ builder.CheckOk(builder.Send(client_statistics_builder.Finish()));
}
int MessageBridgeClientStatus::FindClientIndex(std::string_view node_name) {
diff --git a/aos/network/message_bridge_server.fbs b/aos/network/message_bridge_server.fbs
index cdf970c..128f1f3 100644
--- a/aos/network/message_bridge_server.fbs
+++ b/aos/network/message_bridge_server.fbs
@@ -40,6 +40,9 @@
// Statistics for all connections to all the clients.
table ServerStatistics {
connections:[ServerConnection] (id: 0);
+
+ // Count of timestamp send failures
+ timestamp_send_failures:uint64 (id: 1);
}
root_type ServerStatistics;
diff --git a/aos/network/message_bridge_server_lib.cc b/aos/network/message_bridge_server_lib.cc
index 006f2b1..41fb915 100644
--- a/aos/network/message_bridge_server_lib.cc
+++ b/aos/network/message_bridge_server_lib.cc
@@ -159,7 +159,7 @@
server_status->AddPartialDeliveries(peer.node_index,
partial_deliveries);
- builder.Send(remote_message_builder.Finish());
+ builder.CheckOk(builder.Send(remote_message_builder.Finish()));
}
break;
}
diff --git a/aos/network/message_bridge_server_status.cc b/aos/network/message_bridge_server_status.cc
index f7553e4..09355b2 100644
--- a/aos/network/message_bridge_server_status.cc
+++ b/aos/network/message_bridge_server_status.cc
@@ -87,7 +87,8 @@
filters_.resize(event_loop->configuration()->nodes()->size());
partial_deliveries_.resize(event_loop->configuration()->nodes()->size());
- boot_uuids_.resize(event_loop->configuration()->nodes()->size(), UUID::Zero());
+ boot_uuids_.resize(event_loop->configuration()->nodes()->size(),
+ UUID::Zero());
has_boot_uuids_.resize(event_loop->configuration()->nodes()->size(), false);
timestamp_fetchers_.resize(event_loop->configuration()->nodes()->size());
server_connection_.resize(event_loop->configuration()->nodes()->size());
@@ -217,7 +218,10 @@
ServerStatistics::Builder server_statistics_builder =
builder.MakeBuilder<ServerStatistics>();
server_statistics_builder.add_connections(server_connections_offset);
- builder.Send(server_statistics_builder.Finish());
+ server_statistics_builder.add_timestamp_send_failures(
+ timestamp_failure_counter_.failures());
+
+ builder.CheckOk(builder.Send(server_statistics_builder.Finish()));
}
void MessageBridgeServerStatus::Tick() {
@@ -352,20 +356,24 @@
// Send it out over shm, and using that timestamp, then send it out over sctp.
// This avoid some context switches.
if (!send_) return;
- timestamp_sender_.Send(timestamp_copy);
- Context context;
- context.monotonic_event_time = timestamp_sender_.monotonic_sent_time();
- context.realtime_event_time = timestamp_sender_.realtime_sent_time();
- context.queue_index = timestamp_sender_.sent_queue_index();
- context.size = timestamp_copy.span().size();
- context.source_boot_uuid = event_loop_->boot_uuid();
- context.data = timestamp_copy.span().data();
+ const auto err = timestamp_sender_.Send(timestamp_copy);
+ timestamp_failure_counter_.Count(err);
+ // Reply only if we successfully sent the timestamp
+ if (err == RawSender::Error::kOk) {
+ Context context;
+ context.monotonic_event_time = timestamp_sender_.monotonic_sent_time();
+ context.realtime_event_time = timestamp_sender_.realtime_sent_time();
+ context.queue_index = timestamp_sender_.sent_queue_index();
+ context.size = timestamp_copy.span().size();
+ context.source_boot_uuid = event_loop_->boot_uuid();
+ context.data = timestamp_copy.span().data();
- // Since we are building up the timestamp to send here, we need to trigger the
- // SendData call ourselves.
- if (send_data_) {
- send_data_(context);
+ // Since we are building up the timestamp to send here, we need to trigger
+ // the SendData call ourselves.
+ if (send_data_) {
+ send_data_(context);
+ }
}
}
diff --git a/aos/network/message_bridge_server_status.h b/aos/network/message_bridge_server_status.h
index c17e00a..3a1c9ed 100644
--- a/aos/network/message_bridge_server_status.h
+++ b/aos/network/message_bridge_server_status.h
@@ -113,6 +113,8 @@
// Sender for the timestamps that we are forwarding over the network.
aos::Sender<Timestamp> timestamp_sender_;
+ SendFailureCounter timestamp_failure_counter_;
+
aos::monotonic_clock::time_point last_statistics_send_time_ =
aos::monotonic_clock::min_time;
@@ -123,7 +125,6 @@
std::vector<uint32_t> partial_deliveries_;
};
-
} // namespace message_bridge
} // namespace aos
diff --git a/aos/network/message_bridge_test.cc b/aos/network/message_bridge_test.cc
index 2a43170..8246c22 100644
--- a/aos/network/message_bridge_test.cc
+++ b/aos/network/message_bridge_test.cc
@@ -450,7 +450,8 @@
examples::Ping::Builder ping_builder =
builder.MakeBuilder<examples::Ping>();
ping_builder.add_value(ping_count + 971);
- builder.Send(ping_builder.Finish());
+ EXPECT_EQ(builder.Send(ping_builder.Finish()),
+ RawSender::Error::kOk);
++ping_count;
}
});
@@ -985,7 +986,7 @@
aos::Sender<examples::Ping>::Builder builder = sender->MakeBuilder();
examples::Ping::Builder ping_builder = builder.MakeBuilder<examples::Ping>();
ping_builder.add_value(value);
- builder.Send(ping_builder.Finish());
+ builder.CheckOk(builder.Send(ping_builder.Finish()));
}
// Tests that when a message is sent before the bridge starts up, but is
@@ -1148,7 +1149,7 @@
examples::Ping::Builder ping_builder =
builder.MakeBuilder<examples::Ping>();
ping_builder.add_value(1);
- builder.Send(ping_builder.Finish());
+ builder.CheckOk(builder.Send(ping_builder.Finish()));
}
MakePi1Client();