Yea, and that’s fine. That means that the next time this canister’s heartbeat
will be invoked, stable64_pages_left()
will return something close to 0
and the code can react to that by spawning a new canister and maybe by offloading new requests there.
This is exactly what I want. The state stays correct and the dapp can keep scaling.
Do you mean a flow like this?
- Inside your
heartbeat
function check, whether the canister has at least 500MBs of free memory. - If it doesn’t, try to grow additional pages.
- If you can’t grow, execute some other code to scale.
Okay, now I get it. Yes, this is indeed the same, with an exception of you being forced to always pay for 500MBs more than you use. But, I believe that even 10MB will do the job for most cases.
UPD:
In any ways, and API like stable64_pages_left()
is more suitable for this kind of tasks. Especially if it can hint an amount of heap memory left also for those who don’t use stable memory.