From 57b38cac71a4ed70d6123345338bebbda2ea734a Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 11 Apr 2018 08:33:36 +0930 Subject: [PATCH] gossip_store: empty, don't truncate, on error. Christian points out that we don't get spend notifications for old channels if we truncate the store. We'd need more work to do this, either validating the channels are still unspent, or replaying old blocks from the truncation point. Signed-off-by: Rusty Russell --- gossipd/gossip_store.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gossipd/gossip_store.c b/gossipd/gossip_store.c index d538cf4a3..f96002d67 100644 --- a/gossipd/gossip_store.c +++ b/gossipd/gossip_store.c @@ -174,9 +174,13 @@ void gossip_store_load(struct routing_state *rstate, struct gossip_store *gs) truncate: status_unusual("gossip_store: %s (%s) truncating to %"PRIu64, - bad, tal_hex(msg, msg), (u64)known_good); + bad, tal_hex(msg, msg), (u64)1); truncate_nomsg: - if (ftruncate(gs->fd, known_good) != 0) + /* FIXME: We would like to truncate to known_good, except we would + * miss channel_delete msgs. If we put block numbers into the store + * as we process them, we can know how far we need to roll back if we + * truncate the store */ + if (ftruncate(gs->fd, 1) != 0) status_failed(STATUS_FAIL_INTERNAL_ERROR, "Truncating store: %s", strerror(errno)); out: