-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Add helper base class for generating new replication endpoints #3632
Conversation
This will hopefully reduce the boiler plate required to implement new internal HTTP requests.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not entirely happy with the cleverness going on here, because it will make clicking through to implementations, type inference, etc not work properly.
Nevertheless it looks plausible modulo some nitpicking.
synapse/replication/http/_base.py
Outdated
if e.code != 504 or not cls.RETRY_ON_TIMEOUT: | ||
raise | ||
|
||
logger.warn("send_federation_events_to_master request timed out") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could maybe use cls.NAME
instead of send_federation_events_to_master
Returns: | ||
Deferred | ||
class ReplicationRemoteJoinRestServlet(ReplicationEndpoint): | ||
"""Does a remote join for the given user to the given room |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please could you document the format of the URI - particularly since it seems to be changing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(ditto below)
synapse/replication/http/_base.py
Outdated
PATH_ARGS (tuple[str]): A list of parameters to be added to the path. | ||
Adding parameters to the path (rather than payload) can make it | ||
easier to follow along in the log files. | ||
POST (bool): True to use POST request with JSON body, or false to use |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can we have METHOD (set to one of POST/GET/PUT etc) instead?
synapse/replication/http/_base.py
Outdated
http_server.register_paths(method, [pattern], handler) | ||
|
||
def _cached_handler(self, request, txn_id, **kwargs): | ||
"""Wraps `_handle_request` the responses should be cached. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
does whatnow?
Yeah, I'm not entirely happy about it either, but I think its the step in the right direction in terms of avoiding explosions of custom implemented replication endpoints. I had a quick play around trying to get some better click through/docs in vscode, but haven't had much luck (it doesn't seem to like inherited staticmethods....) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can haz some words in the changelog pls?
otherwise lgtm.
synapse/replication/http/_base.py
Outdated
@@ -190,7 +190,9 @@ def register(self, http_server): | |||
http_server.register_paths(method, [pattern], handler) | |||
|
|||
def _cached_handler(self, request, txn_id, **kwargs): | |||
"""Wraps `_handle_request` the responses should be cached. | |||
"""Called on new incoming requests when caching is enabled. Checks | |||
if their is a cached response for the request and returns that, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there
synapse/replication/http/_base.py
Outdated
@@ -174,8 +185,7 @@ def register(self, http_server): | |||
url_args = list(self.PATH_ARGS) | |||
method = "GET" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is dead
synapse/replication/http/_base.py
Outdated
|
||
def _cached_handler(self, request, txn_id, **kwargs): | ||
"""Called on new incoming requests when caching is enabled. Checks | ||
if their is a cached response for the request and returns that, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
their
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))
This will hopefully reduce the boiler plate required to implement new
internal HTTP requests.