diff --git a/ledger/src/bank_forks_utils.rs b/ledger/src/bank_forks_utils.rs index b14d9facdd4c19..cc5b196b39f454 100644 --- a/ledger/src/bank_forks_utils.rs +++ b/ledger/src/bank_forks_utils.rs @@ -337,6 +337,15 @@ fn bank_forks_from_snapshot( source: err, path: bank_snapshot.snapshot_path(), })?; + + // If the node crashes before taking the next bank snapshot, the next startup will attempt + // to load from the same bank snapshot again. And if `shrink` has run, the account storage + // files that are hard linked in bank snapshot will be *different* than what the bank + // snapshot expects. This would cause the node to crash again. To prevent that, purge all + // the bank snapshots here. In the above scenario, this will cause the node to load from a + // snapshot archive next time, which is safe. + snapshot_utils::purge_old_bank_snapshots(&snapshot_config.bank_snapshots_dir, 0, None); + bank };