summary refs log tree commit diff
path: root/synapse/storage/databases/main/devices.py (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Add missing types to opentracing. (#13345)Patrick Cloke2022-07-211-2/+2
| | | After this change `synapse.logging` is fully typed.
* Add type annotations to `trace` decorator. (#13328)Patrick Cloke2022-07-191-1/+1
| | | | Functions that are decorated with `trace` are now properly typed and the type hints for them are fixed.
* Fix type error that made its way onto develop (#13098)reivilibre2022-06-171-2/+2
| | | | | | | * Fix type error introduced accidentally by #13045 * Newsfile Signed-off-by: Olivier Wilkinson (reivilibre) <oliverw@matrix.org>
* Use new `device_list_changes_in_room` table when getting device list changes ↵Erik Johnston2022-06-171-0/+59
| | | | (#13045)
* Type annotations in `synapse.databases.main.devices` (#13025)David Robertson2022-06-151-18/+33
| | | Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
* Replace noop background updates with DELETE. (#12954)Patrick Cloke2022-06-131-9/+0
| | | | Removes the `register_noop_background_update` and deletes the background updates directly in a delta file.
* Consolidate the logic of delete_device/delete_devices. (#12970)Patrick Cloke2022-06-071-10/+0
| | | | | | | | By always using delete_devices and sometimes passing a list with a single device ID. Previously these methods had gotten out of sync with each other and it seems there's little benefit to the single-device variant.
* Add a background job to automatically delete stale devices (#12855)Brendan Abolivier2022-05-271-0/+39
| | | Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
* Additional constants for EDU types. (#12884)Patrick Cloke2022-05-271-2/+3
| | | Instead of hard-coding strings in many places.
* Add some type hints to datastore (#12485)Dirk Klimpel2022-04-271-18/+33
|
* Mark remote device list updates as already handled (#12557)Erik Johnston2022-04-261-1/+2
|
* Fix sending opentracing contexts to remote servers (#12555)Erik Johnston2022-04-261-1/+11
|
* Only send out device list updates for our own users (#12465)Erik Johnston2022-04-141-1/+3
| | | Broke in #12365
* Process device list updates asynchronously (#12365)Erik Johnston2022-04-121-52/+9
|
* Prefill more stream change caches. (#12372)Erik Johnston2022-04-051-0/+50
|
* Track device list updates per room. (#12321)Erik Johnston2022-04-041-25/+192
| | | | | | | | | | | | | | This is a first step in dealing with #7721. The idea is basically that rather than calculating the full set of users a device list update needs to be sent to up front, we instead simply record the rooms the user was in at the time of the change. This will allow a few things: 1. we can defer calculating the set of remote servers that need to be poked about the change; and 2. during `/sync` and `/keys/changes` we can avoid also avoid calculating users who share rooms with other users, and instead just look at the rooms that have changed. However, care needs to be taken to correctly handle server downgrades. As such this PR writes to both `device_lists_changes_in_room` and the `device_lists_outbound_pokes` table synchronously. In a future release we can then bump the database schema compat version to `69` and then we can assume that the new `device_lists_changes_in_room` exists and is handled. There is a temporary option to disable writing to `device_lists_outbound_pokes` synchronously, allowing us to test the new code path does work (and by implication upgrading to a future release and downgrading to this one will work correctly). Note: Ideally we'd do the calculation of room to servers on a worker (e.g. the background worker), but currently only master can write to the `device_list_outbound_pokes` table.
* Send device list updates to application services (MSC3202) - part 1 (#11881)Andrew Morgan2022-03-301-13/+35
| | | Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
* Optimise calculating device_list changes in `/sync`. (#11974)Erik Johnston2022-02-151-0/+10
| | | | | | For users with large accounts it is inefficient to calculate the set of users they share a room with (and takes a lot of space in the cache). Instead we can look at users whose devices have changed since the last sync and check if they share a room with the syncing user.
* Add a docstring to `add_device_change_to_streams` and fix some nearby types ↵Andrew Morgan2022-02-081-6/+16
| | | | (#11912)
* Debug for device lists updates (#11760)David Robertson2022-01-201-0/+18
| | | | | | | | | | | | | | | | | | Debug for #8631. I'm having a hard time tracking down what's going wrong in that issue. In the reported example, I could see server A sending federation traffic to server B and all was well. Yet B reports out-of-sync device updates from A. I couldn't see what was _in_ the events being sent from A to B. So I have added some crude logging to track - when we have updates to send to a remote HS - the edus we actually accumulate to send - when a federation transaction includes a device list update edu - when such an EDU is received This is a bit of a sledgehammer.
* Merge branch 'release-v1.50' into developOlivier Wilkinson (reivilibre)2022-01-141-17/+85
|\
| * Fix a bug introduced in Synapse v1.50.0rc1 whereby outbound federation could ↵reivilibre2022-01-131-16/+78
| | | | | | | | | | fail because too many EDUs were produced for device updates. (#11730) Co-authored-by: David Robertson <davidr@element.io>
| * Fix a bug introduced in Synapse v1.0.0 whereby device list updates would not ↵reivilibre2022-01-121-1/+7
| | | | | | | | | | be sent to remote homeservers if there were too many to send at once. (#11729) Co-authored-by: Brendan Abolivier <babolivier@matrix.org>
* | Replace uses of simple_insert_many with simple_insert_many_values. (#11742)Patrick Cloke2022-01-131-15/+22
| | | | | | | | This should be (slightly) more efficient and it is simpler to have a single method for inserting multiple values.
* | Cache empty responses from `/user/devices` (#11587)David Robertson2022-01-051-2/+6
|/ | | If we've never made a request to a remote homeserver, we should cache the response---even if the response is "this user has no devices".
* Add experimental support for MSC3202: allowing application services to ↵reivilibre2021-12-151-0/+20
| | | | masquerade as specific devices. (#11538)
* Type hint the constructors of the data store classes (#11555)Sean Quah2021-12-131-3/+19
|
* Make `get_device` return None if the device doesn't exist rather than ↵reivilibre2021-12-131-4/+6
| | | | | raising an exception. (#11565) Co-authored-by: Sean Quah <8349537+squahtx@users.noreply.github.com>
* Send and handle cross-signing messages using the stable prefix. (#10520)Hubert Chathi2021-12-081-1/+3
|
* Save the OIDC session ID (sid) with the device on login (#11482)Quentin Gliech2021-12-061-1/+49
| | | As a step towards allowing back-channel logout for OIDC.
* Fix providing a `RoomStreamToken` instance to ↵Andrew Morgan2021-11-021-2/+2
| | | | | `_notify_app_services_ephemeral` (#11137) Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Delete messages from `device_inbox` table when deleting device (#10969)Dirk Klimpel2021-10-271-14/+21
| | | Fixes: #9346
* Add type hints for most `HomeServer` parameters (#11095)Sean Quah2021-10-221-4/+17
|
* Use direct references for some configuration variables (#10798)Patrick Cloke2021-09-131-1/+1
| | | | Instead of proxying through the magic getter of the RootConfig object. This should be more performant (and is more explicit).
* Replace `or_ignore` in `simple_insert` with `simple_upsert` (#10442)Erik Johnston2021-07-221-3/+6
| | | | | | | | Now that we have `simple_upsert` that should be used in preference to trying to insert and looking for an exception. The main benefit is that we ERROR message don't get written to postgres logs. We also have tidy up the return value on `simple_upsert`, rather than having a tri-state of inserted/not-inserted/unknown.
* Combine `LruCache.invalidate` and `invalidate_many` (#9973)Richard van der Hoff2021-05-271-1/+1
| | | | | | | | | | * Make `invalidate` and `invalidate_many` do the same thing ... so that we can do either over the invalidation replication stream, and also because they always confused me a bit. * Kill off `invalidate_many` * changelog
* Remove `keylen` from `LruCache`. (#9993)Richard van der Hoff2021-05-241-1/+1
| | | | | | | `keylen` seems to be a thing that is frequently incorrectly set, and we don't really need it. The only time it was used was to figure out if we had removed a subtree in `del_multi`, which we can do better by changing `TreeCache.pop` to return a different type (`TreeCacheNode`). Commits should be independently reviewable.
* Minor `@cachedList` enhancements (#9975)Richard van der Hoff2021-05-141-1/+1
| | | | | | - use a tuple rather than a list for the iterable that is passed into the wrapped function, for performance - test that we can pass an iterable and that keys are correctly deduped.
* Clear the resync bit after resyncing device lists (#9867)Richard van der Hoff2021-04-221-10/+9
| | | Fixes #9866.
* Remove `synapse.types.Collection` (#9856)Richard van der Hoff2021-04-221-2/+2
| | | This is no longer required, since we have dropped support for Python 3.5.
* Remove redundant "coding: utf-8" lines (#9786)Jonathan de Jong2021-04-141-1/+0
| | | | | | | Part of #9744 Removes all redundant `# -*- coding: utf-8 -*-` lines from files, as python 3 automatically reads source code as utf-8 now. `Signed-off-by: Jonathan de Jong <jonathan@automatia.nl>`
* remove unused param on `make_tuple_comparison_clause`Richard van der Hoff2021-04-081-1/+1
|
* Update black, and run auto formatting over the codebase (#9381)Eric Eastwood2021-02-161-13/+25
| | | | | | | - Update black version to the latest - Run black auto formatting over the codebase - Run autoformatting according to [`docs/code_style.md `](https://github.com/matrix-org/synapse/blob/80d6dc9783aa80886a133756028984dbf8920168/docs/code_style.md) - Update `code_style.md` docs around installing black to use the correct version
* Use execute_batch in more places (#9188)Erik Johnston2021-01-211-2/+2
| | | | | * Use execute_batch in more places * Newsfile
* Add number of local devices to Room Details Admin API (#8886)Dirk Klimpel2020-12-111-0/+32
|
* Replace DeferredCache with LruCache where possible (#8563)Richard van der Hoff2020-10-191-4/+4
| | | Most of these uses don't need a full-blown DeferredCache; LruCache is lighter and more appropriate.
* move DeferredCache into its own moduleRichard van der Hoff2020-10-141-1/+2
|
* Rename Cache->DeferredCacheRichard van der Hoff2020-10-141-2/+2
|
* Move additional tasks to the background worker, part 3 (#8489)Patrick Cloke2020-10-091-95/+101
|
* Add typing information to the device handler. (#8407)Patrick Cloke2020-10-071-3/+3
|
* Add support for MSC2697: Dehydrated devices (#8380)Hubert Chathi2020-10-071-2/+76
| | | | This allows a user to store an offline device on the server and then restore it at a subsequent login.
* Use `async with` for ID gens (#8383)Erik Johnston2020-09-231-3/+3
| | | This will allow us to hit the DB after we've finished using the generated stream ID.
* Simplify super() calls to Python 3 syntax. (#8344)Patrick Cloke2020-09-181-2/+2
| | | | | | | This converts calls like super(Foo, self) -> super(). Generated with: sed -i "" -Ee 's/super\([^\(]+\)/super()/g' **/*.py
* Add types to StreamToken and RoomStreamToken (#8279)Erik Johnston2020-09-081-4/+3
| | | The intention here is to change `StreamToken.room_key` to be a `RoomStreamToken` in a future PR, but that is a big enough change without this refactoring too.
* Add cross-signing sigs to the `keys` object (#8234)Richard van der Hoff2020-09-041-9/+3
| | | | | All the callers want this info in the same place, so let's reduce the duplication by doing it here.
* wrap `_get_e2e_device_keys_and_signatures_txn` in a non-txn method (#8231)Richard van der Hoff2020-09-031-3/+1
| | | | | We have three things which all call `_get_e2e_device_keys_and_signatures_txn` with their own `runInteraction`. Factor out the common code.
* Make _get_e2e_device_keys_and_signatures_txn return an attrs (#8224)Richard van der Hoff2020-09-021-4/+4
| | | | this makes it a bit clearer what's going on.
* Rename `_get_e2e_device_keys_txn` (#8222)Richard van der Hoff2020-09-011-2/+2
| | | | | ... to `_get_e2e_device_keys_and_signatures_txn`, to better reflect what it does.
* Convert additional databases to async/await (#8199)Patrick Cloke2020-09-011-20/+18
|
* Move and rename `get_devices_with_keys_by_user` (#8204)Richard van der Hoff2020-09-011-47/+5
| | | | | | | | | | | | | | | | | | * Move `get_devices_with_keys_by_user` to `EndToEndKeyWorkerStore` this seems a better fit for it. This commit simply moves the existing code: no other changes at all. * Rename `get_devices_with_keys_by_user` to better reflect what it does. * get_device_stream_token abstract method To avoid referencing fields which are declared in the derived classes, make `get_device_stream_token` abstract, and define that in the classes which define `_device_list_id_gen`.
* Only return devices with keys from `/federation/v1/user/devices/` (#8198)Richard van der Hoff2020-08-281-3/+1
| | | | | There's not much point in returning all the others, and some people have a silly number of devices.
* Convert calls of async database methods to async (#8166)Patrick Cloke2020-08-271-2/+2
|
* Convert simple_select_one and simple_select_one_onecol to async (#8162)Patrick Cloke2020-08-261-6/+8
|
* Make StreamIdGen `get_next` and `get_next_mult` async (#8161)Erik Johnston2020-08-251-3/+5
| | | | This is mainly so that `StreamIdGenerator` and `MultiWriterIdGenerator` will have the same interface, allowing them to be used interchangeably.
* Convert misc database code to async (#8087)Patrick Cloke2020-08-141-3/+2
|
* Convert devices database to async/await. (#8069)Patrick Cloke2020-08-121-153/+180
|
* Convert directory, e2e_room_keys, end_to_end_keys, monthly_active_users ↵Patrick Cloke2020-08-071-5/+7
| | | | database to async (#8042)
* Reduce unnecessary whitespace in JSON. (#7372)David Vo2020-08-071-6/+5
|
* Rename database classes to make some sense (#8033)Erik Johnston2020-08-051-0/+1311