I’ve been on Lemmy for some time now and it’s time for me to finally understand how Federation works. I have general idea and I have accounts on three federated instances, but I need some details.

Let Alpha, Beta, Gamma and Delta be four federated instances. I have an account on Alpha and create a post in a community on Beta. A persoson from Gamma comments on it and a person from Delta upvotes the post and the comment.

The question: On which instances are the post, the comment and the upvotes stored?

  • skankhunt42@lemmy.ca
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    Is there a single source of truth? It really sounds like split brain is possible?

    All instances may have their own copy but I imagine the community the instance was posted on is important and need to be up?

    • r00ty@kbin.life
      link
      fedilink
      arrow-up
      4
      ·
      edit-2
      1 year ago

      Well, the answer is “it depends”

      For the community as a whole, I would say that the instance that hosts the community must be up to federate any new posts to other instances. Because it works a bit like:

      Instance A hosts Community 01.
      Instance B user posts to Community 01.
      Instance B federates the post to Instance A
      Instance A federates the post to Instances C, and D.

      So, if instance A is down, the post will exist only on instance B.

      But, federating the posts and comments themselves is not the only way an instance will get posts and comments. Consider the following situation. The post above exists on instances A-D. But after it is posted, Instance E subscribes to the community. Instance E will not have the above post. They will only start getting new federation events.

      However, say for example someone on instance C likes the post? The like event will be sent to Instance E. Instance E will see the like, try to find the post (the post/comment URL is included in the like event) and fail. So, it will then look up the original post. Here’s where it gets interesting. That URL will not be on Instance A where the community lives, but on Instance B where it was posted. So, in this case, if Instance B is down, Instance E will not be able to fetch the post.

      However, if all the instances are up, Instance E will get the post add the like and add to database. This is why when subscribing to instances you will get some old content appear but not all. Because if the old content is interacted with, it will be fetched to render the interactions.

      This understanding is based on my understanding of kbin federation. But, I would be very surprised if lemmy did not work the same.

      EDIT:

      To be clear, to see what already is federated no other instances except the one you’re visiting need to be up. For federation of live events happening to a community, the instance hosting the community must be up and to fetch content needed for a federation event (for which the referenced object was not received via federation), the instance the content was created must be up.