SNS canister upgrade executed, but the canister wasn't upgraded

Hi everyone,

I’m running into a tricky issue with an SNS-managed canister upgrade and require help with it

The upgrade was initiated via the SNS and reported as executed. However, the actual canister logic was not upgraded. It seems the canister rolled back silently. Unfortunately, no logs were retained from the failed upgrade attempt, which makes it difficult to understand what went wrong

I’ve written and run migration tests using PocketIc, and all of them pass consistently. This makes the issue even more puzzling, because everything behaves as expected in test environments, but fails mysteriously on the IC

Here is the related issue (just adding some context):

So the canister upgrade is a fix for the problem

Has anyone encountered something similar before? Are there any failure modes or debugging strategies for SNS-managed upgrades when no logs are available?

Any guidance or suggestions are greatly appreciated!
Thanks in advance

Hi @VictoriaGrasshopper

It can indeed be hard to debug failed SNS-controlled canister upgrades in production. But could you share the canister IDs / SNS name in question, please?

May I ask also, what tool did you use to submit the respective canister upgrade proposals?

1 Like

Thanks for following up!

We resolved the issue by making the logs public, which revealed that the problem was in the migration code itself. That helped us identify and fix it quickly.

That said, I understand why logs are hidden by default, exposing them publicly can introduce risks. However, for SNS-controlled canisters, we really miss the ability to grant developers access to logs without needing to add them as canister controllers, as that could lower community trust :grinning_face_with_smiling_eyes:

Regarding your question, the upgrade proposal was submitted via the pipeline using Quill.

Thanks for the feedback, let’s see how soon we get around to prioritize improving this (it is on our radar).

2 Likes