mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-22 16:44:20 +01:00
gossipd: don't make new zombies, just prune channels as we did before.
This reverts us to the v22.11 behaviour, pending a revisit for the next release. Changelog-Changed: gossipd: revert zombification change, keep all gossip for now. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Alex Myers
parent
aaa14846c6
commit
194d37b70f
@@ -2018,52 +2018,6 @@ u8 *handle_node_announcement(struct routing_state *rstate, const u8 *node_ann,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set zombie flags in gossip_store and tombstone the channel for any
|
|
||||||
* gossip_store consumers. Remove any orphaned node_announcements. */
|
|
||||||
static void zombify_channel(struct routing_state *rstate, struct chan *channel)
|
|
||||||
{
|
|
||||||
struct half_chan *half;
|
|
||||||
assert(!is_chan_zombie(channel));
|
|
||||||
gossip_store_mark_channel_zombie(rstate->gs, &channel->bcast);
|
|
||||||
gossip_store_mark_channel_deleted(rstate->gs, &channel->scid);
|
|
||||||
for (int i = 0; i < 2; i++) {
|
|
||||||
half = &channel->half[i];
|
|
||||||
half->zombie = true;
|
|
||||||
if (half->bcast.index) {
|
|
||||||
gossip_store_mark_cupdate_zombie(rstate->gs, &half->bcast);
|
|
||||||
/* Channel may also have a spam entry */
|
|
||||||
if (half->bcast.index != half->rgraph.index)
|
|
||||||
gossip_store_mark_cupdate_zombie(rstate->gs,
|
|
||||||
&half->rgraph);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
status_debug("Channel %s zombified",
|
|
||||||
type_to_string(tmpctx, struct short_channel_id,
|
|
||||||
&channel->scid));
|
|
||||||
|
|
||||||
/* If one of the nodes has no remaining active channels, forget
|
|
||||||
* the node_announcement. Also recheck node_announcement order. */
|
|
||||||
for (int i = 0; i < 2; i++) {
|
|
||||||
struct node *node = channel->nodes[i];
|
|
||||||
if (node_has_broadcastable_channels(node)) {
|
|
||||||
if (!node->bcast.index)
|
|
||||||
continue;
|
|
||||||
if (node_announce_predates_channels(node)) {
|
|
||||||
/* Make sure the node announcement follows a channel
|
|
||||||
* announcement. */
|
|
||||||
force_node_announce_rexmit(rstate, node);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (node->rgraph.index != node->bcast.index)
|
|
||||||
gossip_store_delete(rstate->gs, &node->rgraph,
|
|
||||||
WIRE_NODE_ANNOUNCEMENT);
|
|
||||||
gossip_store_delete(rstate->gs, &node->bcast,
|
|
||||||
WIRE_NODE_ANNOUNCEMENT);
|
|
||||||
node->rgraph.index = node->bcast.index = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void route_prune(struct routing_state *rstate)
|
void route_prune(struct routing_state *rstate)
|
||||||
{
|
{
|
||||||
u64 now = gossip_time_now(rstate).ts.tv_sec;
|
u64 now = gossip_time_now(rstate).ts.tv_sec;
|
||||||
@@ -2117,12 +2071,10 @@ void route_prune(struct routing_state *rstate)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Any channels missing an update are now considered zombies. They may
|
/* Now free all the chans and maybe even nodes. */
|
||||||
* come back later, in which case the channel_announcement needs to be
|
|
||||||
* stashed away for later use. If all remaining channels for a node are
|
|
||||||
* zombies, the node is zombified too. */
|
|
||||||
for (size_t i = 0; i < tal_count(pruned); i++) {
|
for (size_t i = 0; i < tal_count(pruned); i++) {
|
||||||
zombify_channel(rstate, pruned[i]);
|
remove_channel_from_store(rstate, pruned[i]);
|
||||||
|
free_chan(rstate, pruned[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user