Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Propagate cache invalidates from workers to other workers. (#6748) | Erik Johnston | 2020-01-27 | 1 | -1/+21 |
| | | | Currently if a worker invalidates a cache it will be streamed to master, which then didn't forward those to other workers. | ||||
* | Make 'event.redacts' never raise. (#6771) | Erik Johnston | 2020-01-23 | 2 | -2/+2 |
| | | | | | | There are quite a few places that we assume that a redaction event has a corresponding `redacts` key, which is not always the case. So lets cheekily make it so that event.redacts just returns None instead. | ||||
* | Remove unnecessary abstractions in admin handler (#6751) | Andrew Morgan | 2020-01-22 | 1 | -1/+1 |
| | |||||
* | Admin API to list, filter and sort rooms (#6720) | Andrew Morgan | 2020-01-22 | 1 | -1/+124 |
| | |||||
* | Allow monthly active user limiting support for worker mode, fixes #4639. (#6742) | Neil Johnson | 2020-01-22 | 1 | -82/+83 |
| | |||||
* | Allow streaming cache invalidate all to workers. (#6749) | Erik Johnston | 2020-01-22 | 2 | -9/+36 |
| | |||||
* | Add a DeltaState to track changes to be made to current state (#6716) | Erik Johnston | 2020-01-20 | 2 | -99/+111 |
| | |||||
* | Fix syntax error in run_upgrade for schema 57 (#6728) | Satsuki Yanagi | 2020-01-17 | 1 | -3/+4 |
| | | | | | | | Fix #6727 Related #6655 Co-authored-by: Erik Johnston <erikj@jki.re> | ||||
* | Merge pull request #6714 from matrix-org/babolivier/retention_select_event | Brendan Abolivier | 2020-01-17 | 1 | -5/+5 |
|\ | | | | | Fix instantiation of message retention purge jobs | ||||
| * | Fixup diff | Brendan Abolivier | 2020-01-16 | 1 | -6/+7 |
| | | |||||
| * | Remove get_room_event_after_stream_ordering entirely | Brendan Abolivier | 2020-01-16 | 1 | -57/+12 |
| | | |||||
| * | Lint | Brendan Abolivier | 2020-01-16 | 1 | -6/+12 |
| | | |||||
| * | Correctly order when selecting before stream ordering | Brendan Abolivier | 2020-01-15 | 1 | -2/+5 |
| | | |||||
| * | Fix typo | Brendan Abolivier | 2020-01-15 | 1 | -1/+1 |
| | | |||||
| * | Fix instantiation of message retention purge jobs | Brendan Abolivier | 2020-01-15 | 1 | -12/+47 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When figuring out which topological token to start a purge job at, we need to do the following: 1. Figure out a timestamp before which events will be purged 2. Select the first stream ordering after that timestamp 3. Select info about the first event after that stream ordering 4. Build a topological token from that info In some situations (e.g. quiet rooms with a short max_lifetime), there might not be an event after the stream ordering at step 3, therefore we abort the purge with the error `No event found`. To mitigate that, this patch fetches the first event _before_ the stream ordering, instead of after. | ||||
* | | move batch_iter to a separate module | Richard van der Hoff | 2020-01-16 | 6 | -6/+6 |
| | | |||||
* | | Add StateMap type alias (#6715) | Erik Johnston | 2020-01-16 | 3 | -43/+55 |
| | | |||||
* | | Fix purge_room admin API (#6711) | Erik Johnston | 2020-01-15 | 1 | -1/+1 |
| | | |||||
* | | Add `local_current_membership` table (#6655) | Erik Johnston | 2020-01-15 | 4 | -80/+238 |
|/ | | | | | | | Currently we rely on `current_state_events` to figure out what rooms a user was in and their last membership event in there. However, if the server leaves the room then the table may be cleaned up and that information is lost. So lets add a table that separately holds that information. | ||||
* | Quarantine media by ID or user ID (#6681) | Andrew Morgan | 2020-01-13 | 1 | -1/+115 |
| | |||||
* | Refuse to start if sqlite is older than 3.11.0 | Richard van der Hoff | 2020-01-09 | 2 | -4/+7 |
| | |||||
* | Check postgres version in check_database | Richard van der Hoff | 2020-01-09 | 1 | -13/+12 |
| | | | | | this saves doing it on each connection, and will allow us to pass extra options in. | ||||
* | Modify check_database to take a connection rather than a cursor | Richard van der Hoff | 2020-01-09 | 3 | -10/+11 |
| | | | | We might not need the cursor at all. | ||||
* | Allow admin users to create or modify users without a shared secret (#6495) | Manuel Stahl | 2020-01-09 | 1 | -0/+2 |
| | | | Signed-off-by: Manuel Stahl <manuel.stahl@awesome-technologies.de> | ||||
* | Merge pull request #6664 from matrix-org/erikj/media_admin_apis | Erik Johnston | 2020-01-08 | 1 | -120/+128 |
|\ | | | | | Fix media repo admin APIs when using a media worker. | ||||
| * | Shuffle the code | Erik Johnston | 2020-01-08 | 1 | -25/+16 |
| | | |||||
| * | Comments | Erik Johnston | 2020-01-08 | 1 | -0/+3 |
| | | |||||
| * | Do not rely on streaming events, as media repo doesn't | Erik Johnston | 2020-01-08 | 1 | -12/+26 |
| | | |||||
| * | Move media admin store functions to worker store | Erik Johnston | 2020-01-08 | 1 | -120/+120 |
| | | |||||
* | | Fix GET request on /_synapse/admin/v2/users endpoint (#6563) | Manuel Stahl | 2020-01-08 | 1 | -2/+2 |
|/ | | | | Fixes #6552 | ||||
* | Merge pull request #6652 from matrix-org/babolivier/depth_missing_events | Brendan Abolivier | 2020-01-07 | 1 | -1/+1 |
|\ | | | | | Fix conditions failing if min_depth = 0 | ||||
| * | Fix conditions failing if min_depth = 0 | Brendan Abolivier | 2020-01-07 | 1 | -1/+1 |
| | | | | | | | | This could result in Synapse not fetching prev_events for new events in the room if it has missed some events. | ||||
* | | Add a background update to clear tombstoned rooms from the directory (#6648) | Richard van der Hoff | 2020-01-07 | 4 | -1/+100 |
| | | | | | | | | | | | | * Add a background update to clear tombstoned rooms from the directory * use the ABC metaclass | ||||
* | | Async/await for background updates (#6647) | Richard van der Hoff | 2020-01-07 | 1 | -16/+20 |
| | | | | | | | | so that bg update routines can be async | ||||
* | | Merge pull request #6645 from matrix-org/rav/fix_synchrotron_error | Richard van der Hoff | 2020-01-07 | 1 | -9/+35 |
|\ \ | | | | | | | Fix exceptions in the synchrotron worker log when events are rejected. | ||||
| * | | Clarify documentation on get_event* methods | Richard van der Hoff | 2020-01-06 | 1 | -9/+35 |
| | | | | | | | | | | | | Make it clearer how they behave in the face of rejected and/or missing events. | ||||
* | | | Merge pull request #6629 from matrix-org/rav/kill_event_reference_hashes | Richard van der Hoff | 2020-01-06 | 1 | -53/+17 |
|\ \ \ | |/ / |/| | | Remove a bunch of unused code from event creation | ||||
| * | | Remove unused get_latest_event_ids_and_hashes_in_room | Richard van der Hoff | 2020-01-06 | 1 | -42/+0 |
| | | | |||||
| * | | Remove unused get_prev_events_and_hashes_for_room | Richard van der Hoff | 2020-01-06 | 1 | -30/+0 |
| | | | |||||
| * | | replace get_prev_events_and_hashes_for_room with get_prev_events_for_room in ↵ | Richard van der Hoff | 2020-01-06 | 1 | -0/+35 |
| | | | | | | | | | | | | create_new_client_event | ||||
| * | | rename get_prev_events_for_room to get_prev_events_and_hashes_for_room | Richard van der Hoff | 2020-01-06 | 1 | -2/+3 |
| |/ | | | | | | | ... to make way for a new method which just returns the event ids | ||||
* | | Fix some test failures when frozen_dicts are enabled (#6642) | Richard van der Hoff | 2020-01-06 | 1 | -2/+2 |
| | | | | | | | | Fixes #4026 | ||||
* | | Add experimental 'databases' config (#6580) | Erik Johnston | 2020-01-06 | 1 | -0/+21 |
|/ | |||||
* | Split state groups into a separate data store (#6296) | Erik Johnston | 2019-12-20 | 23 | -1157/+1147 |
| | |||||
* | Change EventContext to use the Storage class (#6564) | Erik Johnston | 2019-12-20 | 2 | -2/+2 |
| | |||||
* | Explode on duplicate delta file names. (#6565) | Erik Johnston | 2019-12-19 | 1 | -0/+18 |
| | |||||
* | Improve diagnostics on database upgrade failure (#6570) | Richard van der Hoff | 2019-12-19 | 1 | -1/+4 |
| | | | | `Failed to upgrade database` is not helpful, and it's unlikely that UPGRADE.rst has anything useful. | ||||
* | Clean up startup for the pusher (#6558) | Richard van der Hoff | 2019-12-18 | 1 | -17/+8 |
| | | | | | | | | | | | | | | | | | | | | | | | * Remove redundant python2 support code `str.decode()` doesn't exist on python3, so presumably this code was doing nothing * Filter out pushers with corrupt data When we get a row with unparsable json, drop the row, rather than returning a row with null `data`, which will then cause an explosion later on. * Improve logging when we can't start a pusher Log the ID to help us understand the problem * Make email pusher setup more robust We know we'll have a `data` member, since that comes from the database. What we *don't* know is if that is a dict, and if that has a `brand` member, and if that member is a string. | ||||
* | Add delta file to fix missing default table data (#6555) | Andrew Morgan | 2019-12-18 | 3 | -15/+23 |
| | |||||
* | Add database config class (#6513) | Erik Johnston | 2019-12-18 | 6 | -19/+93 |
| | | | | | This encapsulates config for a given database and is the way to get new connections. | ||||
* | Automatically delete empty groups/communities (#6453) | Werner Sembach | 2019-12-16 | 1 | -0/+29 |
| | | | Signed-off-by: Werner Sembach <werner.sembach@fau.de> | ||||
* | look up cross-signing keys from the DB in bulk (#6486) | Hubert Chathi | 2019-12-12 | 1 | -4/+213 |
| | |||||
* | Fix redacted events being returned in search results ordered by "recent" (#6522) | Andrew Morgan | 2019-12-12 | 1 | -3/+8 |
| | |||||
* | Merge tag 'v1.7.0rc2' into develop | Erik Johnston | 2019-12-11 | 1 | -0/+5 |
|\ | | | | | | | | | | | | | | | | | | | | | | | Synapse 1.7.0rc2 (2019-12-11) ============================= Bugfixes -------- - Fix incorrect error message for invalid requests when setting user's avatar URL. ([\#6497](https://github.com/matrix-org/synapse/issues/6497)) - Fix support for SQLite 3.7. ([\#6499](https://github.com/matrix-org/synapse/issues/6499)) - Fix regression where sending email push would not work when using a pusher worker. ([\#6507](https://github.com/matrix-org/synapse/issues/6507), [\#6509](https://github.com/matrix-org/synapse/issues/6509)) | ||||
| * | Merge branch 'erikj/fix_sqlite_7' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2019-12-11 | 5 | -11/+41 |
| |\ | | | | | | | | | | release-v1.7.0 | ||||
| * | | Give the server config to the RoomWorkerStore | Brendan Abolivier | 2019-12-10 | 1 | -0/+5 |
| | | | |||||
* | | | Prevent redacted events from appearing in message search (#6377) | Andrew Morgan | 2019-12-11 | 2 | -38/+67 |
| | | | |||||
* | | | Add dev script to generate full SQL schema files (#6394) | Andrew Morgan | 2019-12-11 | 2 | -19/+13 |
| | | | |||||
* | | | Prevent message search in upgraded rooms we're not in (#6385) | Andrew Morgan | 2019-12-11 | 1 | -5/+13 |
| | | | |||||
* | | | Fix race which caused deleted devices to reappear (#6514) | Richard van der Hoff | 2019-12-10 | 1 | -3/+5 |
| |/ |/| | | | | | Stop the `update_client_ips` background job from recreating deleted devices. | ||||
* | | Drop unused index | Erik Johnston | 2019-12-10 | 4 | -13/+18 |
| | | |||||
* | | Convert _censor_redactions to async since it awaits on coroutines | Erik Johnston | 2019-12-10 | 1 | -11/+9 |
| | | |||||
* | | Only start censor background job after indices are created | Erik Johnston | 2019-12-10 | 2 | -2/+9 |
| | | |||||
* | | Fix support for SQLite 3.7. | Erik Johnston | 2019-12-09 | 3 | -2/+22 |
|/ | | | | | Partial indices support was added in 3.8.0, so we need to use the background updates that handles this correctly. | ||||
* | Merge pull request #6487 from matrix-org/erikj/pass_in_db | Erik Johnston | 2019-12-09 | 29 | -122/+162 |
|\ | | | | | Pass in Database object to data stores. | ||||
| * | Fix comment | Erik Johnston | 2019-12-09 | 1 | -1/+1 |
| | | | | | | | | Co-Authored-By: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | ||||
| * | Fix port db script | Erik Johnston | 2019-12-06 | 1 | -1/+1 |
| | | |||||
| * | Move start up DB checks to main data store. | Erik Johnston | 2019-12-06 | 1 | -0/+7 |
| | | |||||
| * | Pass Database into the data store | Erik Johnston | 2019-12-06 | 4 | -26/+23 |
| | | |||||
| * | Move are_all_users_on_domain checks to main data store. | Erik Johnston | 2019-12-06 | 2 | -13/+23 |
| | | |||||
| * | Change DataStores to accept 'database' param. | Erik Johnston | 2019-12-06 | 25 | -82/+108 |
| | | |||||
* | | Merge pull request #6484 from matrix-org/erikj/port_sync_handler | Erik Johnston | 2019-12-09 | 2 | -3/+3 |
|\ \ | |/ |/| | Port SyncHandler to async/await | ||||
| * | Fixup functions to consistently return deferreds | Erik Johnston | 2019-12-06 | 2 | -3/+3 |
| | | |||||
* | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2019-12-06 | 3 | -47/+71 |
|\ \ | | | | | | | | | | erikj/make_database_class | ||||
| * | | Replace /admin/v1/users_paginate endpoint with /admin/v2/users (#5925) | Manuel Stahl | 2019-12-05 | 3 | -44/+71 |
| |/ | |||||
* | | Remove unused var | Erik Johnston | 2019-12-06 | 1 | -2/+0 |
| | | |||||
* | | Move background update handling out of store | Erik Johnston | 2019-12-05 | 17 | -146/+163 |
| | | |||||
* | | Comments | Erik Johnston | 2019-12-05 | 3 | -5/+16 |
| | | |||||
* | | Move DB pool and helper functions into dedicated Database class | Erik Johnston | 2019-12-05 | 44 | -2192/+2271 |
|/ | |||||
* | Merge pull request #6464 from matrix-org/erikj/make_public_sql_base | Erik Johnston | 2019-12-05 | 43 | -507/+508 |
|\ | | | | | Clean up SQLBaseStore private function usage | ||||
| * | Remove underscore from SQLBaseStore functions | Erik Johnston | 2019-12-04 | 43 | -500/+492 |
| | | |||||
| * | Don't call SQLBaseStore methods from outside stores | Erik Johnston | 2019-12-04 | 2 | -8/+17 |
| | | |||||
* | | Merge pull request #6470 from matrix-org/babolivier/port_db_ci_failure | Brendan Abolivier | 2019-12-04 | 1 | -2/+10 |
|\ \ | | | | | | | Make synapse_port_db exit with a non-0 code if something failed | ||||
| * | | Fix background updates for synapse_port_db | Brendan Abolivier | 2019-12-04 | 1 | -2/+10 |
| |/ | |||||
* / | get rid of (most of) have_events from ↵ | Richard van der Hoff | 2019-12-04 | 1 | -34/+0 |
|/ | | | | | | | | | | | | | _update_auth_events_and_context_for_auth (#6468) have_events was a map from event_id to rejection reason (or None) for events which are in our local database. It was used as filter on the list of event_ids being passed into get_events_as_list. However, since get_events_as_list will ignore any event_ids that are unknown or rejected, we can equivalently just leave it to get_events_as_list to do the filtering. That means that we don't have to keep `have_events` up-to-date, and can use `have_seen_events` instead of `get_seen_events_with_rejection` in the one place we do need it. | ||||
* | Merge pull request #6454 from matrix-org/erikj/clean_base_Store | Erik Johnston | 2019-12-04 | 7 | -190/+218 |
|\ | | | | | Move things out of SQLBaseStore | ||||
| * | Revert "Move get_user_count_txn out of base store" | Erik Johnston | 2019-12-04 | 2 | -12/+12 |
| | | | | | | | | | | | | This reverts commit 00f0d67566cdfe8eae44aeae1c982c42a255cfcd. Its going to get removed soon, so lets not make merge conflicts. | ||||
| * | _CURRENT_STATE_CACHE_NAME is public | Erik Johnston | 2019-12-04 | 1 | -3/+3 |
| | | |||||
| * | Move get_user_count_txn out of base store | Erik Johnston | 2019-12-04 | 2 | -12/+12 |
| | | |||||
| * | Move cache invalidation to main data store | Erik Johnston | 2019-12-04 | 5 | -112/+141 |
| | | |||||
| * | Move event fetch vars to EventWorkStore | Erik Johnston | 2019-12-04 | 4 | -14/+15 |
| | | |||||
| * | Move account validity bg updates to registration store | Erik Johnston | 2019-12-04 | 2 | -66/+64 |
| | | |||||
* | | Merge pull request #6329 from matrix-org/babolivier/context_filters | Brendan Abolivier | 2019-12-04 | 1 | -0/+3 |
|\ \ | |/ |/| | Filter state, events_before and events_after in /context requests | ||||
| * | Merge branch 'develop' into babolivier/context_filters | Brendan Abolivier | 2019-12-04 | 22 | -305/+1024 |
| |\ | |||||
| * | | Update copyrights | Brendan Abolivier | 2019-11-05 | 1 | -0/+3 |
| | | | |||||
* | | | Merge pull request #6451 from matrix-org/uhoreg/cross_signing_signatures_index | Erik Johnston | 2019-12-04 | 2 | -1/+24 |
|\ \ \ | | | | | | | | | make cross signing signature index non-unique | ||||
| * | | | apply changes from review | Hubert Chathi | 2019-12-03 | 1 | -1/+2 |
| | | | | |||||
| * | | | make cross signing signature index non-unique | Hubert Chathi | 2019-12-02 | 2 | -1/+23 |
| | |/ | |/| | |||||
* | | | Fix exception when a cross-signed device is deleted (#6462) | Richard van der Hoff | 2019-12-04 | 1 | -4/+19 |
| | | | | | | | | | | | | | | | (hopefully) ... and deobfuscate the relevant bit of code. | ||||
* | | | Add ephemeral messages support (MSC2228) (#6409) | Brendan Abolivier | 2019-12-03 | 2 | -6/+141 |
|/ / | | | | | | | | | | | | | | | Implement part [MSC2228](https://github.com/matrix-org/matrix-doc/pull/2228). The parts that differ are: * the feature is hidden behind a configuration flag (`enable_ephemeral_messages`) * self-destruction doesn't happen for state events * only implement support for the `m.self_destruct_after` field (not the `m.self_destruct` one) * doesn't send synthetic redactions to clients because for this specific case we consider the clients to be able to destroy an event themselves, instead we just censor it (by pruning its JSON) in the database | ||||
* | | Remove local threepids on account deactivation (#6426) | Andrew Morgan | 2019-11-28 | 1 | -0/+13 |
| | | |||||
* | | add etag and count to key backup endpoints (#5858) | Hubert Chathi | 2019-11-27 | 2 | -66/+177 |
| | | |||||
* | | Merge branch 'develop' into babolivier/message_retention | Brendan Abolivier | 2019-11-26 | 18 | -239/+547 |
|\ \ | |||||
| * | | Don't construct a set | Erik Johnston | 2019-11-26 | 1 | -6/+3 |
| | | | |||||
| * | | Fix find_next_generated_user_id_localpart | Erik Johnston | 2019-11-26 | 1 | -10/+7 |
| | | | |||||
| * | | Prevent account_data content from being sent over TCP replication (#6333) | Andrew Morgan | 2019-11-26 | 1 | -3/+3 |
| |\ \ | |||||
| | * | | Remove content from being sent for account data rdata stream | Andrew Morgan | 2019-11-08 | 1 | -3/+3 |
| | | | | |||||
| * | | | Make sure that we close cursors before returning from a query (#6408) | Richard van der Hoff | 2019-11-25 | 2 | -10/+43 |
| | | | | | | | | | | | | | | | | | | | | | | | | There are lots of words in the comment as to why this is a good idea. Fixes #6403. | ||||
| * | | | Merge tag 'v1.6.0rc2' into develop | Richard van der Hoff | 2019-11-25 | 1 | -18/+25 |
| |\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Synapse 1.6.0rc2 (2019-11-25) ============================= Bugfixes -------- - Fix a bug which could cause the background database update hander for event labels to get stuck in a loop raising exceptions. ([\#6407](https://github.com/matrix-org/synapse/issues/6407)) | ||||
| | * | | | Fix exceptions from background database update for event labels. (#6407) | Richard van der Hoff | 2019-11-25 | 1 | -18/+25 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add some exception handling here so that events whose json cannot be parsed are ignored rather than getting us stuck in a loop. Fixes #6404. | ||||
| * | | | | Clean up newline quote marks around the codebase (#6362) | Andrew Morgan | 2019-11-21 | 10 | -22/+16 |
| |/ / / | |||||
| * | | | Replace UPDATE with UPSERT on device_max_stream_id table (#6363) | Andrew Morgan | 2019-11-15 | 1 | -2/+15 |
| | | | | |||||
| * | | | Fix guest -> real account upgrade with account validity enabled (#6359) | Andrew Morgan | 2019-11-14 | 1 | -6/+3 |
| |/ / | |||||
| * | | Merge pull request #6340 from matrix-org/babolivier/pagination_query | Brendan Abolivier | 2019-11-08 | 1 | -8/+32 |
| |\ \ | | | | | | | | | Fix the SQL SELECT query in _paginate_room_events_txn | ||||
| | * | | Incorporate review | Brendan Abolivier | 2019-11-08 | 1 | -12/+12 |
| | | | | |||||
| | * | | Lint | Brendan Abolivier | 2019-11-07 | 1 | -2/+2 |
| | | | | |||||
| | * | | Only join on event_labels if we're filtering on labels | Brendan Abolivier | 2019-11-07 | 1 | -9/+24 |
| | | | | |||||
| | * | | Handle lack of filter | Brendan Abolivier | 2019-11-07 | 1 | -5/+3 |
| | | | | |||||
| | * | | Fix the SQL SELECT query in _paginate_room_events_txn | Brendan Abolivier | 2019-11-07 | 1 | -2/+13 |
| | | | | | | | | | | | | | | | | Doing a SELECT DISTINCT when paginating is quite expensive, because it requires the engine to do sorting on the entire events table. However, we only need to run it if we're filtering on 2+ labels, so this PR is changing the request so that DISTINCT is only used then. | ||||
| * | | | Merge pull request #6295 from matrix-org/erikj/split_purge_history | Erik Johnston | 2019-11-08 | 4 | -172/+319 |
| |\ \ \ | | | | | | | | | | | Split purge API into events vs state and add PurgeEventsStorage | ||||
| | * | | | Move type annotation into docstring | Erik Johnston | 2019-11-08 | 1 | -3/+3 |
| | | | | | |||||
| | * | | | Fix deleting state groups during room purge. | Erik Johnston | 2019-11-06 | 1 | -13/+14 |
| | | | | | | | | | | | | | | | | | | | | And fix the tests to actually test that things got deleted. | ||||
| | * | | | Use correct type annotation | Erik Johnston | 2019-11-06 | 1 | -2/+2 |
| | | | | | |||||
| | * | | | Change to not require a state_groups.room_id index. | Erik Johnston | 2019-11-04 | 4 | -53/+45 |
| | | | | | | | | | | | | | | | | | | | | | | | | | This does mean that we won't clean up orphaned state groups (i.e. state groups that were persisted but the associated event wasn't). | ||||
| | * | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2019-11-04 | 18 | -54/+259 |
| | |\ \ \ | | | | |/ | | | |/| | | | | | | erikj/split_purge_history | ||||
| | * | | | Fix up comment | Erik Johnston | 2019-11-01 | 1 | -2/+1 |
| | | | | | |||||
| | * | | | Update log line to lie a little less | Erik Johnston | 2019-10-31 | 1 | -1/+1 |
| | | | | | |||||
| | * | | | Add state_groups.room_id index | Erik Johnston | 2019-10-31 | 2 | -0/+24 |
| | | | | | |||||
| | * | | | Docstrings | Erik Johnston | 2019-10-31 | 1 | -3/+11 |
| | | | | | |||||
| | * | | | Fix purge room API | Erik Johnston | 2019-10-31 | 1 | -5/+8 |
| | | | | | |||||
| | * | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2019-10-31 | 7 | -12/+243 |
| | |\ \ \ | | | | | | | | | | | | | | | | | | | erikj/split_purge_history | ||||
| | * | | | | Split purge API into events vs state | Erik Johnston | 2019-10-30 | 4 | -175/+295 |
| | | | | | | |||||
| * | | | | | Merge pull request #6310 from matrix-org/babolivier/msc2326_bg_update | Brendan Abolivier | 2019-11-07 | 2 | -0/+80 |
| |\ \ \ \ \ | | | | | | | | | | | | | | | MSC2326: Add background update to take previous events into account | ||||
| | * | | | | | Update synapse/storage/data_stores/main/events_bg_updates.py | Brendan Abolivier | 2019-11-07 | 1 | -1/+1 |
| | | | | | | | | | | | | | | | | | | | | | Co-Authored-By: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | ||||
| | * | | | | | Update synapse/storage/data_stores/main/events_bg_updates.py | Brendan Abolivier | 2019-11-07 | 1 | -1/+1 |
| | | | | | | | | | | | | | | | | | | | | | Co-Authored-By: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | ||||
| | * | | | | | Copy results | Brendan Abolivier | 2019-11-07 | 1 | -1/+3 |
| | | | | | | | |||||
| | * | | | | | Revert "Back to using cursor_to_dict" | Brendan Abolivier | 2019-11-07 | 1 | -9/+9 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 1186612d6cd728e6b7ed7806579db3cea7410b54. | ||||
| | * | | | | | Back to using cursor_to_dict | Brendan Abolivier | 2019-11-07 | 1 | -9/+9 |
| | | | | | | | |||||
| | * | | | | | Initialise value before looping | Brendan Abolivier | 2019-11-07 | 1 | -4/+8 |
| | | | | | | | |||||
| | * | | | | | Incorporate review | Brendan Abolivier | 2019-11-07 | 1 | -14/+9 |
| | | | | | | | |||||
| | * | | | | | Fix field name | Brendan Abolivier | 2019-11-06 | 1 | -1/+1 |
| | | | | | | | |||||
| | * | | | | | Update insert | Brendan Abolivier | 2019-11-06 | 1 | -1/+6 |
| | | | | | | | |||||
| | * | | | | | Print out the actual number of affected rows | Brendan Abolivier | 2019-11-04 | 1 | -4/+4 |
| | | | | | | | |||||
| | * | | | | | Correctly order results | Brendan Abolivier | 2019-11-04 | 1 | -5/+5 |
| | | | | | | | |||||
| | * | | | | | TODO | Brendan Abolivier | 2019-11-04 | 1 | -0/+2 |
| | | | | | | | |||||
| | * | | | | | Fix exit condition | Brendan Abolivier | 2019-11-04 | 1 | -1/+3 |
| | | | | | | | |||||
| | * | | | | | Lint | Brendan Abolivier | 2019-11-04 | 1 | -6/+3 |
| | | | | | | | |||||
| | * | | | | | Don't try to process events we already have a label for | Brendan Abolivier | 2019-11-04 | 1 | -1/+2 |
| | | | | | | | |||||
| | * | | | | | Use a sensible default value for labels | Brendan Abolivier | 2019-11-04 | 1 | -1/+1 |
| | | | | | | | |||||
| | * | | | | | Use the right format for rows | Brendan Abolivier | 2019-11-04 | 1 | -1/+1 |
| | | | | | | | |||||
| | * | | | | | MSC2326: Add background update to take previous events into account | Brendan Abolivier | 2019-11-04 | 2 | -0/+72 |
| | | |_|/ / | | |/| | | | |||||
| * | | | | | Merge pull request #6235 from matrix-org/anoa/room_upgrade_groups | Andrew Morgan | 2019-11-07 | 2 | -1/+20 |
| |\ \ \ \ \ | |||||
| | * | | | | | Re-add docstring, with caveats detailed | Andrew Morgan | 2019-11-04 | 2 | -2/+6 |
| | | | | | | | |||||
| | * | | | | | Transfer upgraded rooms on groups | Andrew Morgan | 2019-11-04 | 1 | -0/+15 |
| | |/ / / / | |||||
| * | | | / | Numeric ID checker now checks @0, don't ratelimit on checking | Andrew Morgan | 2019-11-06 | 1 | -4/+4 |
| | |_|_|/ | |/| | | | |||||
| * | | | | Fix bug which caused rejected events to be stored with the wrong room state ↵ | Richard van der Hoff | 2019-11-06 | 1 | -1/+1 |
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (#6320) Fixes a bug where rejected events were persisted with the wrong state group. Also fixes an occasional internal-server-error when receiving events over federation which are rejected and (possibly because they are backwards-extremities) have no prev_group. Fixes #6289. | ||||
* | | | | Fix worker mode | Brendan Abolivier | 2019-11-19 | 1 | -56/+56 |
| | | | | |||||
* | | | | Lint | Brendan Abolivier | 2019-11-19 | 1 | -25/+24 |
| | | | | |||||
* | | | | Implement per-room message retention policies | Brendan Abolivier | 2019-11-04 | 3 | -0/+288 |
|/ / / | |||||
* | | | Merge pull request #6301 from matrix-org/babolivier/msc2326 | Brendan Abolivier | 2019-11-01 | 3 | -2/+75 |
|\ \ \ | | | | | | | | | Implement MSC2326 (label based filtering) | ||||
| * | | | Incorporate review | Brendan Abolivier | 2019-11-01 | 2 | -1/+7 |
| | | | | |||||
| * | | | Update synapse/storage/data_stores/main/schema/delta/56/event_labels.sql | Brendan Abolivier | 2019-11-01 | 1 | -1/+1 |
| | | | | | | | | | | | | Co-Authored-By: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | ||||
| * | | | Add more data to the event_labels table and fix the indexes | Brendan Abolivier | 2019-11-01 | 3 | -5/+21 |
| | | | | |||||
| * | | | Lint | Brendan Abolivier | 2019-11-01 | 1 | -1/+1 |
| | | | | |||||
| * | | | Incorporate review | Brendan Abolivier | 2019-11-01 | 1 | -2/+10 |
| | | | | |||||
| * | | | Lint | Brendan Abolivier | 2019-10-30 | 1 | -7/+1 |
| | | | | |||||
| * | | | Add more integration testing | Brendan Abolivier | 2019-10-30 | 1 | -1/+1 |
| | | | | |||||
| * | | | Add index on label | Brendan Abolivier | 2019-10-30 | 1 | -1/+3 |
| | | | | |||||
| * | | | Implement filtering | Brendan Abolivier | 2019-10-30 | 1 | -0/+9 |
| | | | | |||||
| * | | | Store labels for new events | Brendan Abolivier | 2019-10-30 | 1 | -1/+19 |
| | | | | |||||
| * | | | Add database table for keeping track of labels on events | Brendan Abolivier | 2019-10-29 | 1 | -0/+20 |
| | | | | |||||
* | | | | Merge pull request #6313 from matrix-org/uhoreg/cross_signing_fix_sqlite_schema | Hubert Chathi | 2019-11-01 | 1 | -0/+42 |
|\ \ \ \ | | | | | | | | | | | fix hidden field in devices table for older sqlite | ||||
| * | | | | fix hidden field in devices table for older sqlite | Hubert Chathi | 2019-10-31 | 1 | -0/+42 |
| | | | | | |||||
* | | | | | Update synapse/storage/data_stores/main/devices.py | Hubert Chathi | 2019-10-31 | 1 | -1/+1 |
| | | | | | | | | | | | | | | | Co-Authored-By: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | ||||
* | | | | | Merge branch 'develop' into cross-signing_federation | Hubert Chathi | 2019-10-31 | 19 | -40/+300 |
|\| | | | | |||||
| * | | | | Merge branch 'develop' into uhoreg/cross_signing_fix_workers_notify | Hubert Chathi | 2019-10-31 | 18 | -39/+272 |
| |\ \ \ \ | |||||
| | * | | | | Update black to 19.10b0 (#6304) | Amber Brown | 2019-11-01 | 13 | -27/+29 |
| | | |_|/ | | |/| | | | | | | | * update version of black and also fix the mypy config being overridden | ||||
| | * | | | Merge pull request #6294 from matrix-org/erikj/add_state_storage | Erik Johnston | 2019-10-31 | 3 | -1/+236 |
| | |\ \ \ | | | | | | | | | | | | | Add StateGroupStorage interface | ||||
| | | * | | | Apply suggestions from code review | Erik Johnston | 2019-10-31 | 1 | -1/+2 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix docstring Co-Authored-By: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | ||||
| | | * | | | Add StateGroupStorage interface | Erik Johnston | 2019-10-30 | 3 | -1/+235 |
| | | | |/ | | | |/| | |||||
| | * | | | Fix /purge_room API. | Erik Johnston | 2019-10-31 | 1 | -1/+0 |
| | | | | | | | | | | | | | | | | | | | | It fails trying to clean the `topic` table which was recently removed. | ||||
| | * | | | Remove usage of deprecated logger.warn method from codebase (#6271) | Andrew Morgan | 2019-10-31 | 3 | -5/+5 |
| | | | | | | | | | | | | | | | Replace every instance of `logger.warn` with `logger.warning` as the former is deprecated. | ||||
| | * | | | fix delete_existing for _persist_events (#6300) | Richard van der Hoff | 2019-10-30 | 2 | -5/+2 |
| | |/ / | | | | | | | | | this is part of _retry_on_integrity_error, so should only be on _persist_events_and_state_updates | ||||
| * | | | make user signatures a separate stream | Hubert Chathi | 2019-10-30 | 2 | -12/+25 |
| | | | | |||||
| * | | | Merge branch 'develop' into uhoreg/cross_signing_fix_workers_notify | Hubert Chathi | 2019-10-30 | 13 | -724/+889 |
| |\| | | |||||
| * | | | make notification of signatures work with workers | Hubert Chathi | 2019-10-24 | 2 | -2/+16 |
| | | | | |||||
* | | | | rename get_devices_by_remote to get_device_updates_by_remote | Hubert Chathi | 2019-10-30 | 1 | -4/+4 |
| | | | | |||||
* | | | | Merge branch 'develop' into cross-signing_federation | Hubert Chathi | 2019-10-30 | 12 | -657/+822 |
|\ \ \ \ | | |/ / | |/| | | |||||
| * | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2019-10-30 | 12 | -84/+126 |
| |\ \ \ | | | | | | | | | | | | | | | | erikj/split_out_persistence_store | ||||
| | * | | | Port receipt and read markers to async/wait | Erik Johnston | 2019-10-29 | 1 | -4/+3 |
| | | |/ | | |/| | |||||
| | * | | Merge pull request #6263 from matrix-org/erikj/caches_return_deferreds | Erik Johnston | 2019-10-29 | 1 | -1/+1 |
| | |\ \ | | | | | | | | | | | Quick fix to ensure cache descriptors always return deferreds | ||||
| | | * | | Quick fix to ensure cache descriptors always return deferreds | Erik Johnston | 2019-10-28 | 1 | -1/+1 |
| | | | | | |||||
| | * | | | Merge branch 'release-v1.5.0' of github.com:matrix-org/synapse into develop | Erik Johnston | 2019-10-29 | 1 | -4/+8 |
| | |\ \ \ | |||||
| | | * | | | Make room directory search case insensitive | Erik Johnston | 2019-10-29 | 1 | -4/+8 |
| | | | | | | |||||
| | * | | | | Add CI for synapse_port_db (#6140) | Brendan Abolivier | 2019-10-28 | 1 | -3/+6 |
| | | |/ / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds: * a test sqlite database * a configuration file for the sqlite database * a configuration file for a postgresql database (using the credentials in `.buildkite/docker-compose.pyXX.pgXX.yaml`) as well as a new script named `.buildkite/scripts/test_synapse_port_db.sh` that: 1. installs Synapse 2. updates the test sqlite database to the latest schema and runs background updates on it 3. creates an empty postgresql database 4. run the `synapse_port_db` script to migrate the test sqlite database to the empty postgresql database (with coverage) Step `2` is done via a new script located at `scripts-dev/update_database`. The test sqlite database is extracted from a SyTest run, so that it can be considered as an actual homeserver's database with actual data in it. | ||||
| | * | | | Convert EventContext to attrs (#6218) | Richard van der Hoff | 2019-10-28 | 1 | -1/+6 |
| | | | | | | | | | | | | | | | | | | | | * make EventContext use an attr | ||||
| | * | | | Merge pull request #6253 from matrix-org/uhoreg/e2e_backup_delete_keys | Hubert Chathi | 2019-10-25 | 2 | -0/+33 |
| | |\ \ \ | | | | | | | | | | | | | delete keys when deleting backup versions | ||||
| | | * | | | delete keys when deleting backups | Hubert Chathi | 2019-10-24 | 2 | -0/+33 |
| | | | |/ | | | |/| | |||||
| | * | | | Merge branch 'release-v1.5.0' of github.com:matrix-org/synapse into develop | Erik Johnston | 2019-10-25 | 1 | -67/+67 |
| | |\ \ \ | | | | |/ | | | |/| | |||||
| | | * | | Fix /keys/query API on workers. | Erik Johnston | 2019-10-25 | 1 | -67/+67 |
| | | |/ | | | | | | | | | | | | | | | | | The necessary getters were added only to the master store and not the worker stores. | ||||
| | * | | Merge pull request #6251 from matrix-org/michaelkaye/debug_guard_logging | Erik Johnston | 2019-10-25 | 1 | -3/+1 |
| | |\ \ | | | | | | | | | | | Reduce debug logging overhead | ||||
| | | * | | Address codestyle concerns | Michael Kaye | 2019-10-24 | 1 | -3/+1 |
| | | | | | |||||
| | | * | | use %r to __repr__ objects | Michael Kaye | 2019-10-24 | 1 | -1/+1 |
| | | |/ | | | | | | | | | | | | | This avoids calculating __repr__ unless we are going to log. | ||||
| | * / | Make user/room stats log line less verbose. | Michael Kaye | 2019-10-24 | 1 | -1/+1 |
| | |/ | |||||
| * | | Review comments | Erik Johnston | 2019-10-30 | 3 | -10/+26 |
| | | | |||||
| * | | Add DataStores and Storage classes. | Erik Johnston | 2019-10-23 | 3 | -4/+34 |
| | | | |||||
| * | | Move persist_events out from main data store. | Erik Johnston | 2019-10-23 | 2 | -634/+711 |
| | | | | | | | | | | | | | | | | | | This is in preparation for splitting out of state_groups_state from the main store into it own one, as persisting events depends on calculating state. | ||||
* | | | apply changes as a result of PR review | Hubert Chathi | 2019-10-30 | 1 | -43/+36 |
| | | | |||||
* | | | Merge branch 'develop' into cross-signing_federation | Hubert Chathi | 2019-10-24 | 241 | -4341/+4597 |
|\ \ \ | | |/ | |/| | |||||
| * | | Move schema delta files to the correct data store. | Erik Johnston | 2019-10-24 | 2 | -0/+0 |
| |/ | | | | | | | They were put in the global schema delta directory due to a bad merge. | ||||
| * | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2019-10-22 | 1 | -11/+37 |
| |\ | | | | | | | | | | erikj/refactor_stores | ||||
| * | | Clean up prepare_database.py a bit and add comments | Erik Johnston | 2019-10-22 | 1 | -7/+30 |
| | | | |||||
| * | | Delete background_update table creation in main data_store | Erik Johnston | 2019-10-22 | 1 | -21/+0 |
| | | | |||||
| * | | Move README into synapse/storage/__init__.py | Erik Johnston | 2019-10-22 | 2 | -13/+12 |
| | | | |||||
| * | | Add a basic README to synapse.storage | Erik Johnston | 2019-10-22 | 1 | -0/+13 |
| | | | |||||
| * | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2019-10-22 | 6 | -12/+337 |
| |\ \ | | | | | | | | | | | | | erikj/refactor_stores | ||||
| * | | | Fix schema management to work with multiple data stores. | Erik Johnston | 2019-10-21 | 1 | -41/+108 |
| | | | | |||||
| * | | | Move storage classes into a main "data store". | Erik Johnston | 2019-10-21 | 239 | -4292/+4466 |
| | | | | | | | | | | | | | | | | | | | | This is in preparation for having multiple data stores that offer different functionality, e.g. splitting out state or event storage. | ||||
* | | | | move get_e2e_cross_signing_key to EndToEndKeyWorkerStore so it works with ↵ | Hubert Chathi | 2019-10-23 | 1 | -67/+67 |
| | | | | | | | | | | | | | | | | workers | ||||
* | | | | vendor-prefix the EDU name until MSC1756 is merged into the spec | Hubert Chathi | 2019-10-22 | 1 | -1/+2 |
| | | | | |||||
* | | | | update to work with newer code, and fix formatting | Hubert Chathi | 2019-10-22 | 1 | -1/+1 |
| | | | | |||||
* | | | | make black happy | Hubert Chathi | 2019-10-22 | 1 | -22/+32 |
| | | | | |||||
* | | | | don't crash if the user doesn't have cross-signing keys | Hubert Chathi | 2019-10-22 | 1 | -14/+25 |
| | | | | |||||
* | | | | implement federation parts of cross-signing | Hubert Chathi | 2019-10-22 | 1 | -5/+51 |
| |_|/ |/| | | |||||
* | | | Merge branch 'develop' into cross-signing_sig_upload | Hubert Chathi | 2019-10-18 | 38 | -908/+1949 |
|\ \ \ | | |/ | |/| | |||||
| * | | Merge branch 'develop' into uhoreg/e2e_cross-signing_merged | Hubert Chathi | 2019-10-18 | 38 | -903/+1945 |
| |\| | |||||
| | * | Merge pull request #6193 from matrix-org/uhoreg/interpret_device_key_in_storage | Hubert Chathi | 2019-10-11 | 1 | -4/+14 |
| | |\ | | | | | | | | | make storage layer in charge of interpreting the device key data | ||||
| | | * | expand on comment | Hubert Chathi | 2019-10-11 | 1 | -1/+2 |
| | | | | |||||
| | | * | make sure we actually return something | Hubert Chathi | 2019-10-10 | 1 | -2/+4 |
| | | | | |||||
| | | * | make storage layer in charge of interpreting the device key data | Hubert Chathi | 2019-10-10 | 1 | -2/+9 |
| | | | | |||||
| | * | | Fix MAU reaping where reserved users are specified. (#6168) | Neil Johnson | 2019-10-11 | 1 | -39/+62 |
| | | | | |||||
| | * | | Merge pull request #6156 from matrix-org/erikj/postgres_any | Erik Johnston | 2019-10-10 | 14 | -109/+189 |
| | |\ \ | | | | | | | | | | | Use Postgres ANY for selecting many values. | ||||
| | | * | | Fix SQLite take 2 | Erik Johnston | 2019-10-10 | 1 | -1/+1 |
| | | | | | |||||
| | | * | | Fix SQLite | Erik Johnston | 2019-10-10 | 1 | -1/+1 |
| | | | | | |||||
| | | * | | Remove add_in_list_sql_clause | Erik Johnston | 2019-10-10 | 4 | -34/+25 |
| | | | | | |||||
| | | * | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/postgres_any | Erik Johnston | 2019-10-10 | 1 | -3/+4 |
| | | |\ \ | |||||
| | | * | | | Replace IN usage with helper funcs | Erik Johnston | 2019-10-10 | 11 | -97/+138 |
| | | | | | | |||||
| | | * | | | Add helper funcs to use postgres ANY | Erik Johnston | 2019-10-10 | 1 | -8/+56 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This means that we can write queries with `col = ANY(?)`, which helps postgres. | ||||
| | * | | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2019-10-10 | 1 | -3/+4 |
| | |\ \ \ \ | | | | |/ / | | | |/| | | | | | | | | erikj/disable_sql_bytes | ||||
| | | * | | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/patch_inner | Erik Johnston | 2019-10-10 | 2 | -35/+61 |
| | | |\| | | |||||
| | | * | | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/patch_inner | Erik Johnston | 2019-10-09 | 23 | -706/+1180 |
| | | |\ \ \ | | | | | |/ | | | | |/| | |||||
| | | * | | | Patch inlinecallbacks for log contexts | Erik Johnston | 2019-09-27 | 2 | -4/+5 |
| | | | | | | |||||
| | * | | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2019-10-10 | 16 | -725/+1030 |
| | |\ \ \ \ | | | | |_|/ | | | |/| | | | | | | | | erikj/disable_sql_bytes | ||||
| | | * | | | Fix races in room stats (and other) updates. (#6187) | Richard van der Hoff | 2019-10-10 | 1 | -9/+29 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Hopefully this will fix the occasional failures we were seeing in the room directory. The problem was that events are not necessarily persisted (and `current_state_delta_stream` updated) in the same order as their stream_id. So for instance current_state_delta 9 might be persisted *before* current_state_delta 8. Then, when the room stats saw stream_id 9, it assumed it had done everything up to 9, and never came back to do stream_id 8. We can solve this easily by only processing up to the stream_id where we know all events have been persisted. | ||||
| | | * | | | Rewrite the user_filter migration again (#6184) | Richard van der Hoff | 2019-10-10 | 1 | -26/+32 |
| | | | |/ | | | |/| | | | | | | | | | | | | | | | | you can't plausibly ALTER TABLE in sqlite, so we create the new table with the right schema to start with. | ||||
| | | * | | Merge pull request #6185 from matrix-org/erikj/fix_censored_evnets | Erik Johnston | 2019-10-09 | 2 | -4/+28 |
| | | |\ \ | | | | | | | | | | | | | Fix inserting bytes as text in `censor_redactions` | ||||
| | | * | | | Fix RegistrationStore | Brendan Abolivier | 2019-10-08 | 1 | -1/+1 |
| | | | | | | |||||
| | | * | | | Cleanup client_ips | Brendan Abolivier | 2019-10-08 | 1 | -7/+0 |
| | | | | | | |||||
| | | * | | | Don't end up with 4 classes in registration | Brendan Abolivier | 2019-10-08 | 1 | -52/+50 |
| | | | | | | |||||
| | | * | | | Lint | Brendan Abolivier | 2019-10-07 | 3 | -3/+3 |
| | | | | | |