Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Move more federation APIs to workers #3653

Merged
merged 13 commits into from
Aug 15, 2018
Merged

Conversation

erikjohnston
Copy link
Member

Based on #3632

This brings the full list of APIs that can be handled on federation_reader to be:

/send/:txn_id/
/event/:event_id/
/state/:room_id/
/state_ids/:room_id/
/backfill/:room_id/
/query/:query_type
/make_join/:room_id/:user_id
/make_leave/:room_id/:user_id
/event/:event_id/
/send_join/:room_id/:event_id
/send_leave/:room_id/:txn_id
/invite/:room_id/:event_id
/query_auth/:room_id/:event_id
/get_missing_events/:room_id/?
/event_auth/:room_id/:event_id
/exchange_third_party_invite/:room_id

@erikjohnston erikjohnston self-assigned this Aug 6, 2018
@turt2live
Copy link
Member

🎉 THANK YOU

(how angry does this get if you have 2+ readers, and receive transactions from the same homeserver on each reader?)

@erikjohnston
Copy link
Member Author

(how angry does this get if you have 2+ readers, and receive transactions from the same homeserver on each reader?)

It's not something I would necessarily recommend.

@turt2live
Copy link
Member

That's fair. In a 2+ reader environment, I'm assuming the expectation is that /send and other write APIs hit the same reader? Given the insane volume of inbound traffic on my end, it'd be nice to have several readers for things.

Would be nice to have the recommendation documented in workers.rst :)

@erikjohnston erikjohnston requested a review from a team August 9, 2018 09:52
@erikjohnston erikjohnston removed their assignment Aug 9, 2018
Copy link
Member

@richvdh richvdh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't been through everything to check what this is going to break; will have to take your word on that.

Looks pretty sane modulo a few quibbles.

len(event_and_contexts),
)

max_stream_id = yield self.store.persist_events(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

duplicating all this code from FederationHandler feels like a certain path to things getting out of sync. Can we not call the FederationHandler code here?


prep_send_transaction = DataStore.prep_send_transaction.__func__
delivered_txn = DataStore.delivered_txn.__func__
class TransactionStore(TransactionStore, BaseSlavedStore):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh god. TransactionStore inherits from TransactionStore ? I can see this is a pre-existing horridness, but ... ugh. Shouldn't this be a SlavedTransactionStore?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[indeed if it can inherit the whole of synapse.storage.transactions.TransactionStore, can't it just be replaced with that?]

Copy link
Member Author

@erikjohnston erikjohnston Aug 15, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh good god, I had completely missed that.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we want to make sure they still inherit from BaseSlavedStore, though it might be simpler to just ensure that happens when we construct them in synapse/app/*. I'll leave it as a SlavedTransactionStore as we do that quite a bit for the other stores, and we can change it separately.

Copy link
Member

@richvdh richvdh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@erikjohnston
Copy link
Member Author

@matrixbot retest this please

@erikjohnston erikjohnston merged commit dc56c47 into develop Aug 15, 2018
richvdh added a commit that referenced this pull request Aug 22, 2018
Features
--------

- Add support for the SNI extension to federation TLS connections. Thanks to @vojeroen! ([\#3439](#3439))
- Add /_media/r0/config ([\#3184](#3184))
- speed up /members API and add `at` and `membership` params as per MSC1227 ([\#3568](#3568))
- implement `summary` block in /sync response as per MSC688 ([\#3574](#3574))
- Add lazy-loading support to /messages as per MSC1227 ([\#3589](#3589))
- Add ability to limit number of monthly active users on the server ([\#3633](#3633))
- Support more federation endpoints on workers ([\#3653](#3653))
- Basic support for room versioning ([\#3654](#3654))
- Ability to disable client/server Synapse via conf toggle ([\#3655](#3655))
- Ability to whitelist specific threepids against monthly active user limiting ([\#3662](#3662))
- Add some metrics for the appservice and federation event sending loops ([\#3664](#3664))
- Where server is disabled, block ability for locked out users to read new messages ([\#3670](#3670))
- set admin uri via config, to be used in error messages where the user should contact the administrator ([\#3687](#3687))
- Synapse's presence functionality can now be disabled with the "use_presence" configuration option. ([\#3694](#3694))
- For resource limit blocked users, prevent writing into rooms ([\#3708](#3708))

Bugfixes
--------

- Fix occasional glitches in the synapse_event_persisted_position metric ([\#3658](#3658))
- Fix bug on deleting 3pid when using identity servers that don't support unbind API ([\#3661](#3661))
- Make the tests pass on Twisted < 18.7.0 ([\#3676](#3676))
- Don’t ship recaptcha_ajax.js, use it directly from Google ([\#3677](#3677))
- Fixes test_reap_monthly_active_users so it passes under postgres ([\#3681](#3681))
- Fix mau blocking calulation bug on login ([\#3689](#3689))
- Fix missing yield in synapse.storage.monthly_active_users.initialise_reserved_users ([\#3692](#3692))
- Improve HTTP request logging to include all requests ([\#3700](#3700))
- Avoid timing out requests while we are streaming back the response ([\#3701](#3701))
- Support more federation endpoints on workers ([\#3705](#3705), [\#3713](#3713))
- Fix "Starting db txn 'get_all_updated_receipts' from sentinel context" warning ([\#3710](#3710))
- Fix bug where `state_cache` cache factor ignored environment variables ([\#3719](#3719))
- Fix bug in v0.33.3rc1 which caused infinite loops and OOMs ([\#3723](#3723))
- Fix bug introduced in v0.33.3rc1 which made the ToS give a 500 error ([\#3732](#3732))

Deprecations and Removals
-------------------------

- The Shared-Secret registration method of the legacy v1/register REST endpoint has been removed. For a replacement, please see [the admin/register API documentation](https://github.com/matrix-org/synapse/blob/master/docs/admin_api/register_api.rst). ([\#3703](#3703))

Internal Changes
----------------

- The test suite now can run under PostgreSQL. ([\#3423](#3423))
- Refactor HTTP replication endpoints to reduce code duplication ([\#3632](#3632))
- Tests now correctly execute on Python 3. ([\#3647](#3647))
- Sytests can now be run inside a Docker container. ([\#3660](#3660))
- Port over enough to Python 3 to allow the sytests to start. ([\#3668](#3668))
- Update docker base image from alpine 3.7 to 3.8. ([\#3669](#3669))
- Rename synapse.util.async to synapse.util.async_helpers to mitigate async becoming a keyword on Python 3.7. ([\#3678](#3678))
- Synapse's tests are now formatted with the black autoformatter. ([\#3679](#3679))
- Implemented a new testing base class to reduce test boilerplate. ([\#3684](#3684))
- Rename MAU prometheus metrics ([\#3690](#3690))
- add new error type ResourceLimit ([\#3707](#3707))
- Logcontexts for replication command handlers ([\#3709](#3709))
- Update admin register API documentation to reference a real user ID. ([\#3712](#3712))
@erikjohnston erikjohnston deleted the erikj/split_federation branch September 20, 2018 13:57
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants