mirror of
https://codeberg.org/forgejo/docs.git
synced 2024-12-01 19:17:12 -05:00
98dac9cb1f
Preview: * https://forgejo.codeberg.page/@docs_pull_639/docs/next/developer/federation-architecture/ * https://forgejo.codeberg.page/@docs_pull_639/docs/next/developer/threat-analysis/ * https://forgejo.codeberg.page/@docs_pull_639/docs/next/developer/adr/ Co-authored-by: patdyn <erik.seiert@meissa-gmbh.de> Co-authored-by: Clemens <clemens.geibel@meissa-gmbh.de.de> Reviewed-on: https://codeberg.org/forgejo/docs/pulls/639 Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org> Reviewed-by: Panagiotis "Ivory" Vasilopoulos <git@n0toose.net> Co-authored-by: Michael Jerger <michael.jerger@meissa-gmbh.de> Co-committed-by: Michael Jerger <michael.jerger@meissa-gmbh.de>
3.6 KiB
3.6 KiB
title | license |
---|---|
ADR: Trigger Activities | CC-BY-SA-4.0 |
How to Trigger Activities
Status
Proposal
Context
While implementing the trigger of federated stars we have to handle the distribution of corresponding Like-Activities to the federated repositories.
This must be done consistently and without circularity, such that a repository starring by a user leads to exactly one added star in every federated repository.
Decision
Choices
1. Transient Federation without Constraints
In this case the star federation process would look like:
- Repo on an instance receives a star (regardless of whether via UI or federation)
- Instance federates star to all repos that are set as federated repositories.
Problem - Circularity And Inconsistency
Circular federation would lead to a infinite circular distribution of Like-Activities:
- Given a repo on the 3 instances A, B, C.
Repo on instance A has set repo on instance B as federation repo.
Repo on instance B has set repo on instance C as federation repo.
Repo on instance C has set repo on instance A as federation repo. - User stars repo on instance A via UI.
- Instance A sends Like-Activity to repo on instance B.
- Instance B creates local FederatedUser, stars the repo and sends Like-Activity to repo on instance C.
- Instance C creates local FederatedUser, stars the repo and sends Like-Activity to repo on instance A.
- Instance A creates local FederatedUser, since the Actor of the Like-Activity is the local FederatedUser created on instance C.
Thus, the repo on instance A gets another star by this user and sends Like-Activity to the repo on instance C. - The circular distribution of Like-Activities continues, since the actor is always the local FederatedUser of the sending instance.
2. Direct Federation only
In this case the star federation process would look like:
- Case: Repo on an instance receives a star by an authenticated user via UI/API:
- Repository gets starred by the authenticated User.
- Instance federates star to all repos that are set as federated repositories.
- Case: Repo on an instance receives a star via a Like-Activity:
- Instance creates FederatedUser and stars the repository.
- No further star federation to federated repos is triggered.
Discussion for option 2.
- pro
- Prevent circular communication
- Clear semantic also in case of "Who should authorize a digital signature"
3. Transient Federation and Remember Processed
In this case the star federation process would look like:
- Repo on an instance receives a star (regardless of whether via UI or federation)
- If this activity was not operated already in this instance, federate star to all repos that are set as federated repositories.