Subnet - side effects of Bob

Since Bob’s launch, my canister (and possibly others) on the European Subnet is no longer able to download files, such as a 500 KB or more file, from the canister.

Feel free to login and upload an image and test it out.

3 Likes
  1. I cannot access my profile unless I am a member. Is there a way for me to become a member?
  2. Do you see any specific errors when you upload?

Hey, Yes, If you login with your Internet Identity should become a member automatically.

Only 1,9 KB can be loaded from the canister.

1 Like

I’m still unable to though I did sign in using II.

I will refer to the team and hopefully, we can look into it more.

Yes this error happens by creating a profile, a random id is created and that needs compute power I think, If you refresh the page then you should see the member section.

1 Like

We have also other canisters on the European Subnet:

dfx canister call 4dxy4-4aaaa-aaaas-aabgq-cai getMailLogSize --ic

Error: Failed update call.
Caused by: The replica returned a rejection error: reject code SysTransient, reject message Ingress message 0x04589b452dbb2c64cb11e282053d132dcb0855088f404e9040459a6721601561 timed out waiting to start executing., error code None

For the public case you should see an unauthorized error, because you are not the creator of the canister.

Managed to login after 4 or 5 tries with refresh + authorize again but it gets stuck in limbo as can be seen in the screenshot.


1 Like

In my observation, all public shared functions I use in Motoko are affected, while simple query functions are working.

Check the network tab, and you will see how often the ‘read state’ is called.

But know it seems to work from time to time ??

Another example is this query (If you call this you get an unauthorized error was would be ok):

dfx canister call 4dxy4-4aaaa-aaaas-aabgq-cai getMailLogSize --ic

Error: Failed update call.
Caused by: The replica returned a rejection error: reject code SysTransient, reject message Ingress message 0xed3ed073f287c20a72efbac3422b74f1d7bd4e0d2acd4f5e5a4df941d682cfe5 timed out waiting to start executing., error code None

@rbole There’s a lot of contention for compute on that subnet now, so it’s not surprising that messages are timing out if you haven’t reserved some compute allocation on your canisters.

So you could try setting the compute allocation, but also if you’re just trying to read data from your canister without modifying the state have you considered using query calls instead? They would be cheaper and less likely to fail from the contention on the subnet.

3 Likes

Hey @abk, yes, I have now set the compute allocation to 1, and it works slowly. It takes roughly 30 seconds to display the profile image.

I need the caller for reading, so I have to use a public shared function in Motoko. Yes, it’s true that a simple query works much better under the current circumstances.

In my example the “check backend identifier” function works as expected, it is a query function.

1 Like

Yes, a compute allocation of 1 would only guarantee the canister runs every 1/100 rounds, so I would still expect that calls might take a minute.

1 Like

Where can I find information about these rounds and how compute allocation works from an application developer’s perspective, to learn more ?

1 Like

A round is just the same as a block. General info is here: Overview of ICP | Internet Computer. You can see on the dashboard what the block rate of each subnet currently is and that tells you how long each round takes. Most are around 1.3 blocks per second, so that means each round is taking less than a second.

As for the specifics of compute allocation, I’m not sure if we have a better description than my link above, but basically if you set the allocation to X% then that means your canister will be running first every X/100 rounds.

2 Likes

More observations
I changed my public shared functions to public shared query functions wherever possible. This change allows uploaded images to load much faster, I think with normal speed.

However, when a public shared function is still required, the process can be quite slow, and sometimes it results in a timeout.

This occurs even with simple functions, such as one that changes the username. Additionally, after login, a public shared function is called to check if a user profile exists; if it doesn’t, a new one is created, resulting in a state change.

The result is that new users are unable to log in.

Increasing the compute allocation to 1% is not a sustainable long-term solution due to the cost of $1.20 per day, and it does not lead to a faster response from the users point of view. Additionally, it seems there must be a minimum balance of more than 25T cycles to maintain the system effectively.

In my case, I had approx. 25.9T cycles, yet after half a day, an ‘out of balance’ message blocked the execution of the query. This suggests that significantly more cycles are required to keep the canister running smoothly, or the minimum required balance is greater than 25T cycles.

2 Likes

More observations
Currently, it is not possible to reliably update an asset canister on the European Subnet; it’s a gamble if it works or not. :roll_eyes: Although the transaction rate of 400-500 TX/s is lower than in recent days.

Uploading assets to asset canister…
Fetching properties for all assets in the canister.
Starting batch.
Error: Failed while trying to deploy canisters.
Caused by: Failed while trying to install all canisters.
Caused by: Failed to install wasm module to canister ‘samlinux.at’.
Caused by: Failed to store assets in canister ‘samlinux.at’.
Caused by: Failed asset sync with canister tztfe-caaaa-aaaas-aaacq-cai.
Caused by: Failed to create batch: The replica returned a rejection error: reject code SysTransient, reject message Ingress message 0xbd8eea9a56180b5e6fed81ab6b822721be8e1b6999f7cac2569c3318b9cfc794 timed out waiting to start executing., error code None

1 Like

Here is a simple example to demonstrate my problem:

The example demonstrates two functions: one is a public shared function to store a value, and the other is a public shared query function to retrieve the value. Both functions work as expected locally. However, after deployment to the European Subnet, storing the value is not possible.

While querying the value works as expected.

It cannot be that even a simple string cannot be stored at the moment. Maybe I misunderstood and did something fundamentally wrong, the source code is also linked.

1 Like

You can try it also with the candid ui canister, same result. An update call is not possible ?? :thinking:

https://a4gq6-oaaaa-aaaab-qaa4q-cai.raw.icp0.io/?id=hnonl-haaaa-aaaas-ajw4q-cai

Who can help or is the European subnet no longer usable for a normal canister?

I am looking into this and will circle up.

1 Like