Motivation
Deploying the https://js.icp.build documentation hit the execution limit today:
deno task juno config apply --force --mode production
Task juno juno "config" "apply" "--force" "--mode" "production"
- Loading configuration...
- Configuring...
The configuration failed with 1 error 😢.
0: The replica returned a rejection error:
Request ID: 4cca80fb89e12f800dc93b95f65ae29032c91d8c4d4b5baf7778119852bdbc18
Reject code: 5
Reject text: Error from Canister bmsnr-hiaaa-aaaal-ask2q-cai: Canister exceeded the limit of 40000000000 instructions for single message execution..
Try optimizing this method to consume fewer instructions or split the work across multiple messages. See documentation: https://internetcomputer.org/docs/current/references/execution-errors#instruction-limit-exceeded
Error code: IC0522
They have 8,000 assets
✔ 8284 files uploaded (total: 1,171.667 MB)
🚀 Deploy complete!
So, the root cause of the issues is the numbers of assets and the implementation which requires going though all assets to recalculate the hash tree.
See:
|
fn init_certified_assets_impl(state: &State) { |
Possible Solutions
-
Improve the certification code
-
Add an option to juno config apply for the storage without recalculating the assets tree - just modifying the config on the heap and working around by upgrading the Satellite because post_upgrade - which also calls the certification - has a higher execution limit of 300B instructions limit. Though currently I use a set_timer to call this so likely hit the same issue.
-
Way better ideas welcome
Motivation
Deploying the https://js.icp.build documentation hit the execution limit today:
They have 8,000 assets
So, the root cause of the issues is the numbers of assets and the implementation which requires going though all assets to recalculate the hash tree.
See:
juno/src/libs/satellite/src/assets/storage/certified_assets/runtime.rs
Line 12 in ca9405a
Possible Solutions
Improve the certification code
Add an option to
juno config applyfor the storage without recalculating the assets tree - just modifying the config on the heap and working around by upgrading the Satellite becausepost_upgrade- which also calls the certification - has a higher execution limit of 300B instructions limit. Though currently I use a set_timer to call this so likely hit the same issue.Way better ideas welcome