Queue + failing heartbeat + stopping canister = death spiral

hey all,
@nomeata yes, we do not allow heartbeats to run when the canister is in stopping state (GitHub link)

@bob11 I guess it’s not the heartbeat but rather a call inside a callback, which is allowed by the spec:

Note that when processing responses, a stopping canister can make calls to other canisters and thus create new call contexts.

I also agree that falling below a freezing threshold might help, as:

a canister cannot perform calls if that would, due the cost of the call and transferred cycles, would push the balance into frozen territory; these calls fail with ic0.call_perform returning a non-zero error code.

There is an hidden option in dfx which allow to set a freezing threshold:

dfx canister update-settings --freezing-threshold <FREEZING_THRESHOLD>

Could you please try to set it arbitrary high and see if it breaks the death spiral?

2 Likes