Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Fix some looping_call calls which were broken in #3604 | Richard van der Hoff | 2018-07-26 | 1 | -1/+1 |
| | | | | | | | | | It turns out that looping_call does check the deferred returned by its callback, and (at least in the case of client_ips), we were relying on this, and I broke it in #3604. Update run_as_background_process to return the deferred, and make sure we return it to clock.looping_call. | ||||
* | Run things as background processes | Richard van der Hoff | 2018-07-18 | 1 | -1/+5 |
| | | | | | | | | This fixes #3518, and ensures that we get useful logs and metrics for lots of things that happen in the background. (There are certainly more things that happen in the background; these are just the common ones I've found running a single-process synapse locally). | ||||
* | Use efficient .intersection | Erik Johnston | 2018-07-17 | 1 | -4/+1 |
| | |||||
* | Fix perf regression in PR #3530 | Erik Johnston | 2018-07-17 | 1 | -1/+6 |
| | | | | | | | | The get_entities_changed function was changed to return all changed entities since the given stream position, rather than only those changed from a given list of entities. This resulted in the function incorrectly returning large numbers of entities that, for example, caused large increases in database usage. | ||||
* | Don't return unknown entities in get_entities_changed | Erik Johnston | 2018-07-13 | 1 | -8/+1 |
| | | | | | | | | The stream cache keeps track of all entities that have changed since a particular stream position, so get_entities_changed does not need to return unknown entites when given a larger stream position. This makes it consistent with the behaviour of has_entity_changed. | ||||
* | Reduce set building in get_entities_changed | Richard van der Hoff | 2018-07-12 | 1 | -8/+12 |
| | | | | | | | | | | | This line shows up as about 5% of cpu time on a synchrotron: not_known_entities = set(entities) - set(self._entity_to_key) Presumably the problem here is that _entity_to_key can be largeish, and building a set for its keys every time this function is called is slow. Here we rewrite the logic to avoid building so many sets. | ||||
* | run isort | Amber Brown | 2018-07-09 | 6 | -26/+23 |
| | |||||
* | Revert "Revert "Try to not use as much CPU in the StreamChangeCache"" (#3454) | Amber Brown | 2018-06-28 | 1 | -2/+4 |
| | |||||
* | Revert "Try to not use as much CPU in the StreamChangeCache" | Matthew Hodgson | 2018-06-26 | 1 | -4/+2 |
| | |||||
* | fixes | Amber Brown | 2018-06-26 | 1 | -2/+2 |
| | |||||
* | fixes | Amber Brown | 2018-06-26 | 1 | -2/+2 |
| | |||||
* | try and make loading items from the cache faster | Amber Brown | 2018-06-26 | 1 | -2/+4 |
| | |||||
* | Disable partial state group caching for wildcard lookups | Richard van der Hoff | 2018-06-22 | 1 | -13/+12 |
| | | | | | | | When _get_state_for_groups is given a wildcard filter, just do a complete lookup. Hopefully this will give us the best of both worlds by not filling up the ram if we only need one or two keys, but also making the cache still work for the federation reader usecase. | ||||
* | Port to sortedcontainers (with tests!) (#3332) | Amber Brown | 2018-06-06 | 1 | -26/+31 |
| | |||||
* | Add hacky cache factor override system | Erik Johnston | 2018-06-04 | 2 | -2/+12 |
| | |||||
* | Consistently use six's iteritems and wrap lazy keys/values in list() if ↵ | Amber Brown | 2018-05-31 | 2 | -3/+5 |
| | | | | they're not meant to be lazy (#3307) | ||||
* | Merge pull request #3281 from NotAFile/py3-six-isinstance | Amber Brown | 2018-05-30 | 1 | -4/+8 |
|\ | | | | | remaining isintance fixes | ||||
| * | remaining isintance fixes | Adrian Tschira | 2018-05-24 | 1 | -4/+8 |
| | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com> | ||||
* | | add comment about why unreg | Amber Brown | 2018-05-28 | 1 | -0/+2 |
| | | |||||
* | | Merge remote-tracking branch 'origin/develop' into 3218-official-prom | Amber Brown | 2018-05-28 | 1 | -1/+6 |
|\| | |||||
| * | fix py3 intern and remove unnecessary py3 encode | Adrian Tschira | 2018-05-19 | 1 | -1/+6 |
| | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com> | ||||
* | | cleanup pep8 errors | Amber Brown | 2018-05-22 | 1 | -2/+5 |
| | | |||||
* | | fixes | Amber Brown | 2018-05-22 | 2 | -12/+30 |
| | | |||||
* | | replacing portions | Amber Brown | 2018-05-21 | 6 | -27/+51 |
|/ | |||||
* | Merge pull request #3093 from matrix-org/rav/response_cache_wrap | Richard van der Hoff | 2018-04-20 | 1 | -14/+74 |
|\ | | | | | Refactor ResponseCache usage | ||||
| * | ResponseCache: fix handling of completed results | Richard van der Hoff | 2018-04-13 | 1 | -13/+19 |
| | | | | | | | | | | Turns out that ObservableDeferred.observe doesn't return a deferred if the result is already completed. Fix handling and improve documentation. | ||||
| * | Refactor ResponseCache usage | Richard van der Hoff | 2018-04-12 | 1 | -2/+56 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds a `.wrap` method to ResponseCache which wraps up the boilerplate of a (get, set) pair, and then use it throughout the codebase. This will be largely non-functional, but does include the following functional changes: * federation_server.on_context_state_request: drops use of _server_linearizer which looked redundant and could cause incorrect cache misses by yielding between the get and the set. * RoomListHandler.get_remote_public_room_list(): fixes logcontext leaks * the wrap function includes some logging. I'm hoping this won't be too noisy on production. | ||||
* | | Revert "Use sortedcontainers instead of blist" | Richard van der Hoff | 2018-04-13 | 1 | -2/+2 |
|/ | | | | | | | | | | | This reverts commit 9fbe70a7dc3afabfdac176ba1f4be32dd44602aa. It turns out that sortedcontainers.SortedDict is not an exact match for blist.sorteddict; in particular, `popitem()` removes things from the opposite end of the dict. This is trivial to fix, but I want to add some unit tests, and potentially some more thought about it, before we do so. | ||||
* | Merge pull request #3092 from matrix-org/rav/response_cache_metrics | Richard van der Hoff | 2018-04-12 | 1 | -1/+13 |
|\ | | | | | Add metrics for ResponseCache | ||||
| * | Add metrics for ResponseCache | Richard van der Hoff | 2018-04-10 | 1 | -1/+13 |
| | | |||||
* | | Merge pull request #3059 from matrix-org/rav/doc_response_cache | Richard van der Hoff | 2018-04-12 | 1 | -0/+32 |
|\ \ | | | | | | | Document the behaviour of ResponseCache | ||||
| * | | Document the behaviour of ResponseCache | Richard van der Hoff | 2018-04-04 | 1 | -0/+32 |
| | | | | | | | | | | | | | | | | | | it looks like everything that uses ResponseCache expects to have to `make_deferred_yieldable` its results. It's debatable whether that is the best approach, but let's document it for now to avoid further confusion. | ||||
* | | | Use sortedcontainers instead of blist | Vincent Breitmoser | 2018-04-10 | 1 | -2/+2 |
| |/ |/| | | | | | | | | | | | | | This commit drop-in replaces blist with SortedContainers. They are written in pure python so work with pypy, but perform as good as native implementations, at least in a couple benchmarks: http://www.grantjenks.com/docs/sortedcontainers/performance.html | ||||
* | | Fix overzealous cache invalidation | Richard van der Hoff | 2018-04-05 | 1 | -26/+38 |
|/ | | | | | Fixes an issue where a cache invalidation would invalidate *all* pending entries, rather than just the entry that we intended to invalidate. | ||||
* | Add comments | Erik Johnston | 2018-03-19 | 1 | -0/+7 |
| | |||||
* | Fix bug where state cache used lots of memory | Erik Johnston | 2018-03-15 | 2 | -5/+9 |
| | | | | | | | | | The state cache bases its size on the sum of the size of entries. The size of the entry is calculated once on insertion, so it is important that the size of entries does not change. The DictionaryCache modified the entries size, which caused the state cache to incorrectly think it was smaller than it actually was. | ||||
* | report metrics on number of cache evictions | Richard van der Hoff | 2018-02-05 | 3 | -4/+34 |
| | |||||
* | Increase default cache factor size. | Erik Johnston | 2017-07-04 | 1 | -1/+1 |
| | |||||
* | Define CACHE_SIZE_FACTOR once | Erik Johnston | 2017-07-04 | 2 | -9/+2 |
| | |||||
* | Use an ExpiringCache for storing registration sessions | Erik Johnston | 2017-06-29 | 1 | -0/+3 |
| | | | | | This is because pruning them was a significant performance drain on matrix.org | ||||
* | Rewrite conditional | Erik Johnston | 2017-06-09 | 1 | -1/+1 |
| | |||||
* | Fix has_any_entity_changed | Erik Johnston | 2017-06-09 | 1 | -4/+4 |
| | | | | | | | | Occaisonally has_any_entity_changed would throw the error: "Set changed size during iteration" when taking the max of the `sorteddict`. While its uncertain how that happens, its quite inefficient to iterate over the entire dict anyway so we change to using the more traditional `bisect_*` functions. | ||||
* | Add stream change cache | Erik Johnston | 2017-05-31 | 1 | -0/+15 |
| | |||||
* | Pull out if statement from for loop | Erik Johnston | 2017-05-22 | 1 | -6/+14 |
| | |||||
* | Update list cache to handle one arg case | Erik Johnston | 2017-05-22 | 1 | -17/+33 |
| | | | | | | We update the normal cache descriptors to handle caches with a single argument specially so that the key wasn't a 1-tuple. We need to update the cache list to be aware of this. | ||||
* | Make get_state_groups_from_groups faster. | Erik Johnston | 2017-05-17 | 1 | -11/+46 |
| | | | | | | | | | Most of the time was spent copying a dict to filter out sentinel values that indicated that keys did not exist in the dict. The sentinel values were added to ensure that we cached the non-existence of keys. By updating DictionaryCache to keep track of which keys were known to not exist itself we can remove a dictionary copy. | ||||
* | Don't update event cache hit ratio from get_joined_users | Erik Johnston | 2017-05-08 | 1 | -3/+6 |
| | | | | | Otherwise the hit ration of plain get_events gets completely skewed by calls to get_joined_users* functions. | ||||
* | Optimise caches with single key | Erik Johnston | 2017-05-04 | 1 | -9/+33 |
| | |||||
* | Remove DEBUG_CACHES | Erik Johnston | 2017-04-25 | 1 | -2/+0 |
| | |||||
* | Reduce cache size by not storing deferreds | Erik Johnston | 2017-04-25 | 1 | -18/+21 |
| | | | | | | | | | | | | | | | | | | | | Currently the cache descriptors store deferreds rather than raw values, this is a simple way of triggering only one database hit and sharing the result if two callers attempt to get the same value. However, there are a few caches that simply store a mapping from string to string (or int). These caches can have a large number of entries, under the assumption that each entry is small. However, the size of a deferred (specifically the size of ObservableDeferred) is signigicantly larger than that of the raw value, 2kb vs 32b. This PR therefore changes the cache descriptors to store the raw values rather than the deferreds. As a side effect cached storage function now either return a deferred or the actual value, as the cached list decriptor already does. This is fine as we always end up just yield'ing on the returned value eventually, which handles that case correctly. | ||||
* | Only intern ascii strings | Erik Johnston | 2017-04-24 | 1 | -18/+11 |
| | |||||
* | Remove unused instance variable | Erik Johnston | 2017-03-31 | 1 | -4/+0 |
| | |||||
* | Doc new instance variables | Erik Johnston | 2017-03-30 | 1 | -1/+8 |
| | |||||
* | Manually calculate cache key as getcallargs is expensive | Erik Johnston | 2017-03-30 | 1 | -6/+28 |
| | | | | | This is because getcallargs recomputes the getargspec, amongst other things, which we don't need to do as its already been done | ||||
* | Don't convert to deferreds when not necessary | Erik Johnston | 2017-03-30 | 1 | -1/+4 |
| | |||||
* | Fix the logcontext handling in the cache wrappers (#2077) | Richard van der Hoff | 2017-03-30 | 1 | -16/+14 |
| | | | | | | | The cache wrappers had a habit of leaking the logcontext into the reactor while the lookup function was running, and then not restoring it correctly when the lookup function had completed. It's all the fault of `preserve_context_over_{fn,deferred}` which are basically a bit broken. | ||||
* | Fix caching of remote servers' signature keys | Richard van der Hoff | 2017-03-22 | 1 | -63/+72 |
| | | | | | | | | | The `@cached` decorator on `KeyStore._get_server_verify_key` was missing its `num_args` parameter, which meant that it was returning the wrong key for any server which had more than one recorded key. By way of a fix, change the default for `num_args` to be *all* arguments. To implement that, factor out a common base class for `CacheDescriptor` and `CacheListDescriptor`. | ||||
* | Fix assertion to stop transaction queue getting wedged | Richard van der Hoff | 2017-03-15 | 1 | -1/+1 |
| | | | | | | | | ... and update some docstrings to correctly reflect the types being used. get_new_device_msgs_for_remote can return a long under some circumstances, which was being stored in last_device_list_stream_id_by_dest, and was then upsetting things on the next loop. | ||||
* | Add setdefault key to ExpiringCache | Erik Johnston | 2017-03-10 | 1 | -0/+7 |
| | |||||
* | Comment | Erik Johnston | 2017-02-02 | 1 | -1/+4 |
| | |||||
* | Comment | Erik Johnston | 2017-02-02 | 1 | -0/+2 |
| | |||||
* | Update LruCache size estimate on clear | Erik Johnston | 2017-01-18 | 1 | -0/+2 |
| | |||||
* | Measure metrics of string_cache | Erik Johnston | 2017-01-17 | 1 | -3/+8 |
| | |||||
* | Fix typo in return type | Erik Johnston | 2017-01-17 | 1 | -3/+2 |
| | |||||
* | Rename and comment tree_to_leaves_iterator | Erik Johnston | 2017-01-17 | 2 | -5/+8 |
| | |||||
* | Remove needless call to evict() | Erik Johnston | 2017-01-17 | 1 | -1/+0 |
| | |||||
* | Speed up cache size calculation | Erik Johnston | 2017-01-17 | 5 | -46/+128 |
| | | | | | | | | | | | Instead of calculating the size of the cache repeatedly, which can take a long time now that it can use a callback, instead cache the size and update that on insertion and deletion. This requires changing the cache descriptors to have two caches, one for pending deferreds and the other for the actual values. There's no reason to evict from the pending deferreds as they won't take up any more memory. | ||||
* | Use OrderedDict in ExpiringCache | Erik Johnston | 2017-01-16 | 1 | -10/+4 |
| | |||||
* | Add support for 'iterable' to ExpiringCache | Erik Johnston | 2017-01-16 | 1 | -9/+17 |
| | |||||
* | Optionally measure size of cache by sum of length of values | Erik Johnston | 2017-01-13 | 2 | -19/+38 |
| | |||||
* | Change get_pos_of_last_change to return upper bound | Erik Johnston | 2016-09-15 | 1 | -3/+4 |
| | |||||
* | Use stream_change cache to make get_forward_extremeties_for_room cache more ↵ | Erik Johnston | 2016-09-15 | 1 | -0/+5 |
| | | | | effective | ||||
* | Ensure invalidation list does not grow unboundedly | Erik Johnston | 2016-08-19 | 2 | -20/+16 |
| | |||||
* | Rename to on_invalidate | Erik Johnston | 2016-08-19 | 1 | -16/+10 |
| | |||||
* | Make cache_context an explicit option | Erik Johnston | 2016-08-19 | 1 | -8/+27 |
| | |||||
* | Remove lru option | Erik Johnston | 2016-08-19 | 1 | -23/+8 |
| | |||||
* | Add concept of cache contexts | Erik Johnston | 2016-08-19 | 3 | -20/+99 |
| | |||||
* | Cache federation state responses | Erik Johnston | 2016-07-21 | 1 | -2/+11 |
| | |||||
* | Merge branch 'erikj/cache_perf' of github.com:matrix-org/synapse into develop | Erik Johnston | 2016-06-03 | 1 | -10/+25 |
|\ | |||||
| * | Pull out update_results_dict | Erik Johnston | 2016-06-03 | 1 | -8/+7 |
| | | |||||
| * | Small optimisation to CacheListDescriptor | Erik Johnston | 2016-06-03 | 1 | -2/+2 |
| | | |||||
| * | Make cachedList go a bit faster | Erik Johnston | 2016-06-03 | 1 | -10/+34 |
| | | |||||
* | | Change CacheMetrics to be quicker | Erik Johnston | 2016-06-03 | 5 | -25/+44 |
|/ | | | | | | We change it so that each cache has an individual CacheMetric, instead of having one global CacheMetric. This means that when a cache tries to increment a counter it does not need to go through so many indirections. | ||||
* | Deduplicate joins | Erik Johnston | 2016-04-07 | 1 | -1/+1 |
| | |||||
* | Make the cache objects be per instance rather than being global | Mark Haines | 2016-04-06 | 1 | -21/+24 |
| | |||||
* | Fix typo | Mark Haines | 2016-03-24 | 1 | -1/+1 |
| | |||||
* | Deduplicate identical /sync requests | Mark Haines | 2016-03-24 | 1 | -0/+46 |
| | |||||
* | Simplify intern_dict | Erik Johnston | 2016-03-23 | 1 | -17/+10 |
| | |||||
* | Intern all the things | Erik Johnston | 2016-03-23 | 1 | -1/+57 |
| | |||||
* | String intern | Erik Johnston | 2016-03-23 | 1 | -0/+8 |
| | |||||
* | Make LruCache use a dedicated _Node class | Erik Johnston | 2016-03-22 | 1 | -32/+41 |
| | |||||
* | Return list, not generator. | Erik Johnston | 2016-03-14 | 1 | -3/+1 |
| | |||||
* | Use syntax that works on both py2.7 and py3 | Mark Haines | 2016-03-07 | 1 | -1/+1 |
| | |||||
* | Limit stream change cache size too | Erik Johnston | 2016-03-01 | 1 | -1/+5 |
| | |||||
* | Move cache size fiddling to descriptors only. Fix tests | Erik Johnston | 2016-03-01 | 1 | -2/+2 |
| | |||||
* | Add enviroment variable SYNAPSE_CACHE_FACTOR, default it to 0.1 | Erik Johnston | 2016-03-01 | 1 | -0/+6 |
| | |||||
* | Reraise exception | Erik Johnston | 2016-03-01 | 1 | -0/+1 |
| | |||||
* | Correct cache miss detection | Erik Johnston | 2016-03-01 | 1 | -1/+1 |
| | |||||
* | Report size of ExpiringCache | Erik Johnston | 2016-02-23 | 1 | -2/+13 |
| | |||||
* | Change the way we figure out presence updates for small deltas | Erik Johnston | 2016-02-23 | 1 | -0/+16 |
| | |||||
* | Fix up logcontexts | Erik Johnston | 2016-02-08 | 2 | -6/+13 |
| | |||||
* | Fix flake8 warnings for new flake8 | Daniel Wagner-Hall | 2016-02-02 | 3 | -4/+4 |
| | |||||
* | If stream pos is greater then earliest known key and entity hasn't changed, ↵ | Erik Johnston | 2016-01-29 | 1 | -8/+3 |
| | | | | then entity hasn't changed | ||||
* | Prefill stream change caches | Erik Johnston | 2016-01-29 | 1 | -1/+4 |
| | |||||
* | Merge pull request #536 from matrix-org/erikj/sync | Erik Johnston | 2016-01-29 | 1 | -0/+107 |
|\ | | | | | Make /sync "better". | ||||
| * | If the same as the earliest key, assume nothing has changed. | Erik Johnston | 2016-01-28 | 1 | -0/+5 |
| | | |||||
| * | Correctly update _entity_to_key | Erik Johnston | 2016-01-28 | 1 | -4/+5 |
| | | |||||
| * | Fix inequalities | Erik Johnston | 2016-01-28 | 1 | -2/+2 |
| | | |||||
| * | Include cache hits with has_entity_changed | Erik Johnston | 2016-01-28 | 1 | -0/+4 |
| | | |||||
| * | Change name and doc has_entity_changed | Erik Johnston | 2016-01-28 | 1 | -1/+3 |
| | | |||||
| * | Cache tags and account data | Erik Johnston | 2016-01-28 | 2 | -92/+95 |
| | | |||||
| * | Ensure keys to RoomStreamChangeCache are ints | Erik Johnston | 2016-01-28 | 1 | -0/+6 |
| | | |||||
| * | Invalidate caches properly. Remove unused arg | Erik Johnston | 2016-01-28 | 1 | -2/+2 |
| | | |||||
| * | Add cache to room stream | Erik Johnston | 2016-01-27 | 1 | -0/+86 |
| | | |||||
* | | Directly set self.value | Erik Johnston | 2016-01-29 | 1 | -1/+1 |
| | | |||||
* | | Remove spurious self.size | Erik Johnston | 2016-01-29 | 1 | -1/+0 |
| | | |||||
* | | Correctly bookkeep the size of TreeCache | Erik Johnston | 2016-01-29 | 1 | -3/+28 |
| | | |||||
* | | Make TreeCache keep track of its own size. | Erik Johnston | 2016-01-29 | 2 | -6/+10 |
| | | |||||
* | | Reset size on clear | Erik Johnston | 2016-01-29 | 1 | -0/+2 |
|/ | |||||
* | Don't add the member functiopn if we're not using treecache | David Baker | 2016-01-22 | 1 | -1/+4 |
| | |||||
* | docs | David Baker | 2016-01-22 | 1 | -1/+5 |
| | |||||
* | Revert all the bits changing keys of eeverything that used LRUCaches to tuples | David Baker | 2016-01-22 | 2 | -6/+6 |
| | |||||
* | Make LRU cache not default to treecache & add options to use it | David Baker | 2016-01-22 | 2 | -10/+19 |
| | |||||
* | Add __contains__ | David Baker | 2016-01-22 | 1 | -0/+3 |
| | |||||
* | Docs for treecache | David Baker | 2016-01-22 | 1 | -0/+5 |
| | |||||
* | Add invalidate_many here too | David Baker | 2016-01-22 | 1 | -0/+1 |
| | |||||
* | peppate | David Baker | 2016-01-21 | 1 | -2/+2 |
| | |||||
* | Change LRUCache to be tree-based so we can delete subtrees. | David Baker | 2016-01-21 | 4 | -14/+102 |
| | |||||
* | copyrights | Matthew Hodgson | 2016-01-07 | 6 | -6/+6 |
| | |||||
* | Add some docstring explaining the snapshot cache does | Mark Haines | 2015-12-23 | 1 | -1/+23 |
| | |||||
* | Add a unit test for the snapshot cache | Mark Haines | 2015-12-23 | 1 | -2/+2 |
| | |||||
* | Add a cache for initialSync responses that expires after 5 minutes | Mark Haines | 2015-12-22 | 1 | -0/+71 |
| | |||||
* | Don't assume @cachedList function returns keys for everything | Erik Johnston | 2015-08-18 | 1 | -1/+1 |
| | |||||
* | Docstring | Erik Johnston | 2015-08-12 | 1 | -0/+27 |
| | |||||
* | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2015-08-12 | 1 | -1/+3 |
| | | | | erikj/dictionary_cache | ||||
* | Wire up the dictionarycache to the metrics | Erik Johnston | 2015-08-12 | 3 | -45/+41 |
| | |||||
* | Move all the caches into their own package, synapse.util.caches | Erik Johnston | 2015-08-11 | 5 | -0/+746 |