Long story short: if we're handling presence on the current worker, we shouldn't be sending USER_SYNC commands over replication.
In an attempt to figure out what is going on here, I ended up refactoring some bits of the presencehandler code, so the first 4 commits here are non-functional refactors to move this code slightly closer to sanity. (There's still plenty to do here :/). Suggest reviewing individual commits.
Fixes (I hope) #7257.
Adds a request_token_inhibit_errors configuration flag (disabled by
default) which, if enabled, change the behaviour of all /requestToken
endpoints so that they return a 200 and a fake sid if the 3PID was/was
not found associated with an account (depending on the endpoint),
instead of an error.
Co-Authored-By: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com>
* Remove `conn_id` usage for UserSyncCommand.
Each tcp replication connection is assigned a "conn_id", which is used
to give an ID to a remotely connected worker. In a redis world, there
will no longer be a one to one mapping between connection and instance,
so instead we need to replace such usages with an ID generated by the
remote instances and included in the replicaiton commands.
This really only effects UserSyncCommand.
* Add CLEAR_USER_SYNCS command that is sent on shutdown.
This should help with the case where a synchrotron gets restarted
gracefully, rather than rely on 5 minute timeout.
That fallback sets the redirect URL to itself (so it can process the login
token then return gracefully to the client). This would make it pointless to
ask the user for confirmation, since the URL the confirmation page would be
showing wouldn't be the client's.
This changes the replication protocol so that the server does not send down `RDATA` for rows that happened before the client connected. Instead, the server will send a `POSITION` and clients then query the database (or master out of band) to get up to date.
* Pull Sentinel out of LoggingContext
... and drop a few unnecessary references to it
* Factor out LoggingContext.current_context
move `current_context` and `set_context` out to top-level functions.
Mostly this means that I can more easily trace what's actually referring to
LoggingContext, but I think it's generally neater.
* move copy-to-parent into `stop`
this really just makes `start` and `stop` more symetric. It also means that it
behaves correctly if you manually `set_log_context` rather than using the
context manager.
* Replace `LoggingContext.alive` with `finished`
Turn `alive` into `finished` and make it a bit better defined.
* commit '6a3504636': (29 commits)
Revert "Add options to disable setting profile info for prevent changes. (#7053)"
Populate the room version from state events (#7070)
Fix buggy condition in account validity handler (#7074)
Use innerText instead of innerHTML
Add type annotations and comments to auth handler (#7063)
Lint
Put the file in the templates directory
Update wording and config
Changelog
Move the default SAML2 error HTML to a dedicated file
Refactor a bit
Also don't fail on aliases events in this case
Lint
Changelog
Also don't filter out events sent by ignored users when checking state visibility
Fix condition
Don't filter out dummy events when we're checking the visibility of state
Update sample_config.yaml
Update synapse/config/registration.py
lint, fix tests
...
* commit '6640460d0':
Rephrase default message
Hopefully mypy is happy now
Attempt at appeasing the gods of mypy
Lint
Changelog
Update sample config
SAML2: render a comprehensible error page if something goes wrong
* commit 'fd983fad9':
v1.11.1
Fix wrong handler being used in SAML handler
Factor out complete_sso_login and expose it to the Module API
Add a whitelist for the SSO confirmation step.
Add a confirmation step to the SSO login flow
* commit 'bbe39f808':
Incorporate review
Incorporate review
Phrasing
Changelog
Add mention of SRV records as an advanced topic
Argh trailing spaces
Fix links in the reverse proxy doc
Make federate.md more of a sumary of the steps to follow to set up replication
Split the delegating documentation out of federate.md and trim it down
* commit 'd484126bf':
Make the log more noticeable
Print the error as an error log and raise the same exception we got
Linters are hard but in they end they just want what's best for us
Lint
Changelog
Lint
Add a separator for the config warning
Add a comprehensive error when failing to register for an ACME account
Add mention and warning about ACME v1 deprecation to the Synapse config
* commit 'f48bf4feb':
Update docs/ACME.md
Mention that using Synapse to serve certificates requires restarts
Changelog
Remove duplicated info about certbot et al
Update ACME.md to mention ACME v1 deprecation
* commit '6cd34da8b':
Rephrase
Update the changelog file
Also spell it out in the purge history API doc
Changelog
Spell out that Synapse never purges the last event sent in a room