Closed
Description
Describe the bug
Each network upgrade has a manifest. This manifest is stored in the blockstore on start-up. The manifests are unreachable from the blockstore and will, therefore, get garbage collected. The missing manifests will cause the next network upgrade to fail.
To reproduce
Run forest
continuously for a week before a network upgrade.
Log output
Log Output
2024-10-23T14:26:48.764982Z ERROR forest_filecoin::chain_sync::tipset_syncer: Syncing tipset range [2078795, 2078905] failed: Validation error: Processing error: Could not update state: manifest for network version NV24 not found in blockstore: bafy2bzaceax5zkysst7vtyup4whdxwzlpnaya3qp34rnoi6gyt4pongps7obw, Processing error: Failed to calculate state: manifest for network version NV24 not found in blockstore: bafy2bzaceax5zkysst7vtyup4whdxwzlpnaya3qp34rnoi6gyt4pongps7obw
Expected behaviour
Manifests should not be garbage collected.
Screenshots
Environment (please complete the following information):
- OS:
- Branch/commit
- Hardware
Other information and links
Option 1 - Blessed column
Have a separate column for Manifest storage. Plug it into the get
that does DbColumn::GraphDagCborBlake2b256 | DbColumn::GraphFull
already. It's an extra read, but only when there is a miss on the above columns.
Pros
- Easy to implement
- Clear separation of concerns in terms of storage.
Cons - negligible
- A little overhead to store manifests in the db.
- Extra read on storage miss when querying the data store, because we need to make sure that the API does not change.
Option 2 - Whitelist
Whitelist certain CIDs to prevent them from being GCed.
Pros
- No need to add an extra column.
Cons
- No separation of concerns.
- The code gets more convoluted.
- Extra checks for each marked record - performance degradation, though not that significant as it's just a simple "if" condition.
Option 3 - On-demand download of manifests before network upgrades
Download bundles as needed X epochs before the upgrade.
Pros
- No permanent extra storage costs.
Cons
- Lots of moving parts, more convoluted codebase.
- Potential problems with downloads/retries.
- Hard to test.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Done