Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | bump schema version | Neil Johnson | 2018-03-28 | 1 | -1/+1 |
| | |||||
* | Support multi client R30 for psql | Neil Johnson | 2018-03-28 | 1 | -8/+28 |
| | |||||
* | Add user_ips last seen index | Neil Johnson | 2018-03-28 | 2 | -0/+24 |
| | |||||
* | No need to cast in count_daily_users | Neil Johnson | 2018-03-28 | 1 | -2/+2 |
| | |||||
* | query and call for r30 stats | Neil Johnson | 2018-03-28 | 1 | -0/+36 |
| | |||||
* | count_daily_users failed if db was sqlite due to type failure - presumably ↵ | Neil Johnson | 2018-03-28 | 1 | -1/+1 |
| | | | | this prevcented all sqlite homeservers reporting home | ||||
* | Merge branch 'master' of github.com:matrix-org/synapse into develop | Erik Johnston | 2018-03-19 | 17 | -26/+25 |
|\ | |||||
| * | Remove wrong comment | Erik Johnston | 2018-03-16 | 1 | -1/+0 |
| | | |||||
| * | Replace ujson with simplejson | Erik Johnston | 2018-03-15 | 17 | -26/+26 |
| | | |||||
* | | Replace some ujson with simplejson to make it work | Erik Johnston | 2018-03-16 | 2 | -2/+2 |
| | | |||||
* | | Merge pull request #2988 from matrix-org/erikj/split_profile_store | Erik Johnston | 2018-03-14 | 1 | -24/+26 |
|\ \ | | | | | | | Split up ProfileStore | ||||
| * | | Split up ProfileStore | Erik Johnston | 2018-03-13 | 1 | -24/+26 |
| | | | |||||
* | | | Merge pull request #2993 from matrix-org/erikj/is_blocked | Erik Johnston | 2018-03-14 | 1 | -13/+17 |
|\ \ \ | | | | | | | | | Add is_blocked to worker store | ||||
| * | | | Add is_blocked to worker store | Erik Johnston | 2018-03-13 | 1 | -13/+17 |
| |/ / | |||||
* / / | fix bug #2926 (loading all state for a given type from the DB if the ↵ | Matthew Hodgson | 2018-03-13 | 1 | -7/+27 |
|/ / | | | | | | | | | state_key is None) (#2990) Fixes a regression that had crept in where the caching layer upholds requests for loading state which is filtered by type (but not by state_key), but the DB layer itself would interpret a missing state_key as a request to filter by null state_key rather than returning all state_keys. | ||||
* | | Add Measure block for persist_events | Richard van der Hoff | 2018-03-13 | 1 | -4/+5 |
| | | | | | | | | This seems like a useful thing to measure. | ||||
* | | Fix race in sync when joining room | Erik Johnston | 2018-03-07 | 2 | -2/+27 |
| | | | | | | | | | | | | | | | | | | | | | | The race happens when the user joins a room at the same time as doing a sync. We fetch the current token and then get the rooms the user is in. If the join happens after the current token, but before we get the rooms we end up sending down a partial room entry in the sync. This is fixed by looking at the stream ordering of the membership returned by get_rooms_for_user, and handling the case when that stream ordering is after the current token. | ||||
* | | Merge pull request #2946 from matrix-org/rav/timestamp_to_purge | Richard van der Hoff | 2018-03-06 | 1 | -0/+27 |
|\ \ | | | | | | | Implement purge_history by timestamp | ||||
| * | | Provide a means to pass a timestamp to purge_history | Richard van der Hoff | 2018-03-05 | 1 | -0/+27 |
| | | | |||||
* | | | Merge pull request #2948 from matrix-org/erikj/kill_as_sync | Erik Johnston | 2018-03-06 | 2 | -153/+5 |
|\ \ \ | | | | | | | | | Remove ability for AS users to call /events and /sync | ||||
| * | | | Remove ability for AS users to call /events and /sync | Erik Johnston | 2018-03-05 | 2 | -153/+5 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This functionality has been deprecated for a while as well as being broken for a while. Instead of fixing it lets just remove it entirely. See: https://github.com/matrix-org/matrix-doc/issues/1144 | ||||
* | | | | Merge pull request #2947 from matrix-org/erikj/split_directory_store | Erik Johnston | 2018-03-05 | 1 | -23/+27 |
|\ \ \ \ | |_|/ / |/| | | | Split Directory store | ||||
| * | | | Fix cache invalidation on deletion | Erik Johnston | 2018-03-05 | 1 | -1/+4 |
| | | | | |||||
| * | | | Split Directory store | Erik Johnston | 2018-03-05 | 1 | -22/+23 |
| |/ / | |||||
* | | | Merge pull request #2943 from ↵ | Richard van der Hoff | 2018-03-05 | 1 | -12/+71 |
|\ \ \ | |/ / |/| | | | | | | | | matrix-org/rav/fix_find_first_stream_ordering_after_ts Test and fix find_first_stream_ordering_after_ts | ||||
| * | | Test and fix find_first_stream_ordering_after_ts | Richard van der Hoff | 2018-03-05 | 1 | -15/+53 |
| | | | | | | | | | | | | It seemed to suffer from a bunch of off-by-one errors. | ||||
| * | | Add find_first_stream_ordering_after_ts | Richard van der Hoff | 2018-03-05 | 1 | -0/+21 |
| | | | | | | | | | | | | Expose this as a public function which can be called outside a txn | ||||
* | | | Merge pull request #2934 from matrix-org/erikj/cache_fix | Erik Johnston | 2018-03-05 | 2 | -13/+15 |
|\ \ \ | | | | | | | | | Fix bug with delayed cache invalidation stream | ||||
| * | | | Fix bug with delayed cache invalidation stream | Erik Johnston | 2018-03-02 | 2 | -13/+15 |
| | | | | | | | | | | | | | | | | | | | | | | | | We poked the notifier before updated the current token for the cache invalidation stream. This mean that sometimes the update wouldn't be sent until the next time a cache was invalidated. | ||||
* | | | | Split registration store | Erik Johnston | 2018-03-02 | 1 | -57/+61 |
|/ / / | |||||
* | | | Merge pull request #2925 from matrix-org/erikj/split_sig_fed | Erik Johnston | 2018-03-01 | 2 | -133/+143 |
|\ \ \ | |/ / |/| | | Split out SignatureStore and EventFederationStore | ||||
| * | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/split_sig_fed | Erik Johnston | 2018-03-01 | 4 | -371/+406 |
| |\ \ | |||||
| * | | | Stub out broken function only used for cache | Erik Johnston | 2018-03-01 | 1 | -1/+3 |
| | | | | |||||
| * | | | Split out SignatureStore and EventFederationStore | Erik Johnston | 2018-03-01 | 2 | -132/+140 |
| | | | | |||||
* | | | | Merge pull request #2927 from matrix-org/erikj/read_marker_caches | Erik Johnston | 2018-03-01 | 2 | -2/+39 |
|\ \ \ \ | |_|/ / |/| | | | Improve caching for read_marker API | ||||
| * | | | Fewer lies are better | Erik Johnston | 2018-03-01 | 1 | -2/+2 |
| | | | | |||||
| * | | | Improve caching for read_marker API | Erik Johnston | 2018-03-01 | 1 | -0/+35 |
| | | | | | | | | | | | | | | | | | | | | | | | | We add a new storage function to get a paritcular type of room account data. This allows us to prefill the cache when updating that acount data. | ||||
| * | | | Add some caches to help read marker API | Erik Johnston | 2018-03-01 | 2 | -2/+4 |
| |/ / | |||||
* | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2018-03-01 | 3 | -197/+206 |
|\ \ \ | | | | | | | | | | | | | erikj/split_stream_store | ||||
| * \ \ | Merge pull request #2923 from matrix-org/erikj/stream_ago_worker | Erik Johnston | 2018-03-01 | 2 | -79/+85 |
| |\ \ \ | | | | | | | | | | | Calculate stream_ordering_month_ago correctly on workers | ||||
| | * | | | Default stream_ordering_*_ago to None | Erik Johnston | 2018-03-01 | 1 | -2/+2 |
| | | | | | |||||
| | * | | | Fix comment typo | Erik Johnston | 2018-03-01 | 1 | -1/+1 |
| | | | | | |||||
| | * | | | Calculate stream_ordering_month_ago correctly on workers | Erik Johnston | 2018-03-01 | 2 | -79/+85 |
| | |/ / | |||||
| * / / | Split up RoomStore | Erik Johnston | 2018-03-01 | 1 | -118/+121 |
| |/ / | |||||
* | | | Remove unused variables | Erik Johnston | 2018-03-01 | 1 | -8/+1 |
| | | | |||||
* | | | Document abstract class and method better | Erik Johnston | 2018-03-01 | 1 | -8/+13 |
| | | | |||||
* | | | Split out stream store | Erik Johnston | 2018-03-01 | 2 | -165/+193 |
|/ / | |||||
* | | Move storage functions for push calculations | Erik Johnston | 2018-02-27 | 4 | -87/+99 |
| | | | | | | | | This will allow push actions for an event to be calculated on workers. | ||||
* | | Merge pull request #2904 from matrix-org/erikj/receipt_cache_invalidation | Erik Johnston | 2018-02-27 | 1 | -14/+14 |
|\ \ | | | | | | | Fix missing invalidations for receipt storage | ||||
| * | | Fix missing invalidations for receipt storage | Erik Johnston | 2018-02-21 | 1 | -14/+14 |
| | | | |||||
* | | | Merge pull request #2903 from matrix-org/erikj/split_roommember_store | Erik Johnston | 2018-02-27 | 1 | -179/+182 |
|\ \ \ | | | | | | | | | Split out RoomMemberStore | ||||
| * \ \ | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2018-02-23 | 8 | -501/+607 |
| |\ \ \ | | | | | | | | | | | | | | | | erikj/split_roommember_store | ||||
| * | | | | Update copyright | Erik Johnston | 2018-02-23 | 2 | -0/+2 |
| | | | | | |||||
| * | | | | Split out RoomMemberStore | Erik Johnston | 2018-02-21 | 1 | -179/+181 |
| | | | | | |||||
* | | | | | Merge pull request #2901 from matrix-org/erikj/split_as_stores | Erik Johnston | 2018-02-27 | 1 | -9/+22 |
|\ \ \ \ \ | | | | | | | | | | | | | Split AS stores | ||||
| * | | | | | Add comment | Erik Johnston | 2018-02-27 | 1 | -0/+4 |
| | | | | | | |||||
| * | | | | | Update copyright | Erik Johnston | 2018-02-23 | 1 | -0/+1 |
| | | | | | | |||||
| * | | | | | Split AS stores | Erik Johnston | 2018-02-21 | 1 | -9/+17 |
| |/ / / / | |||||
* | | | | | Merge pull request #2892 from matrix-org/erikj/batch_inserts_push_actions | Erik Johnston | 2018-02-26 | 1 | -17/+36 |
|\ \ \ \ \ | | | | | | | | | | | | | Batch inserts into event_push_actions_staging | ||||
| * | | | | | Batch inserts into event_push_actions_staging | Erik Johnston | 2018-02-20 | 1 | -17/+36 |
| | | | | | | |||||
* | | | | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2018-02-26 | 9 | -560/+700 |
|\ \ \ \ \ \ | | |_|/ / / | |/| | | | | | | | | | | erikj/handle_unpersisted_events_push | ||||
| * | | | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2018-02-23 | 7 | -424/+532 |
| |\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | erikj/split_event_push_actions | ||||
| | * \ \ \ \ | Merge pull request #2902 from matrix-org/erikj/split_events_store | Erik Johnston | 2018-02-23 | 2 | -359/+402 |
| | |\ \ \ \ \ | | | | | | | | | | | | | | | | | Split out get_events and co into a worker store | ||||
| | | * | | | | | Split EventsWorkerStore into separate file | Erik Johnston | 2018-02-23 | 2 | -360/+400 |
| | | | | | | | | |||||
| | | * | | | | | Update copyright | Erik Johnston | 2018-02-23 | 1 | -0/+1 |
| | | | | | | | | |||||
| | | * | | | | | Remove redundant clock | Erik Johnston | 2018-02-23 | 1 | -3/+0 |
| | | | | | | | | |||||
| | | * | | | | | _event_persist_queue shouldn't be in worker store | Erik Johnston | 2018-02-23 | 1 | -4/+4 |
| | | | |/ / / | | | |/| | | | |||||
| | | * | | | | Split out get_events and co into a worker store | Erik Johnston | 2018-02-21 | 1 | -345/+350 |
| | | | |/ / | | | |/| | | |||||
| | * | | | | Merge pull request #2899 from matrix-org/erikj/split_pushers | Erik Johnston | 2018-02-23 | 1 | -4/+7 |
| | |\ \ \ \ | | | | | | | | | | | | | | | Split PusherStore | ||||
| | | * | | | | Update copyright | Erik Johnston | 2018-02-23 | 1 | -0/+1 |
| | | | | | | | |||||
| | | * | | | | Split PusherStore | Erik Johnston | 2018-02-21 | 1 | -4/+6 |
| | | |/ / / | |||||
| | * | | | | Merge pull request #2898 from matrix-org/erikj/split_push_rules_store | Erik Johnston | 2018-02-23 | 2 | -28/+57 |
| | |\ \ \ \ | | | | | | | | | | | | | | | Split PushRulesStore | ||||
| | | * | | | | Update copyright | Erik Johnston | 2018-02-23 | 2 | -0/+2 |
| | | | | | | | |||||
| | | * | | | | Split PushRulesStore | Erik Johnston | 2018-02-21 | 2 | -28/+55 |
| | | |/ / / | |||||
| | * | | | | Update copyright | Erik Johnston | 2018-02-23 | 2 | -0/+2 |
| | | | | | | |||||
| | * | | | | Use absolute imports | Erik Johnston | 2018-02-23 | 2 | -3/+3 |
| | | | | | | |||||
| | * | | | | Split AccountDataStore and TagStore | Erik Johnston | 2018-02-21 | 3 | -33/+65 |
| | |/ / / | |||||
| * | | | | Update copyright | Erik Johnston | 2018-02-23 | 2 | -0/+2 |
| | | | | | |||||
| * | | | | Split out EventPushActionWorkerStore | Erik Johnston | 2018-02-21 | 1 | -71/+73 |
| |/ / / | |||||
| * | | | Raise exception in abstract method | Erik Johnston | 2018-02-20 | 1 | -1/+1 |
| | | | | |||||
| * | | | Fix comment | Erik Johnston | 2018-02-20 | 1 | -1/+1 |
| | | | | |||||
| * | | | Use abstract base class to access stream IDs | Erik Johnston | 2018-02-20 | 1 | -15/+27 |
| | | | | |||||
| * | | | Split ReceiptsStore | Erik Johnston | 2018-02-20 | 2 | -48/+64 |
| |/ / | |||||
* | | | Actually use new param | Erik Johnston | 2018-02-21 | 1 | -1/+3 |
| | | | |||||
* | | | Ensure all push actions are deleted from staging | Erik Johnston | 2018-02-20 | 2 | -2/+19 |
| | | | |||||
* | | | Refactor _set_push_actions_for_event_and_users_txn to use events_and_contexts | Erik Johnston | 2018-02-20 | 2 | -33/+41 |
|/ / | |||||
* | | (Really) fix tablescan of event_push_actions on purge | Richard van der Hoff | 2018-02-16 | 1 | -1/+0 |
| | | | | | | | | | | commit 278d21b5 added new code to avoid the tablescan, but didn't remove the old :/ | ||||
* | | Fix typo of double is_highlight | Erik Johnston | 2018-02-16 | 1 | -1/+1 |
| | | |||||
* | | Comments | Erik Johnston | 2018-02-16 | 2 | -1/+6 |
| | | |||||
* | | Ensure that we delete staging push actions on errors | Erik Johnston | 2018-02-15 | 1 | -0/+16 |
| | | |||||
* | | Remove context.push_actions | Erik Johnston | 2018-02-15 | 1 | -4/+3 |
| | | |||||
* | | Update event_push_actions table from staging table | Erik Johnston | 2018-02-15 | 2 | -22/+39 |
| | | |||||
* | | Store push actions in staging area | Erik Johnston | 2018-02-15 | 2 | -0/+51 |
| | | |||||
* | | Don't serialize current state over replication | Erik Johnston | 2018-02-15 | 1 | -0/+14 |
| | | |||||
* | | Fix state group storage bug in workers | Erik Johnston | 2018-02-15 | 1 | -41/+41 |
| | | | | | | | | | | We needed to move `_count_state_group_hops_txn` to the StateGroupWorkerStore. | ||||
* | | Merge pull request #2867 from matrix-org/rav/rework_purge | Richard van der Hoff | 2018-02-15 | 1 | -35/+83 |
|\ \ | | | | | | | purge_history cleanups | ||||
| * | | purge_history: fix sqlite syntax error | Richard van der Hoff | 2018-02-14 | 1 | -1/+4 |
| | | | | | | | | | | | | apparently sqlite insists on indexes being named | ||||
| * | | purge_history: handle sqlite asshattery | Richard van der Hoff | 2018-02-14 | 1 | -19/+27 |
| | | | | | | | | | | | | | | | apparently creating a temporary table commits the transaction. because that's a useful thing. | ||||
| * | | purge_history: fix index use | Richard van der Hoff | 2018-02-14 | 1 | -0/+14 |
| | | | | | | | | | | | | | | | event_push_actions doesn't have an index on event_id, so we need to specify room_id. | ||||
| * | | Rework event purge to use a temporary table | Richard van der Hoff | 2018-02-14 | 1 | -35/+58 |
| | | | | | | | | | | | | | | | ... which should speed things up by reducing the amount of data being shuffled across the connection | ||||
* | | | Merge pull request #2769 from matrix-org/matthew/hit_the_gin | Richard van der Hoff | 2018-02-14 | 5 | -20/+110 |
|\ \ \ | | | | | | | | | switch back from GIST to GIN indexes | ||||
| * | | | remove overzealous exception handling | Richard van der Hoff | 2018-02-14 | 1 | -18/+10 |
| | | | | |||||
| * | | | Merge branch 'matthew/gin_work_mem' into matthew/hit_the_gin | Richard van der Hoff | 2018-02-13 | 13 | -312/+605 |
| |\ \ \ | |||||
| | * \ \ | Merge branch 'develop' into matthew/gin_work_mem | Richard van der Hoff | 2018-02-13 | 8 | -223/+390 |
| | |\ \ \ | |||||
| | * | | | | Factor out common code for search insert | Richard van der Hoff | 2018-02-04 | 1 | -33/+56 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | we can reuse the same code as is used for event insert, for doing the background index population. | ||||
| | * | | | | Clean up work_mem handling | Richard van der Hoff | 2018-02-03 | 1 | -11/+41 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add some comments and improve exception handling when twiddling work_mem for the search update | ||||
| | * | | | | Move store_event_search_txn to SearchStore | Richard van der Hoff | 2018-02-03 | 2 | -37/+43 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ... as a precursor to making event storing and doing the bg update share some code. | ||||
| | * | | | | Merge branch 'develop' into matthew/gin_work_mem | Richard van der Hoff | 2018-02-03 | 7 | -39/+100 |
| | |\ \ \ \ | |||||
| | * | | | | | oops | hera | 2018-01-09 | 2 | -2/+2 |
| | | | | | | | |||||
| | * | | | | | oops, tweak work_mem when actually storing | Matthew Hodgson | 2018-01-09 | 1 | -0/+2 |
| | | | | | | | |||||
| | * | | | | | avoid 80s GIN inserts by tweaking work_mem | Matthew Hodgson | 2018-01-09 | 1 | -0/+4 |
| | | |_|_|/ | | |/| | | | | | | | | | | | | | | | see https://github.com/matrix-org/synapse/issues/2753 for details | ||||
| * | | | | | move search reindex to schema 47 | Richard van der Hoff | 2018-02-13 | 2 | -1/+1 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We're up to schema v47 on develop now, so this will have to go in there to have an effect. This might cause an error if somebody has already run it in the v46 guise, and runs it again in the v47 guise, because it will cause a duplicate entry in the bbackground_updates table. On the other hand, the entry is removed once it is complete, and it is unlikely that anyone other than matrix.org has run it on v46. The update itself is harmless to re-run because it deliberately copes with the index already existing. | ||||
| * | | | | | GIN reindex: Fix syntax errors, improve exception handling | Richard van der Hoff | 2018-02-13 | 1 | -13/+27 |
| | | | | | | |||||
| * | | | | | Reinstate event_search_postgres_gist handler | Richard van der Hoff | 2018-02-02 | 3 | -6/+31 |
| | | | | | | | | | | | | | | | | | | | | | | | | People may have queued updates for this, so we can't just delete it. | ||||
| * | | | | | fix GIST->GIN switch | Matthew Hodgson | 2018-01-09 | 3 | -14/+37 |
| | | | | | | |||||
| * | | | | | switch back from GIST to GIN indexes | Matthew Hodgson | 2018-01-09 | 1 | -8/+13 |
| |/ / / / | |||||
* | | | | | Merge pull request #2854 from matrix-org/erikj/event_create_worker | Erik Johnston | 2018-02-13 | 1 | -0/+13 |
|\ \ \ \ \ | |_|_|_|/ |/| | | | | Create a worker for event creation | ||||
| * | | | | Add replication http endpoint for event sending | Erik Johnston | 2018-02-07 | 1 | -0/+13 |
| | | | | | |||||
* | | | | | Fix log message in purge_history | Richard van der Hoff | 2018-02-13 | 1 | -2/+1 |
| | | | | | | | | | | | | | | | | | | | | (we don't just remove remote events) | ||||
* | | | | | Merge pull request #2864 from matrix-org/rav/persist_event_caching | Richard van der Hoff | 2018-02-13 | 1 | -56/+40 |
|\ \ \ \ \ | |_|_|_|/ |/| | | | | Use StateResolutionHandler to resolve state in persist_events | ||||
| * | | | | style nit | Richard van der Hoff | 2018-02-13 | 1 | -1/+1 |
| | | | | | |||||
| * | | | | Use StateResolutionHandler to resolve state in persist events | Richard van der Hoff | 2018-02-05 | 1 | -48/+24 |
| | | | | | | | | | | | | | | | | | | | | ... and thus benefit (hopefully) from its cache. | ||||
| * | | | | Flatten _get_new_state_after_events | Richard van der Hoff | 2018-02-05 | 1 | -44/+46 |
| | | | | | | | | | | | | | | | | | | | | rejig the if statements to simplify the logic and reduce indentation | ||||
| * | | | | Check that events being persisted have state_group | Richard van der Hoff | 2018-02-05 | 1 | -4/+9 |
| | | | | | |||||
| * | | | | Add event_map param to resolve_state_groups | Richard van der Hoff | 2018-02-05 | 1 | -0/+1 |
| | | | | | |||||
* | | | | | Merge pull request #2858 from matrix-org/rav/purge_updates | Richard van der Hoff | 2018-02-09 | 1 | -33/+61 |
|\ \ \ \ \ | |_|/ / / |/| | | | | delete_local_events for purge_room_history | ||||
| * | | | | purge: move room_depth update to end | Richard van der Hoff | 2018-02-09 | 1 | -6/+12 |
| | | | | | | | | | | | | | | | | | | | | ... to avoid locking the table for too long | ||||
| * | | | | delete_local_events for purge_history | Richard van der Hoff | 2018-02-09 | 1 | -7/+28 |
| | | | | | | | | | | | | | | | | | | | | Add a flag which makes the purger delete local events | ||||
| * | | | | purge: Move cache invalidation to more appropriate place | Richard van der Hoff | 2018-02-09 | 1 | -4/+4 |
| | | | | | | | | | | | | | | | | | | | | it was a bit of a non-sequitur there | ||||
| * | | | | bump purge logging to info | Richard van der Hoff | 2018-02-09 | 1 | -13/+14 |
| | | | | | | | | | | | | | | | | | | | | | | | | | this thing takes ages and the only sign of any progress is the logs, so having some logs is useful. | ||||
| * | | | | rename delete_old_state -> purge_history | Richard van der Hoff | 2018-02-09 | 1 | -7/+7 |
| | | | | | | | | | | | | | | | | | | | | (beacause it deletes more than state) | ||||
* | | | | | Store state groups separately from events (#2784) | Erik Johnston | 2018-02-06 | 6 | -103/+166 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Split state group persist into seperate storage func * Add per database engine code for state group id gen * Move store_state_group to StateReadStore This allows other workers to use it, and so resolve state. * Hook up store_state_group * Fix tests * Rename _store_mult_state_groups_txn * Rename StateGroupReadStore * Remove redundant _have_persisted_state_group_txn * Update comments * Comment compute_event_context * Set start val for state_group_id_seq ... otherwise we try to recreate old state groups * Update comments * Don't store state for outliers * Update comment * Update docstring as state groups are ints | ||||
* | | | | | Merge pull request #2849 from matrix-org/rav/clean_up_state_delta | Richard van der Hoff | 2018-02-05 | 1 | -10/+23 |
|\ \ \ \ \ | | |/ / / | |/| | | | Remove redundant return value from _calculate_state_delta | ||||
| * | | | | Remove redundant return value from _calculate_state_delta | Richard van der Hoff | 2018-02-05 | 1 | -10/+23 |
| | | | | | | | | | | | | | | | | | | | | | | | | | we already have the state from _get_new_state_after_events, so returning it from _calculate_state_delta is just confusing. | ||||
* | | | | | Factor out common code for search insert | Richard van der Hoff | 2018-02-05 | 1 | -33/+62 |
| | | | | | | | | | | | | | | | | | | | | | | | | | we can reuse the same code as is used for event insert, for doing the background index population. | ||||
* | | | | | Move store_event_search_txn to SearchStore | Richard van der Hoff | 2018-02-05 | 2 | -35/+41 |
|/ / / / | | | | | | | | | | | | | | | | | ... as a precursor to making event storing and doing the bg update share some code. | ||||
* | | | | Merge pull request #2841 from matrix-org/rav/refactor_calc_state_delta | Richard van der Hoff | 2018-02-02 | 1 | -18/+39 |
|\ \ \ \ | | | | | | | | | | | factor _get_new_state_after_events out of _calculate_state_delta | ||||
| * | | | | factor _get_new_state_after_events out of _calculate_state_delta | Richard van der Hoff | 2018-01-31 | 1 | -18/+39 |
| | | | | | | | | | | | | | | | | | | | | This reduces the scope of a bunch of variables | ||||
* | | | | | Merge branch 'develop' into travis/admin-list-media | Travis Ralston | 2018-02-01 | 3 | -11/+11 |
|\ \ \ \ \ | | |_|_|/ | |/| | | | |||||
| * | | | | Merge pull request #2837 from matrix-org/rav/fix_quarantine_media | Richard van der Hoff | 2018-02-01 | 1 | -1/+1 |
| |\ \ \ \ | | |/ / / | |/| | | | Fix sql error in quarantine_media | ||||
| | * | | | Fix sql error in quarantine_media | Richard van der Hoff | 2018-01-30 | 1 | -1/+1 |
| | | | | | |||||
| * | | | | Improve exception handling in persist_event | Richard van der Hoff | 2018-01-29 | 1 | -3/+3 |
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1. use `deferred.errback()` instead of `deferred.errback(e)`, which means that a Failure object will be constructed using the current exception state, *including* its stack trace - so the stack trace is saved in the Failure, leading to better exception reports. 2. Set `consumeErrors=True` on the ObservableDeferred, because we know that there will always be at least one observer - which avoids a spurious "CRITICAL: unhandled exception in Deferred" error in the logs | ||||
| * / / | Fix SQL for user search | Richard van der Hoff | 2018-01-27 | 1 | -7/+7 |
| |/ / | | | | | | | | | | | | | | | | fix some syntax errors for user search when search_all_users is enabled fixes #2801, hopefully | ||||
* | | | pep8 | Travis Ralston | 2018-01-31 | 1 | -9/+12 |
| | | | | | | | | | Signed-off-by: Travis Ralston <travpc@gmail.com> | ||||
* | | | Documentation and naming | Travis Ralston | 2018-01-31 | 1 | -7/+26 |
| | | | | | | | | | Signed-off-by: Travis Ralston <travpc@gmail.com> | ||||
* | | | Appease the linter | Travis Ralston | 2018-01-20 | 1 | -5/+5 |
| | | | | | | | | | | | | | | | These are ids anyways, not mxc uris. Signed-off-by: Travis Ralston <travpc@gmail.com> | ||||
* | | | Add an admin route to get all the media in a room | Travis Ralston | 2018-01-20 | 1 | -56/+75 |
|/ / | | | | | | | | | This is intended to be used by administrators to monitor the media that is passing through their server, if they wish. Signed-off-by: Travis Ralston <travpc@gmail.com> | ||||
* | | Merge pull request #2805 from matrix-org/rav/log_state_res | Richard van der Hoff | 2018-01-17 | 1 | -0/+6 |
|\ \ | | | | | | | Log room when doing state resolution | ||||
| * | | Log room when doing state resolution | Richard van der Hoff | 2018-01-17 | 1 | -0/+6 |
| | | | | | | | | | | | | Mostly because it helps figure out what is prompting the resolution | ||||
* | | | Merge pull request #2783 from matrix-org/erikj/media_last_accessed | Erik Johnston | 2018-01-17 | 3 | -4/+37 |
|\ \ \ | | | | | | | | | Keep track of last access time for local media | ||||
| * | | | Remove lost comment | Erik Johnston | 2018-01-17 | 1 | -3/+0 |
| | | | | |||||
| * | | | Keep track of last access time for local media | Erik Johnston | 2018-01-17 | 3 | -4/+40 |
| | | | | |||||
* | | | | Merge pull request #2803 from matrix-org/matthew/fix-userdir-sql | Matthew Hodgson | 2018-01-17 | 1 | -2/+7 |
|\ \ \ \ | | | | | | | | | | | fix SQL when searching all users | ||||
| * | | | | fix SQL when searching all users | Matthew Hodgson | 2018-01-17 | 1 | -2/+7 |
| | | | | | |||||
* | | | | | Split resolve_events into two functions | Richard van der Hoff | 2018-01-17 | 1 | -2/+2 |
|/ / / / | | | | | | | | | | | | | ... so that the return type doesn't depend on the arg types | ||||
* | | | | Track DB scheduling delay per-request | Richard van der Hoff | 2018-01-16 | 1 | -1/+3 |
| | | | | | | | | | | | | | | | | | | | | | | | | For each request, track the amount of time spent waiting for a db connection. This entails adding it to the LoggingContext and we may as well add metrics for it while we are passing. | ||||
* | | | | rework runInteraction in terms of runConnection | Richard van der Hoff | 2018-01-16 | 1 | -20/+31 |
|/ / / | | | | | | | | | | ... so that we can share the code | ||||
* / / | Fix a logcontext leak in persist_events | Richard van der Hoff | 2018-01-16 | 1 | -1/+8 |
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | ObserveableDeferred expects its callbacks to be called without any logcontexts, whereas it turns out we were calling them with the logcontext of the request which initiated the persistence loop. It seems wrong that we are attributing work done in the persistence loop to the request that happened to initiate it, so let's solve this by dropping the logcontext for it. (I'm not sure this actually causes any real problems other than messages in the debug log, but let's clean it up anyway) | ||||
* / | Remove dead code related to default thumbnails | Erik Johnston | 2018-01-09 | 1 | -3/+0 |
|/ | |||||
* | fix StoreError syntax | Matthew Hodgson | 2017-12-05 | 1 | -1/+1 |
| | |||||
* | fix pep8 and tests | Matthew Hodgson | 2017-12-04 | 1 | -4/+3 |
| | |||||
* | switch to a simpler 'search_all_users' button as per review feedback | Matthew Hodgson | 2017-12-04 | 1 | -24/+16 |
| | |||||
* | Merge branch 'develop' into matthew/search-all-local-users | Matthew Hodgson | 2017-11-30 | 7 | -55/+143 |
|\ | |||||
| * | Remove pushers when deleting access tokens | Richard van der Hoff | 2017-11-29 | 1 | -5/+5 |
| | | | | | | | | | | Whenever an access token is invalidated, we should remove the associated pushers. | ||||
| * | Merge pull request #2697 from matrix-org/rav/fix_urlcache_index_error | Richard van der Hoff | 2017-11-27 | 5 | -14/+82 |
| |\ | | | | | | | Fix error on sqlite 3.7 | ||||
| | * | fix sql fails | Richard van der Hoff | 2017-11-22 | 1 | -1/+1 |
| | | | |||||
| | * | Check database in has_completed_background_updates | Richard van der Hoff | 2017-11-22 | 2 | -11/+32 |
| | | | | | | | | | | | | so that the right thing happens on workers. | ||||
| | * | Fix error on sqlite 3.7 | Richard van der Hoff | 2017-11-21 | 4 | -5/+52 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Create the url_cache index on local_media_repository as a background update, so that we can detect whether we are on sqlite or not and create a partial or complete index accordingly. To avoid running the cleanup job before we have built the index, add a bailout which will defer the cleanup if the bg updates are still running. Fixes https://github.com/matrix-org/synapse/issues/2572. | ||||
| * | | Avoid retrying forever on IntegrityError | Richard van der Hoff | 2017-11-27 | 1 | -0/+7 |
| | | | |||||
| * | | Merge pull request #2689 from matrix-org/rav/unlock_account_data_upsert | Richard van der Hoff | 2017-11-21 | 1 | -36/+49 |
| |\ \ | | |/ | |/| | Avoid locking account_data tables for upserts | ||||
| | * | Avoid locking account_data tables for upserts | Richard van der Hoff | 2017-11-16 | 1 | -36/+49 |
| | | | |||||
* | | | remove null constraint on user_dir.room_id | Matthew Hodgson | 2017-11-30 | 1 | -0/+35 |
| | | | |||||
* | | | fix alternation operator for FTS4 - how did this ever work!? | Matthew Hodgson | 2017-11-30 | 1 | -1/+1 |
| | | | |||||
* | | | fix thinkos galore | Matthew Hodgson | 2017-11-30 | 2 | -16/+35 |
| | | | |||||
* | | | untested WIP but might actually work | Matthew Hodgson | 2017-11-29 | 3 | -13/+38 |
| | | | |||||
* | | | Add user_directory_include_pattern config param to expand search results to ↵ | Matthew Hodgson | 2017-11-29 | 1 | -4/+12 |
|/ / | | | | | | | | | | | | | | | | | | | additional users Initial commit; this doesn't work yet - the LIKE filtering seems too aggressive. It also needs _do_initial_spam to be aware of prepopulating the whole user_directory_search table with all users... ...and it needs a handle_user_signup() or something to be added so that new signups get incrementally added to the table too. Committing it here as a WIP | ||||
* / | Avoid locking for upsert on pushers tables | Richard van der Hoff | 2017-11-16 | 2 | -5/+51 |
|/ | | | | | * replace the upsert into deleted_pushers with an insert * no need to lock for upsert on pusher_throttle | ||||
* | Fix broken ref to IntegrityError | Richard van der Hoff | 2017-11-16 | 1 | -1/+1 |
| | |||||
* | Avoid locking `pushers` table on upsert | Richard van der Hoff | 2017-11-16 | 1 | -27/+28 |
| | | | | | Now that _simple_upsert will retry on IntegrityError, we don't need to lock the table. | ||||
* | _simple_upsert: retry on IntegrityError | Richard van der Hoff | 2017-11-16 | 1 | -6/+29 |
| | | | | | | wrap the call to _simple_upsert_txn in a loop so that we retry on an integrityerror: this means we can avoid locking the table provided there is an unique index. | ||||
* | Cleanup in _simple_upsert_txn | Richard van der Hoff | 2017-11-16 | 1 | -16/+17 |
| | | | | Bail out early to reduce indentation | ||||
* | Merge pull request #2661 from matrix-org/rav/statereadstore | Richard van der Hoff | 2017-11-15 | 2 | -216/+231 |
|\ | | | | | Pull out bits of StateStore to a mixin | ||||
| * | Pull out bits of StateStore to a mixin | Richard van der Hoff | 2017-11-14 | 1 | -204/+220 |
| | | | | | | | | | | | | | | | | | | ... so that we don't need to secretly gut-wrench it for use in the slaved stores. I haven't done the other stores yet, but we should. I'm tired of the workers breaking every time we tweak the stores because I forgot to gut-wrench the right method. fixes https://github.com/matrix-org/synapse/issues/2655. | ||||
| * | Revert "Revert "move _state_group_cache to statestore"" | Richard van der Hoff | 2017-11-14 | 2 | -13/+12 |
| | | | | | | | | | | | | | | We're going to fix this properly on this branch, so that the _state_group_cache can end up in StateGroupReadStore. This reverts commit ab335edb023d66cd0be439e045b10ca104b73cb5. | ||||
* | | Merge pull request #2675 from matrix-org/rav/remove_broken_logcontext_funcs | Richard van der Hoff | 2017-11-15 | 1 | -2/+2 |
|\ \ | |/ |/| | Remove preserve_context_over_{fn, deferred} | ||||
| * | Remove preserve_context_over_{fn, deferred} | Richard van der Hoff | 2017-11-14 | 1 | -2/+2 |
| | | | | | | | | | | Both of these functions ae known to leak logcontexts. Replace the remaining calls to them and kill them off. | ||||
* | | Make __init__ consitstent across Store heirarchy | Richard van der Hoff | 2017-11-13 | 16 | -32/+32 |
|/ | | | | | | Add db_conn parameters to the `__init__` methods of the *Store classes, so that they are all consistent, which makes the multiple inheritance work correctly (and so that we can later extract mixins which can be used in the slavedstores) | ||||
* | Revert "move _state_group_cache to statestore" | Erik Johnston | 2017-11-13 | 2 | -12/+13 |
| | | | | This reverts commit f5cf3638e9c6086e1c33ddad8eda9298cf53a58e. | ||||
* | Up cache size of get_global_account_data_by_type_for_user | Erik Johnston | 2017-11-13 | 1 | -1/+1 |
| | |||||
* | Fix typo | Erik Johnston | 2017-11-09 | 1 | -1/+1 |
| | |||||
* | Merge pull request #2656 from matrix-org/rav/fix_deactivate | Richard van der Hoff | 2017-11-09 | 1 | -2/+1 |
|\ | | | | | Fix 'NoneType' not iterable in /deactivate | ||||
| * | Fix 'NoneType' not iterable in /deactivate | Richard van der Hoff | 2017-11-09 | 1 | -2/+1 |
| | | | | | | | | make sure we actually return a value from user_delete_access_tokens | ||||
* | | Have an explicit API to update room config | Erik Johnston | 2017-11-08 | 1 | -0/+13 |
| | | |||||
* | | Revert "Modify group room association API to allow modification of is_public" | Erik Johnston | 2017-11-08 | 1 | -13/+7 |
| | | |||||
* | | Merge pull request #2637 from spantaleev/avoid-noop-media-deletes | Erik Johnston | 2017-11-08 | 1 | -0/+6 |
|\ \ | | | | | | | Avoid no-op media deletes | ||||
| * | | Avoid no-op media deletes | Slavi Pantaleev | 2017-11-04 | 1 | -0/+6 |
| | | | | | | | | | | | | | | | | | | | | | | | | If there are no media entries to delete, avoid creating transactions, prepared statements and unnecessary log entries. Signed-off-by: Slavi Pantaleev <slavi@devture.com> | ||||
* | | | Merge pull request #2649 from matrix-org/rav/fix_delta_on_state_res | Richard van der Hoff | 2017-11-08 | 2 | -13/+12 |
|\ \ \ | | | | | | | | | Fix bug in state group storage | ||||
| * | | | move _state_group_cache to statestore | Richard van der Hoff | 2017-11-07 | 2 | -13/+12 |
| | |/ | |/| | | | | | | | this is internal to statestore, so let's keep it there. | ||||
* | | | Merge pull request #2643 from matrix-org/matthew/user_dir_typos | Matthew Hodgson | 2017-11-07 | 4 | -12/+36 |
|\ \ \ | |/ / |/| | | Fix various embarrassing typos around user_directory and add some doc. | ||||
| * | | create new indexes before dropping old ones to keep safetynet in place | Matthew Hodgson | 2017-11-07 | 1 | -2/+4 |
| | | | |||||
| * | | s/users_in_pubic_room/users_in_public_rooms/g | Matthew Hodgson | 2017-11-04 | 1 | -2/+2 |
| | | | |||||
| * | | s/users_in_pubic_room/users_in_public_rooms/g | Matthew Hodgson | 2017-11-04 | 2 | -10/+32 |
| | | | |||||
| * | | fix copyright.... | Matthew Hodgson | 2017-11-04 | 1 | -1/+1 |
| | | | |||||
| * | | s/popualte/populate/ | Matthew Hodgson | 2017-11-04 | 1 | -1/+1 |
| |/ | |||||
* / | Remember to pick is_admin out of the db | Luke Barnard | 2017-11-07 | 1 | -1/+1 |
|/ | |||||
* | Notify auth providers on logout | Richard van der Hoff | 2017-11-01 | 1 | -5/+8 |
| | | | | Provide a hook by which auth providers can be notified of logouts. | ||||
* | Merge pull request #2617 from matrix-org/matthew/auto-displayname | Matthew Hodgson | 2017-11-01 | 1 | -2/+4 |
|\ | | | | | automatically set default displayname on register | ||||
| * | switch to setting default displayname in the storage layer | Matthew Hodgson | 2017-11-01 | 1 | -2/+4 |
| | | | | | | | | to avoid clobbering guest user displaynames on registration | ||||
* | | Merge pull request #2613 from matrix-org/rav/kill_refresh_tokens | David Baker | 2017-11-01 | 4 | -58/+14 |
|\ \ | |/ |/| | Remove the last vestiges of refresh_tokens | ||||
| * | Remove the last vestiges of refresh_tokens | Richard van der Hoff | 2017-10-31 | 4 | -58/+14 |
| | | |||||
* | | Merge pull request #2612 from matrix-org/luke/groups-room-relationship-is-public | Luke Barnard | 2017-11-01 | 1 | -7/+13 |
|\ \ | |/ |/| | Modify group room association API to allow modification of is_public | ||||
| * | Leave `is_public` as required argument of update_room_group_association | Luke Barnard | 2017-11-01 | 1 | -1/+1 |
| | | |||||
| * | Modify group room association API to allow modification of is_public | Luke Barnard | 2017-10-31 | 1 | -7/+13 |
| | | | | | | | | also includes renamings to make things more consistent. | ||||
* | | DB schema interface for password auth providers | Richard van der Hoff | 2017-10-31 | 2 | -0/+77 |
|/ | | | | | Provide an interface by which password auth providers can register db schema files to be run at startup | ||||
* | Merge branch 'erikj/attestation_local_fix' of github.com:matrix-org/synapse ↵ | Erik Johnston | 2017-10-27 | 1 | -0/+18 |
|\ | | | | | | | into develop | ||||
| * | Fixup | Erik Johnston | 2017-10-27 | 1 | -2/+2 |
| | | |||||
| * | Remove incorrect attestations | Erik Johnston | 2017-10-27 | 1 | -0/+18 |
| | | |||||
* | | Request is_public from database | Luke Barnard | 2017-10-27 | 1 | -1/+3 |
| | | |||||
* | | Create groups with is_public = True | Luke Barnard | 2017-10-27 | 1 | -0/+1 |
| | | |||||
* | | Recreate groups table instead of adding column | Luke Barnard | 2017-10-26 | 1 | -2/+16 |
| | | | | | | | | Adding a column with non-constant default not possible in sqlite3 | ||||
* | | Awful hack to get default true | Luke Barnard | 2017-10-26 | 1 | -1/+2 |
| | | |||||
* | | Bump schema version to 46 | Luke Barnard | 2017-10-26 | 1 | -1/+1 |
| | | |||||
* | | Add is_public to groups table to allow for private groups | Luke Barnard | 2017-10-26 | 1 | -0/+17 |
|/ | | | | | | Prevent group API access to non-members for private groups Also make all the group code paths consistent with `requester_user_id` always being the User ID of the requesting user. | ||||
* | replace 'except:' with 'except Exception:' | Richard van der Hoff | 2017-10-23 | 7 | -8/+8 |
| | | | | what could possibly go wrong | ||||
* | Fix logcontext handling for persist_events | Richard van der Hoff | 2017-10-17 | 1 | -7/+17 |
| | | | | | | | | * don't use preserve_context_over_deferred, which is known broken. * remove a redundant preserve_fn. * add/improve some comments | ||||
* | Implement GET /groups/$groupId/invited_users | Luke Barnard | 2017-10-16 | 1 | -0/+12 |
| | |||||
* | peeeeeeeeep8888888888888888888888888888 | Erik Johnston | 2017-10-11 | 1 | -1/+1 |
| | |||||
* | Fix group stream replication | Erik Johnston | 2017-10-11 | 1 | -7/+7 |
| | | | | | The stream update functions expect the storage function to return a list of tuples. | ||||
* | Fix schema delta versions | Erik Johnston | 2017-10-11 | 3 | -1/+1 |
| | |||||
* | Merge pull request #2466 from matrix-org/erikj/groups_merged | Erik Johnston | 2017-10-11 | 6 | -20/+1529 |
|\ | | | | | Initial Group Implementation | ||||
| * | Merge branch 'develop' into erikj/groups_merged | David Baker | 2017-10-02 | 4 | -23/+129 |
| |\ | |||||
| * | | Add remove room API | Erik Johnston | 2017-09-26 | 1 | -0/+23 |
| | | | |||||
| * | | Add unique index to group_rooms table | Erik Johnston | 2017-09-26 | 1 | -1/+1 |
| | | | |||||
| * | | Remove user from group summary when the leave the group | Erik Johnston | 2017-09-21 | 1 | -0/+8 |
| | | | |||||
| * | | Correctly return next token | Erik Johnston | 2017-09-20 | 1 | -1/+2 |
| | | | |||||
| * | | Fix initial sync | Erik Johnston | 2017-09-20 | 1 | -1/+9 |
| | | | |||||
| * | | Add user profiles to summary from group server | Erik Johnston | 2017-08-25 | 1 | -1/+1 |
| | | | |||||
| * | | Add remote profile cache | Erik Johnston | 2017-08-25 | 2 | -0/+126 |
| | | | |||||
| * | | Add _simple_update | Erik Johnston | 2017-08-25 | 1 | -19/+32 |
| | | | |||||
| * | | Merge pull request #2410 from matrix-org/erikj/groups_publicise | Erik Johnston | 2017-08-21 | 2 | -0/+32 |
| |\ \ | | | | | | | | | Add ability to publicise group membership | ||||
| | * | | Use BOOLEAN rather than TEXT type | Erik Johnston | 2017-08-21 | 1 | -1/+1 |
| | | | | |||||
| | * | | Add bulk group publicised lookup API | Erik Johnston | 2017-08-09 | 1 | -0/+14 |
| | | | | |||||
| | * | | Allow update group publicity | Erik Johnston | 2017-08-08 | 1 | -0/+15 |
| | | | | |||||
| | * | | Store whether the user wants to publicise their membership of a group | Erik Johnston | 2017-08-08 | 2 | -0/+3 |
| | | | | |||||
| * | | | Groups: Fix mising json.load in initial sync | Erik Johnston | 2017-08-21 | 1 | -1/+7 |
| |/ / | |||||
| * | | Update comment | Erik Johnston | 2017-07-24 | 1 | -2/+2 |
| | | | |||||
| * | | Use join rather than joined, etc. | Erik Johnston | 2017-07-24 | 1 | -2/+2 |
| | | | |||||
| * | | Fix all the typos | Erik Johnston | 2017-07-24 | 1 | -8/+7 |
| | | | |||||
| * | | Include users membership in group in summary API | Erik Johnston | 2017-07-24 | 1 | -0/+55 |
| | | | |||||
| * | | Check users/rooms are in group before adding to summary | Erik Johnston | 2017-07-24 | 1 | -0/+25 |
| | | |