Fix web_proxy for multinode.
Make sure the channel is readable on a node before making fetchers.
Web side will silently fail to subscribe if it isn't available.
Change-Id: Ic3e2c3cf49fb6750697ce6bd7ccf172558eebf2d
diff --git a/aos/network/web_proxy_main.cc b/aos/network/web_proxy_main.cc
index 21b6f9c..479320a 100644
--- a/aos/network/web_proxy_main.cc
+++ b/aos/network/web_proxy_main.cc
@@ -15,13 +15,18 @@
std::vector<std::unique_ptr<aos::web_proxy::Subscriber>> *subscribers,
const aos::FlatbufferDetachedBuffer<aos::Configuration> &config) {
aos::ShmEventLoop event_loop(&config.message());
+ const aos::Node *self = aos::configuration::GetMyNode(&config.message());
// TODO(alex): skip fetchers on the wrong node.
for (uint i = 0; i < config.message().channels()->size(); ++i) {
auto channel = config.message().channels()->Get(i);
- auto fetcher = event_loop.MakeRawFetcher(channel);
- subscribers->emplace_back(
- std::make_unique<aos::web_proxy::Subscriber>(std::move(fetcher), i));
+ if (!aos::configuration::ChannelIsReadableOnNode(channel, self)) {
+ subscribers->emplace_back(nullptr);
+ } else {
+ auto fetcher = event_loop.MakeRawFetcher(channel);
+ subscribers->emplace_back(
+ std::make_unique<aos::web_proxy::Subscriber>(std::move(fetcher), i));
+ }
}
flatbuffers::FlatBufferBuilder fbb(1024);