@@ -1419,10 +1419,12 @@ struct gossmap *gossmap_manage_get_gossmap(struct gossmap_manage *gm)
1419
1419
written_len = gossip_store_len_written (gm -> gs );
1420
1420
1421
1421
if (map_size != written_len ) {
1422
- status_broken ("gossmap size %" PRIu64 " != written size %" PRIu64 ,
1423
- map_size , written_len );
1424
- /* Push harder! */
1425
- gossip_store_fsync (gm -> gs );
1422
+ status_broken ("gossmap size %" PRIu64 " != written size %" PRIu64
1423
+ ": %s mmap!" ,
1424
+ map_size , written_len ,
1425
+ gossmap_has_mmap (gm -> raw_gossmap )
1426
+ ? "disabling" : "ALREADY DISABLED" );
1427
+ gossmap_disable_mmap (gm -> raw_gossmap );
1426
1428
gossmap_refresh (gm -> raw_gossmap );
1427
1429
1428
1430
/* Sanity check that we see everything we wrote. */
@@ -1443,12 +1445,22 @@ struct gossmap *gossmap_manage_get_gossmap(struct gossmap_manage *gm)
1443
1445
remainder_fd = fetch_tail_fd (tmpctx ,
1444
1446
gossmap_fd (gm -> raw_gossmap ),
1445
1447
map_used , map_size );
1446
- status_failed (STATUS_FAIL_INTERNAL_ERROR ,
1447
- "Gossmap failed to process entire gossip_store: "
1448
+ status_broken ("Gossmap failed to process entire gossip_store, %s mmap: "
1448
1449
"at %" PRIu64 " of %" PRIu64 " remaining_mmap=%s remaining_fd=%s" ,
1450
+ gossmap_has_mmap (gm -> raw_gossmap )
1451
+ ? "disabling" : "ALREADY DISABLED" ,
1449
1452
map_used , map_size ,
1450
1453
tal_hex (tmpctx , remainder_mmap ),
1451
1454
tal_hex (tmpctx , remainder_fd ));
1455
+ gossmap_disable_mmap (gm -> raw_gossmap );
1456
+ gossmap_refresh (gm -> raw_gossmap );
1457
+
1458
+ map_used = gossmap_lengths (gm -> raw_gossmap , & map_size );
1459
+ if (map_size != map_used ) {
1460
+ status_failed (STATUS_FAIL_INTERNAL_ERROR ,
1461
+ "Gossmap map_used %" PRIu64 " of %" PRIu64 " with %" PRIu64 " written" ,
1462
+ map_used , map_size , written_len );
1463
+ }
1452
1464
}
1453
1465
1454
1466
return gm -> raw_gossmap ;
0 commit comments