superseriousbusiness / gotosocial

Fast, fun, small ActivityPub server.
https://docs.gotosocial.org
GNU Affero General Public License v3.0
3.81k stars 331 forks source link

[bug] Account migration to gts left some accounts stuck in follow requested #3190

Closed kouya closed 1 month ago

kouya commented 3 months ago

Describe the bug with a clear and concise description of what the bug is.

Some accounts after migration from mastodon 4.2.10 to gotosocial 0.16 show up as following on gotosocial but are on follow requested on mastodon's side.

What's your GoToSocial Version?

0.16.0

GoToSocial Arch

amd64 binary

What happened?

I migrated one of my accounts from mastodon 4.2.10 to gotosocial 0.16. There were two issues I noticed. The account had 678 followers, now after several days, 287 are still listed as following the old one and never transferred over. Some of those are normal because dead instances and they already followed the new account manually before. But some genuinely puzzle me, because they should have been moved.

  1. There are about 100 accounts that just "ignored" the move. They are still following the old account and are happily alive and it seems strange they didn't move over at all. None of those have blocked or silenced the old or new server or vice versa as far as I can tell. And most are on software and versions that should normally support migration.

  2. The second problem is more severe. There are accounts that count as following on gts' side but are on "follow requested" on mastodon's side. I have such an account myself, gts thinks it's following it, but on the account's side it is stuck on waiting for some confirmation and it doesn't receive posts from the new account.

Old account migrated from: https://botsin.space/@fennecbot New account moved to: https://icy.arcticfluff.eu/@fennecbot

This one https://botsin.space/@arcticfoxbot followed the old account and is now in that "limbo". Gts thinks it's following it, but the server it's running on is waiting for something.

I don't have too many logs from gts I could look into, I have all webserver access logs on the gts side from the day but it's a lot of noise in there. I can look up things in there if needed, just tell me what requests I should look up.

I'm also a little lost where the problem actually is, on gotosocial's or mastodon's side. Would also be interested if there is something that can be done (manually, hacky, etc) to fix it so that the instances from problem 2 will update their status to following.

What you expected to happen?

No response

How to reproduce it?

No response

Anything else we need to know?

No response

tsmethurst commented 3 months ago

Hmm. So the way the Move ought to have worked is that you trigger the move from your Mastodon account, and your Mastodon instance then sends out the Move to all followers of your Mastodon account. Each follower notified in this way should then send a Follow to the GoToSocial account that's been moved to, and unfollow your Mastodon account.

So, if there are still followers of your Mastodon account (as in point 1), that suggests that they either didn't receive the Move message at all, or they received the message and ignored it for whatever reason, or they received the message and tried to follow your new account but couldn't for some reason.

This is likely not a GoToSocial issue per se, although it could be the case that all the sudden incoming requests to your GoToSocial instance triggered rate limiting. You could possibly check this by looking for statusCode=429 in your logs. You can also check that your GtS instance is configured properly by checking the clientIP field of log messages. If every log message shows exactly the same client IP, then your GtS instance is misconfigured and is therefore vastly more likely to trigger rate limiting. Could you do those checks?

For point 2, it sounds like GoToSocial didn't succeed in sending out Accept messages in response to the Follow messages coming from those accounts, or it send out the Accept messages but the receiving instances dropped them. I'm not sure why this might have happened. It's possible that this is a GoToSocial issue, but it's unclear.

One thing you could do here would be to just retry the move from Mastodon to your GtS account. I think you can just do this in the Mastodon settings panel, but I'm not sure. If that doesn't work, I'd say try again in one week's time, since GoToSocial has an internal cooldown of 7 days before processing Move activities again.

kouya commented 3 months ago

Hiya, thanks for the reply :3

Point 1 is something that always happened to migrations I did between mastodon(s) and never really can tell why. The old server is also pretty overloaded most of the time, so I have no idea if that contributed to the whole problem. The second one is a bit meh that it happened and would like to figure out why before I move the second account.

The proxy config, it's running behind apache, should be correct as far as I can tell. I also disabled the rate limiting before the move just in case. I just checked gts' log and it sees different clientIPs instead of my proxy's. The config is pretty much defaults except for posting limits.

There are a few 429s in the webserver log, but it's all my own IP and a few servers from where lot of followers are and from before I initiated the move. I would assume the other servers will retry though?

Sadly I don't have access to the mastodon server's command line and mastodon only ever allows a move to a certain domain once. After that you only get the error "already migrated to that", which is a bit dumb. I could ask their admin if it can be repeated maybe, but I'm unsure if it will fix the situation? From how it looks like the state is, on the follower side: unfollowed old, requested follow new but still waiting for confirmation. My server's side: they follow me already. So the old server has no more relationship to it and won't be able to tell it to retry.

I feel that's a "corner case" in the protocol that this can happen? New server thinks they follow, the follower server still waiting? (Although I think that's also a privacy issue that a server won't always see that.) But I admit I don't know how the protocol works exactly and what failsaves/retries are involved.

Would it help to identify an issue from looking into more detailed logs of gts? I can configure a different log level and retry the move if the old admin can help me. Right now I have it set to error because it generated a lot of logs with the defaults. I assume I'd need debug to make it possible to trace whether the Accept messages were sent correctly or would Info be enough?

Also sorry if this isn't exactly a bug report able to pinpoint something but more of a support request with possible issue, but the whole underlying problem kinda eludes me. For now.

tsmethurst commented 3 months ago

The proxy config, it's running behind apache, should be correct as far as I can tell. I also disabled the rate limiting before the move just in case. I just checked gts' log and it sees different clientIPs instead of my proxy's. The config is pretty much defaults except for posting limits.

Alright, that's good :+1:

I feel that's a "corner case" in the protocol that this can happen?

I don't think it's really a protocol issue, more likely to be a network issue or something like that. But it would be nice to be able to tell those accounts to send their follows again so that your GtS server can accept them again. That was basically my thinking with retrying the move, I'm quite surprised Mastodon doesn't have that option (always thought it did, for some reason).

Would it help to identify an issue from looking into more detailed logs of gts?

Possibly... If you could browse logs during a migration and check for any error messages popping up that would be helpful. You could even go poring through logs from the time of the move and look for "error" or "ERROR" and see if anything suspicious presents itself.

Also sorry if this isn't exactly a bug report able to pinpoint something but more of a support request with possible issue, but the whole underlying problem kinda eludes me. For now.

No worries.

kouya commented 2 months ago

So, we've moved another account and have info level logs for it. I feel not much came out of it. For the not moved at all accounts, it feels those servers never were contacted by the original one, but I have no means to analyze that further. Also retrying the migration with the help of their admin moved a few more, just like I remembered it from earlier moves. I blame that one on mastodon.

And yes mastodon has that option to repeat it to the same target, but you need to use the command line tootctl it seems.

Would it help to identify an issue from looking into more detailed logs of gts?

Possibly... If you could browse logs during a migration and check for any error messages popping up that would be helpful. You could even go poring through logs from the time of the move and look for "error" or "ERROR" and see if anything suspicious presents itself.

From taking apart the logs for the follow request stuck issue, we didn't really find anything useful. Only log level error ones I could find were messages about `account has been deleted/is gone\n".

Otherwise: "the one with "pending request" looks identical to the one that followed normally. The people still following old bot never sent follow request to gts."

But I'm out of ideas what to look for further. I would close the issue unless you have something you want to know from the logs I have, but would need to know what I should look for. Or feel free to close it as well :3

tsmethurst commented 1 month ago

I'm gonna close this I think, as you mentioned, but if any others run into issues in this regard we can reopen this issue and investigate in more depth.