You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
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
Expected behaviour
Manifests should not be garbage collected.
Screenshots
Environment (please complete the following information):
Other information and links
Option 1 - Blessed column
Have a separate column for Manifest storage. Plug it into the
get
that doesDbColumn::GraphDagCborBlake2b256 | DbColumn::GraphFull
already. It's an extra read, but only when there is a miss on the above columns.Pros
Cons - negligible
Option 2 - Whitelist
Whitelist certain CIDs to prevent them from being GCed.
Pros
Cons
Option 3 - On-demand download of manifests before network upgrades
Download bundles as needed X epochs before the upgrade.
Pros
Cons
The text was updated successfully, but these errors were encountered: