Background:
Mastodon is a federated system, which achieves a social network similar to Twitter.
It works by pushing a status of a user to his followers, which appears at four places:
- The user's timeline
- The timeline of their followers
- The local timeline of the user's instance
- The public timeline of other instances, which get the status
The last point is the interesting one: An instance sees the status, if at least one of its users follows the user posting the status, so the user's instance pushes the status to the other instances.
This kind of pubsub system works quite fine for posting status, which are received by followers usually a few seconds after publishing, sometimes after some output queue is emptied.
My question is now about pushing a delete-message for a status. The problem there is, that this message MUST reach all instances, which were reached by the original status and from how the system works I have doubts if it can guarantee that the delete-message will always reach all systems.
My question below is about the possible failure cases I can imagine.
How does deleting a toot on mastodon actually work, or does it work reliably at all?
I know, that in theory deleting a toot sends a delete message to other instances, so they delete it. Let's put malicious sites which ignore the request aside, then there are still a few problems.
How are the instances chosen? When I had exactly one follower from Instance X when I posted the toot and he unfollowed me before I deleted it, will his instance still get the delete message?
Or more technically: Does the toot store the list of instances it were sent to at post time, so mastodon knows where to send delete messages to later on?
What about boosts? When the User at X boosted my toot (maybe follower only), can I be sure that I know all instances which got the toot via the boost, or that Instance X will relay my delete message to these instances?
What happens, when instance X has a week downtime when I delete my toot? How long is the delete message queued on instance? Instance X could be abandoned, so my instance cannot wait longer than a certain waiting time.
To me it looks like deleting is (or will in near future when there are more instances and a more complicated web between them) futile, as there are so many possiblities how the delete message may be lost or not sent to the correct instances.
So how does (reliable) deletion work on mastodon and is it that fragile or are there precautions to make sure that it works even in these possibly complicated situations?