Currently, gossipd is somewhat heavy-handed in treating routing errors. Currently it simply deactivates the failing channels, which will get reactivated when we receive a channel_update message --- but we do not expect to get channel_update often, so an otherwise perfectly-fine channel might get disabled indefinitely on our routing map.
One idea is to have a simple timer on how long we ban a channel on a temporary routing failure. We could add a u64 banned_until field to each node_connection that defaults to 0. If the current time is less than or equal to banned_until, we do not consider that connection for routing. If we get a channel_update we also clear this field. Then on a temporary channel failure instead of clearing active we simply get the current time, add say 30 seconds to it, then load the resulting time into banned_until.
xref: #638 (comment)
Currently, gossipd is somewhat heavy-handed in treating routing errors. Currently it simply deactivates the failing channels, which will get reactivated when we receive a
channel_updatemessage --- but we do not expect to getchannel_updateoften, so an otherwise perfectly-fine channel might get disabled indefinitely on our routing map.One idea is to have a simple timer on how long we ban a channel on a temporary routing failure. We could add a
u64 banned_untilfield to eachnode_connectionthat defaults to 0. If the current time is less than or equal tobanned_until, we do not consider that connection for routing. If we get achannel_updatewe also clear this field. Then on a temporary channel failure instead of clearingactivewe simply get the current time, add say 30 seconds to it, then load the resulting time intobanned_until.xref: #638 (comment)