summary refs log tree commit diff
path: root/synapse/replication (follow)
Commit message (Expand)AuthorAgeFilesLines
* update black to 21.6b0 (#10197)Marcus2021-06-171-1/+1
* Extend `ResponseCache` to pass a context object into the callback (#10157)Richard van der Hoff2021-06-142-4/+4
* Implement knock feature (#6739)Sorunome2021-06-091-0/+139
* Clean up the interface for injecting opentracing over HTTP (#10143)Richard van der Hoff2021-06-091-2/+3
* Combine `LruCache.invalidate` and `invalidate_many` (#9973)Richard van der Hoff2021-05-271-1/+1
* Remove `keylen` from `LruCache`. (#9993)Richard van der Hoff2021-05-241-1/+1
* Don't hammer the database for destination retry timings every ~5mins (#10036)Erik Johnston2021-05-211-21/+0
* Use a database table to hold the users that should have full presence sent to...Andrew Morgan2021-05-181-2/+9
* Add debug logging for issue #9533 (#9959)Richard van der Hoff2021-05-111-1/+0
* Time external cache response time (#9904)Erik Johnston2021-05-041-10/+26
* Split presence out of master (#9820)Erik Johnston2021-04-234-58/+32
* Remove `synapse.types.Collection` (#9856)Richard van der Hoff2021-04-221-2/+1
* Merge branch 'master' into developAndrew Morgan2021-04-211-1/+1
|\
| * Stop BackgroundProcessLoggingContext making new prometheus timeseries (#9854)Richard van der Hoff2021-04-211-1/+1
* | Merge branch 'master' into developAndrew Morgan2021-04-201-1/+1
|\|
| * Always use the name as the log ID. (#9829)Patrick Cloke2021-04-201-1/+1
* | Add presence federation stream (#9819)Erik Johnston2021-04-203-3/+31
* | Move some replication processing out of generic_worker (#9796)Erik Johnston2021-04-141-7/+224
* | Remove redundant "coding: utf-8" lines (#9786)Jonathan de Jong2021-04-1447-47/+0
|/
* Record more information into structured logs. (#9654)Patrick Cloke2021-04-081-2/+3
* Update mypy configuration: `no_implicit_optional = True` (#9742)Jonathan de Jong2021-04-051-1/+1
* Make RateLimiter class check for ratelimit overrides (#9711)Erik Johnston2021-03-301-1/+1
* Add type hints for the federation sender. (#9681)Patrick Cloke2021-03-292-6/+14
* Make it possible to use dmypy (#9692)Erik Johnston2021-03-261-1/+1
* Import HomeServer from the proper module. (#9665)Patrick Cloke2021-03-232-2/+2
* Fix up types for the typing handler. (#9638)Patrick Cloke2021-03-171-7/+10
* Prep work for removing `outlier` from `internal_metadata` (#9411)Richard van der Hoff2021-03-172-1/+6
* Fix remaining mypy issues due to Twisted upgrade. (#9608)Patrick Cloke2021-03-153-3/+12
* Fix additional type hints from Twisted 21.2.0. (#9591)Patrick Cloke2021-03-123-38/+38
* Add logging for redis connection setup (#9590)Richard van der Hoff2021-03-111-0/+35
* Fix the auth provider on the logins metric (#9573)Richard van der Hoff2021-03-101-2/+2
* Add ResponseCache tests. (#9458)Jonathan de Jong2021-03-081-3/+6
* Create a SynapseReactor type which incorporates the necessary reactor interfa...Patrick Cloke2021-03-081-1/+1
* Fix additional type hints from Twisted upgrade. (#9518)Patrick Cloke2021-03-031-3/+1
* Bump the mypy and mypy-zope versions. (#9529)Patrick Cloke2021-03-031-1/+1
* Use the proper Request in type hints. (#9515)Patrick Cloke2021-03-011-5/+4
* Fix deleting pushers when using sharded pushers. (#9465)Erik Johnston2021-02-224-50/+74
* Add configs to make profile data more private (#9203)AndrewFerr2021-02-191-1/+2
* Update black, and run auto formatting over the codebase (#9381)Eric Eastwood2021-02-1612-71/+62
* Ensure that we never stop reconnecting to redis (#9391)Erik Johnston2021-02-111-2/+24
* Precompute joined hosts and store in Redis (#9198)Erik Johnston2021-01-262-14/+106
* Periodically send pings to detect dead Redis connections (#9218)Erik Johnston2021-01-262-53/+98
* Allow moving account data and receipts streams off master (#9104)Erik Johnston2021-01-186-76/+217
* Enforce all replication HTTP clients calls use kwargs (#9144)Erik Johnston2021-01-181-1/+1
* Allow running sendToDevice on workers (#9044)Erik Johnston2021-01-072-31/+10
* Some cleanups to device inbox store. (#9041)Erik Johnston2021-01-071-8/+0
* Merge remote-tracking branch 'origin/erikj/as_mau_block' into developErik Johnston2020-12-181-2/+10
|\
| * Correctly handle AS registerations and add testErik Johnston2020-12-171-2/+10
* | Convert internal pusher dicts to attrs classes. (#8940)Patrick Cloke2020-12-162-10/+27
* | Various clean-ups to the logging context code (#8935)Patrick Cloke2020-12-141-2/+1
* | Add authentication to replication endpoints. (#8853)Patrick Cloke2020-12-041-6/+41
|/
* Add typing to membership Replication class methods (#8809)Andrew Morgan2020-11-271-22/+44
* Generalise _maybe_store_room_on_invite (#8754)Andrew Morgan2020-11-131-5/+5
* Add ability for access tokens to belong to one user but grant access to anoth...Erik Johnston2020-10-292-6/+3
* Don't pull event from DB when handling replication traffic. (#8669)Erik Johnston2020-10-282-16/+25
* Don't unnecessarily start bg process in replication sending loop. (#8670)Erik Johnston2020-10-271-0/+10
* Start fewer opentracing spans (#8640)Erik Johnston2020-10-261-1/+3
* Replace DeferredCache with LruCache where possible (#8563)Richard van der Hoff2020-10-191-5/+5
* move DeferredCache into its own moduleRichard van der Hoff2020-10-141-1/+1
* Rename Cache->DeferredCacheRichard van der Hoff2020-10-141-3/+3
* Add some more type annotations to CacheRichard van der Hoff2020-10-141-1/+1
* Fix message duplication if something goes wrong after persisting the event (#...Erik Johnston2020-10-131-2/+14
* Make event persisters periodically announce position over replication. (#8499)Erik Johnston2020-10-124-21/+90
* Add type hints to response cache. (#8507)Patrick Cloke2020-10-091-1/+1
* Only send RDATA for instance local events. (#8496)Erik Johnston2020-10-092-6/+11
* Remove the deprecated Handlers object (#8494)Patrick Cloke2020-10-092-2/+2
* Add unit test for event persister sharding (#8433)Erik Johnston2020-10-022-4/+42
* Enable mypy checking for unreachable code and fix instances. (#8432)Patrick Cloke2020-10-011-4/+6
* Various clean ups to room stream tokens. (#8423)Erik Johnston2020-09-291-4/+2
* Add metrics to track success/otherwise of replication requests (#8406)Richard van der Hoff2020-09-291-12/+28
* Fix MultiWriteIdGenerator's handling of restarts. (#8374)Erik Johnston2020-09-241-0/+2
* Add EventStreamPosition type (#8388)Erik Johnston2020-09-241-3/+9
* Simplify super() calls to Python 3 syntax. (#8344)Patrick Cloke2020-09-1819-25/+25
* Switch metaclass initialization to python 3-compatible syntax (#8326)Jonathan de Jong2020-09-161-3/+1
* Use slots in attrs classes where possible (#8296)Patrick Cloke2020-09-141-2/+2
* Fix typos in comments.Patrick Cloke2020-09-141-1/+1
* Add experimental support for sharding event persister. Again. (#8294)Erik Johnston2020-09-143-6/+12
* Clean up `Notifier.on_new_room_event` code path (#8288)Erik Johnston2020-09-101-6/+3
* Remove some unused distributor signals (#8216)Patrick Cloke2020-09-091-6/+4
* Fixup pusher pool notifications (#8287)Erik Johnston2020-09-091-1/+2
* Revert "Fixup pusher pool notifications"Erik Johnston2020-09-091-2/+1
* Fixup pusher pool notificationsErik Johnston2020-09-091-1/+2
* Stop sub-classing object (#8249)Patrick Cloke2020-09-046-7/+7
* Revert "Add experimental support for sharding event persister. (#8170)" (#8242)Brendan Abolivier2020-09-043-12/+6
* Add experimental support for sharding event persister. (#8170)Erik Johnston2020-09-023-6/+12
* Move and rename `get_devices_with_keys_by_user` (#8204)Richard van der Hoff2020-09-011-0/+3
* Fix `wait_for_stream_position` for multiple waiters. (#8196)Erik Johnston2020-08-281-4/+2
* Make SlavedIdTracker.advance have same interface as MultiWriterIDGenerator (#...Erik Johnston2020-08-2610-13/+13
* Remove `ChainedIdGenerator`. (#8123)Erik Johnston2020-08-192-7/+5
* Be stricter about JSON that is accepted by Synapse (#8106)Patrick Cloke2020-08-191-7/+5
* Separate `get_current_token` into two. (#8113)Erik Johnston2020-08-192-1/+9
* Add a shadow-banned flag to users. (#8092)Patrick Cloke2020-08-141-0/+4
* Reduce unnecessary whitespace in JSON. (#7372)David Vo2020-08-071-2/+3
* Convert synapse.api to async/await (#8031)Patrick Cloke2020-08-061-1/+1
* Rename database classes to make some sense (#8033)Erik Johnston2020-08-0519-54/+54
* Convert replication code to async/await. (#7987)Patrick Cloke2020-08-039-37/+27
* Merge tag 'v1.18.0rc2' into developRichard van der Hoff2020-07-284-87/+112
|\
| * Typing worker needs to handle stream update requests (#7967)Erik Johnston2020-07-281-1/+1
| * Handle replication commands synchronously where possible (#7876)Richard van der Hoff2020-07-273-86/+111
* | Convert a synapse.events to async/await. (#7949)Patrick Cloke2020-07-272-2/+4
|/
* Fix typing replication not being handled on master (#7959)Erik Johnston2020-07-271-0/+8
* Remove an unused prometheus metric (#7878)Richard van der Hoff2020-07-221-3/+1
* Track command processing as a background process (#7879)Richard van der Hoff2020-07-222-3/+38
* Fix deprecation warning: import ABC from collections.abc (#7892)Karthikeyan Singaravelan2020-07-201-1/+1
* Stop using 'device_max_stream_id' (#7882)Erik Johnston2020-07-171-1/+1
* Optimise queueing of inbound replication commands (#7861)Richard van der Hoff2020-07-161-116/+215
* Allow moving typing off master (#7869)Erik Johnston2020-07-162-3/+13
* Add ability to shard the federation sender (#7798)Erik Johnston2020-07-102-6/+8
* Fix some spelling mistakes / typos. (#7811)Patrick Cloke2020-07-096-7/+7
* Generate real events when we reject invites (#7804)Richard van der Hoff2020-07-091-67/+25
* Do not use simplejson in Synapse. (#7800)Patrick Cloke2020-07-081-9/+2
* Refactor getting replication updates from database v2. (#7740)Erik Johnston2020-07-071-46/+10
* isort 5 compatibility (#7786)Will Hunt2020-07-053-5/+3
* Merge different Resource implementation classes (#7732)Erik Johnston2020-07-032-10/+4
* Use symbolic names for replication stream names (#7768)Richard van der Hoff2020-07-018-17/+17
* Refactor getting replication updates from database. (#7636)Erik Johnston2020-06-161-21/+8
* Replace all remaining six usage with native Python 3 equivalents (#7704)Dagfinn Ilmari Mannsåker2020-06-161-4/+2
* Discard RDATA from already seen positions. (#7648)Patrick Cloke2020-06-152-6/+28
* Fix bug in account data replication stream. (#7656)Erik Johnston2020-06-092-3/+15
* Typo fixes.Patrick Cloke2020-06-051-1/+1
* Ensure ReplicationStreamer is always started when replication enabled. (#7579)Erik Johnston2020-05-271-0/+3
* Add option to move event persistence off master (#7517)Erik Johnston2020-05-225-2/+171
* Add ability to wait for replication streams (#7542)Erik Johnston2020-05-225-18/+108
* Allow ReplicationRestResource to be added to workers (#7515)Erik Johnston2020-05-181-5/+8
* Merge pull request #7519 from matrix-org/rav/kill_py2_codeRichard van der Hoff2020-05-182-13/+4
|\
| * remove redundant `__func__`Richard van der Hoff2020-05-152-13/+4
* | Fix limit logic for AccountDataStream (#7384)Richard van der Hoff2020-05-151-12/+56
* | Move event stream handling out of slave store. (#7491)Erik Johnston2020-05-152-97/+0
|/
* Move EventStream handling into default ReplicationDataHandler (#7493)Erik Johnston2020-05-141-4/+33
* Add `instance_map` config and route replication calls (#7495)Erik Johnston2020-05-141-6/+15
* Have all instances correctly respond to REPLICATE command. (#7475)Erik Johnston2020-05-133-48/+50
* Fix Redis reconnection logic (#7482)Erik Johnston2020-05-132-2/+14
* Allow configuration of Synapse's cache without using synctl or environment va...Amber Brown2020-05-111-2/+1
* Merge branch 'release-v1.13.0' into developAndrew Morgan2020-05-112-4/+2
|\
| * Fix errors from malformed log line (#7454)Richard van der Hoff2020-05-071-1/+1
| * Drop support for redis.dbid (#7450)Richard van der Hoff2020-05-071-3/+1
* | Support any process writing to cache invalidation stream. (#7436)Erik Johnston2020-05-0718-183/+131
* | Merge branch 'release-v1.13.0' into developRichard van der Hoff2020-05-062-34/+69
|\|
| * Merge branch 'release-v1.13.0' into rav/fix_dropped_messagesRichard van der Hoff2020-05-051-1/+1
| |\
| * \ Merge branch 'release-v1.13.0' into rav/fix_dropped_messagesRichard van der Hoff2020-05-0519-132/+96
| |\ \
| * | | Wait for a POSITION on the right connection before accepting RDATARichard van der Hoff2020-05-052-19/+38
| * | | Wait to subscribe before sending REPLICATERichard van der Hoff2020-05-052-20/+35
* | | | Merge branch 'release-v1.13.0' into developRichard van der Hoff2020-05-061-1/+1
|\ \ \ \ | | |_|/ | |/| |
| * | | Move logs about discarded RDATA to debug (#7421)Brendan Abolivier2020-05-051-1/+1
| | |/ | |/|
* / | Fix catchup-on-reconnect for the Federation Stream (#7374)Richard van der Hoff2020-05-053-11/+24
|/ /
* | Fix redis password support. (#7401)Erik Johnston2020-05-041-0/+3
* | Thread through instance name to replication client. (#7369)Erik Johnston2020-05-017-29/+90
* | Use `stream.current_token()` and remove `stream_positions()` (#7172)Erik Johnston2020-05-0113-104/+3
|/
* Workaround for assertion errors from db_query_to_update_function (#7378)Richard van der Hoff2020-05-011-2/+1
* Add instance name to RDATA/POSITION commands (#7364)Erik Johnston2020-04-292-14/+40
* Don't relay REMOTE_SERVER_UP cmds to same conn. (#7352)Erik Johnston2020-04-293-16/+51
* Fix limit logic for EventsStream (#7358)Richard van der Hoff2020-04-292-15/+11
* Run replication streamers on workers (#7146)Erik Johnston2020-04-281-18/+15
* Fix EventsStream raising assertions when it falls behindRichard van der Hoff2020-04-241-18/+95
* Make it clear that the limit for an update_function is a targetRichard van der Hoff2020-04-231-5/+9
* Remove 'limit' param from `get_repl_stream_updates` APIRichard van der Hoff2020-04-232-9/+8
* Stop the master relaying USER_SYNC for other workers (#7318)Richard van der Hoff2020-04-222-12/+10
* Fix replication metrics when using redis (#7325)Erik Johnston2020-04-222-37/+29
* Another go at fixing one-word commands (#7326)Richard van der Hoff2020-04-221-1/+1
* Add ability to run replication protocol over redis. (#7040)Erik Johnston2020-04-225-34/+255
* On catchup, process each row with its own stream id (#7286)Richard van der Hoff2020-04-201-5/+68
* Improve type checking in `replication.tcp.Stream` (#7291)Richard van der Hoff2020-04-174-122/+142
* Fix 'generator object is not subscriptable' error (#7290)Richard van der Hoff2020-04-161-1/+2
* Handle one-word replication commands correctlyRichard van der Hoff2020-04-071-3/+11
* Fix warnings about not calling superclass constructorRichard van der Hoff2020-04-071-15/+24
* Remove vestigal references to SYNC replication commandRichard van der Hoff2020-04-072-14/+0
* Fix race in replication (#7226)Erik Johnston2020-04-072-29/+47
* Move server command handling out of TCP protocol (#7187)Erik Johnston2020-04-073-269/+236
* Move client command handling out of TCP protocol (#7185)Erik Johnston2020-04-064-322/+336
* Remove connections per replication stream metric. (#7195)Erik Johnston2020-04-011-16/+0
* Remove usage of "conn_id" for presence. (#7128)Erik Johnston2020-03-304-18/+50
* Move catchup of replication streams to worker. (#7024)Erik Johnston2020-03-2512-232/+319
* Convert `*StreamRow` classes to inner classes (#7116)Richard van der Hoff2020-03-232-96/+101
* Fix processing of `groups` stream, and use symbolic names for streams (#7117)Richard van der Hoff2020-03-231-18/+52
* Remove concept of a non-limited stream. (#7011)Erik Johnston2020-03-202-47/+28
* Change device list streams to have one row per ID (#7010)Erik Johnston2020-03-192-17/+32
|\
| * Comments from reviewErik Johnston2020-03-181-0/+3
| * Change device list replication to match new semantics.Erik Johnston2020-02-282-16/+22
| * Add 'device_lists_outbound_pokes' as extra table.Erik Johnston2020-02-281-1/+7
* | Store room_versions in EventBase objects (#6875)Richard van der Hoff2020-03-052-8/+19
|/
* Store room version on invite (#6983)Richard van der Hoff2020-02-262-2/+36
* Port PresenceHandler to async/await (#6991)Erik Johnston2020-02-261-1/+5
* Merge worker apps into one. (#6964)Erik Johnston2020-02-251-0/+20
* Increase MAX_EVENTS_BEHIND for replication clientsErik Johnston2020-02-211-1/+1
* Allow moving group read APIs to workers (#6866)Erik Johnston2020-02-071-8/+6
* Fix sending server up commands from workers (#6811)Erik Johnston2020-01-301-0/+4
* Detect unknown remote devices and mark cache as stale (#6776)Erik Johnston2020-01-281-1/+1
* Propagate cache invalidates from workers to other workers. (#6748)Erik Johnston2020-01-272-4/+7
* Allow streaming cache invalidate all to workers. (#6749)Erik Johnston2020-01-222-6/+27
* Wake up transaction queue when remote server comes back online (#6706)Erik Johnston2020-01-174-0/+44
* Port synapse.replication.tcp to async/await (#6666)Erik Johnston2020-01-165-85/+63
* Add `local_current_membership` table (#6655)Erik Johnston2020-01-151-1/+1
* Fixup synapse.replication to pass mypy checks (#6667)Erik Johnston2020-01-1410-86/+103
* Reduce the reconnect time when replication fails. (#6617)Richard van der Hoff2020-01-031-1/+2
* Change EventContext to use the Storage class (#6564)Erik Johnston2019-12-202-2/+6
* Change DataStores to accept 'database' param.Erik Johnston2019-12-0613-26/+39
* _CURRENT_STATE_CACHE_NAME is publicErik Johnston2019-12-041-2/+2
* Move cache invalidation to main data storeErik Johnston2019-12-041-1/+2
* Propagate reason in remotely rejected invitesErik Johnston2019-11-281-2/+5
* Prevent account_data content from being sent over TCP replication (#6333)Andrew Morgan2019-11-261-4/+3
|\
| * lintAndrew Morgan2019-11-081-2/+1
| * Remove content from being sent for account data rdata streamAndrew Morgan2019-11-081-3/+3
* | Merge pull request #6332 from matrix-org/erikj/query_devices_fixErik Johnston2019-11-262-1/+82
|\ \ | |/ |/|
| * Fixup docsErik Johnston2019-11-261-1/+5
| * Fix caching devices for remote servers in worker.Erik Johnston2019-11-052-1/+78
* | Address review commentsAndrew Morgan2019-11-061-1/+1
* | Don't forget to ratelimit calls outside of RegistrationHandlerAndrew Morgan2019-11-061-0/+2
|/
* document the REPLICATE command a bit better (#6305)Richard van der Hoff2019-11-043-9/+95
* Merge branch 'develop' into uhoreg/cross_signing_fix_workers_notifyHubert Chathi2019-10-314-4/+4
|\
| * Remove usage of deprecated logger.warn method from codebase (#6271)Andrew Morgan2019-10-314-4/+4
* | clean up code a bitHubert Chathi2019-10-311-5/+9
* | make user signatures a separate streamHubert Chathi2019-10-303-2/+25
* | Merge branch 'develop' into uhoreg/cross_signing_fix_workers_notifyHubert Chathi2019-10-306-44/+26
|\|
| * Port replication http server endpoints to async/awaitErik Johnston2019-10-296-44/+26
* | make notification of signatures work with workersHubert Chathi2019-10-241-0/+1
|/
* Merge branch 'develop' of github.com:matrix-org/synapse into erikj/refactor_s...Erik Johnston2019-10-221-0/+3
|\
| * Merge branch 'develop' into uhoreg/e2e_cross-signing_mergedHubert Chathi2019-09-071-10/+11
| |\
| * | add user signature stream change cache to slaved device storeHubert Chathi2019-09-041-0/+3
* | | Move storage classes into a main "data store".Erik Johnston2019-10-2117-27/+29
| |/ |/|
* | Trace how long it takes for the send trasaction to complete, including retrys...Jorik Schellekens2019-09-051-1/+6
* | Add opentracing to all client servlets (#5983)Jorik Schellekens2019-09-051-10/+6
|/
* Remove bind_email and bind_msisdn (#5964)Andrew Morgan2019-09-041-18/+3
* Remove unnecessary parentheses around return statements (#5931)Andrew Morgan2019-08-306-15/+15
* Opentracing across workers (#5771)Jorik Schellekens2019-08-221-2/+14
* Revert "Add "require_consent" parameter for registration"Brendan Abolivier2019-08-221-2/+0
* Add "require_consent" parameter for registrationHalf-Shot2019-08-221-0/+2
* Merge tag 'v1.2.0rc2' into developAndrew Morgan2019-07-241-1/+1
|\
| * Fix servlet metric names (#5734)Jorik Schellekens2019-07-241-1/+1
* | Replace returnValue with return (#5736)Amber Brown2019-07-238-20/+20
|/
* Remove access-token support from RegistrationHandler.register (#5641)Richard van der Hoff2019-07-081-6/+0
* Remove support for invite_3pid_guest. (#5625)Richard van der Hoff2019-07-051-65/+0
* Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-041-1/+1
* Run Black. (#5482)Amber Brown2019-06-2026-355/+357
* Handle failing to talk to master over replicationErik Johnston2019-06-071-1/+9
* Fixup bsaed on review commentsErik Johnston2019-05-171-1/+1
* Add basic editing supportErik Johnston2019-05-161-0/+1
* Fix relations in worker modeErik Johnston2019-05-163-8/+17
* Replace SlavedKeyStore with a shimRichard van der Hoff2019-04-081-14/+4
* Remove unused server_tls_certificates functions (#5028)Richard van der Hoff2019-04-081-3/+0
* Remove presence lists (#4989)Neil Johnson2019-04-031-10/+0
* Fix sync bug when accepting invites (#4956)Richard van der Hoff2019-04-021-9/+22
* Combine the CurrentStateDeltaStream into the EventStreamRichard van der Hoff2019-03-273-23/+33
* Make EventStream rows have a typeRichard van der Hoff2019-03-273-16/+94
* Skip building a ROW_TYPE when building updatesRichard van der Hoff2019-03-271-2/+2
* Add parse_row method to replication stream classRichard van der Hoff2019-03-273-3/+19
* move FederationStream out to its own fileRichard van der Hoff2019-03-274-23/+43
* move EventsStream out to its own fileRichard van der Hoff2019-03-273-23/+42
* Move replication.tcp.streams into a packageRichard van der Hoff2019-03-272-33/+51
* Fix/improve some docstrings in the replication code. (#4949)Richard van der Hoff2019-03-272-7/+19
* Fix ClientReplicationStreamProtocol.__str__ (#4929)Richard van der Hoff2019-03-252-4/+5