surrogateGossiper can form a feedback loop
bboreham opened this issue · 0 comments
bboreham commented
If we have at least 3 peers which do not implement a particular channel, and some other peer sends gossip on that channel, then the following happens:
Router.handleGossip()
decodes the message and callsgossipChannel.deliver()
gossipChannel.deliver()
callssurrogateGossiper.OnGossip()
with the incoming messagesurrogateGossiper.OnGossip
returns asurrogateGossipData
with the same payloadgossipChannel.deliver()
then relays this payload to other listeners- repeat
This surfaced as an error message from Weave Net "connection shutting down due to error: host clock skew of -4043s exceeds 900s limit", reported at https://groups.google.com/a/weave.works/forum/#!topic/weave-users/zcrATGRTY6s
It is quite bad because the peers are sending gossip data in a tight loop.