summary refs log tree commit diff
path: root/synapse (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Add some commentsRichard van der Hoff2018-04-182-5/+35
|
* Check events on backfill tooRichard van der Hoff2018-04-181-15/+42
|
* Reject events which have too many auth_events or prev_eventsRichard van der Hoff2018-04-181-4/+28
| | | | | ... this should protect us from being dossed by people making silly events (deliberately or otherwise)
* Merge branch 'master' of https://github.com/matrix-org/synapse into developNeil Johnson2018-04-132-2/+2
|\
| * Bump version and Change log v0.27.4 github/release-v0.27.0 release-v0.27.0Neil Johnson2018-04-131-1/+1
| |
| * Bump canonicaljson to 1.1.3Richard van der Hoff2018-04-131-1/+1
| | | | | | | | 1.1.2 was a bit broken too :/
| * Update canonicaljson dependencyRichard van der Hoff2018-04-121-1/+1
| | | | | | | | | | | | | | 1.1.0 and 1.1.1 were broken, so we're updating this to help people make sure they don't end up on a broken version. Also, 1.1.0 is speedier...
* | fix federation_domain_whitelistMatthew Hodgson2018-04-131-6/+6
| | | | | | | | we were checking the wrong server_name on inbound requests
* | revert last to PR properlyMatthew Hodgson2018-04-131-6/+6
| |
* | correctly auth inbound federation_domain_whitelist reqsMatthew Hodgson2018-04-131-6/+6
| |
* | Merge branch 'master' of https://github.com/matrix-org/synapse into developNeil Johnson2018-04-131-1/+1
|\|
| * bump version/changelogNeil Johnson2018-04-111-1/+1
| |
| * Merge commit '11d2609da70af797405241cdf7d9df19db5628f2' of ↵Neil Johnson2018-04-111-48/+80
| |\ | | | | | | | | | https://github.com/matrix-org/synapse into release-v0.27.0
* | | Revert "Use sortedcontainers instead of blist"Richard van der Hoff2018-04-133-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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_metricsRichard van der Hoff2018-04-126-7/+21
|\ \ \ | | | | | | | | Add metrics for ResponseCache
| * | | Add metrics for ResponseCacheRichard van der Hoff2018-04-106-7/+21
| | | |
* | | | Format docstringErik Johnston2018-04-121-2/+3
| | | |
* | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵Erik Johnston2018-04-122-2/+51
|\ \ \ \ | | | | | | | | | | | | | | | erikj/processed_event_lag
| * \ \ \ Merge pull request #3059 from matrix-org/rav/doc_response_cacheRichard van der Hoff2018-04-121-0/+32
| |\ \ \ \ | | | | | | | | | | | | Document the behaviour of ResponseCache
| | * | | | Document the behaviour of ResponseCacheRichard van der Hoff2018-04-041-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.
| * | | | | Merge pull request #3088 from matrix-org/erikj/as_parallelErik Johnston2018-04-121-2/+19
| |\ \ \ \ \ | | | | | | | | | | | | | | Send events to ASes concurrently
| | * | | | | Send events to ASes concurrentlyErik Johnston2018-04-111-2/+19
| | | | | | |
* | | | | | | Doc we raise on unknown eventErik Johnston2018-04-121-2/+3
| | | | | | |
* | | | | | | s/list/tupleErik Johnston2018-04-121-2/+2
| | | | | | |
* | | | | | | Set all metrics at the same timeErik Johnston2018-04-122-10/+10
| | | | | | |
* | | | | | | Track last processed event received_tsErik Johnston2018-04-114-0/+52
| | | | | | |
* | | | | | | Track where event stream processing have gotten up toErik Johnston2018-04-114-0/+24
| | | | | | |
* | | | | | | Add GaugeMetricErik Johnston2018-04-112-1/+38
|/ / / / / /
* | | | | | Merge pull request #2760 from Valodim/pypyRichard van der Hoff2018-04-117-13/+24
|\ \ \ \ \ \ | | | | | | | | | | | | | | Synapse on PyPy
| * | | | | | Don't disable GC when running on PyPyVincent Breitmoser2018-04-101-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PyPy's incminimark GC can't be triggered manually. From what I observed there are no obvious issues with just letting it run normally. And unlike CPython, it actually returns unused RAM to the system. Signed-off-by: Vincent Breitmoser <look@my.amazin.horse>
| * | | | | | In DomainSpecificString, override __repr__ in addition to __str__Vincent Breitmoser2018-04-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For some reason, string interpolation on a DomainSpecificString object like "%r" % (domainSpecificStringObj) fails under PyPy, because the default __repr__ implementation wants to iterate over the object. I'm not sure why that happens, but overriding __repr__ instead of __str__ fixes this problem, and is arguably the more appropriate thing to do anyways.
| * | | | | | Fix pep8 error on psycopg2cffi hackRichard van der Hoff2018-04-101-6/+5
| | | | | | |
| * | | | | | Use psycopg2cffi module instead of psycopg2 if running on pypyVincent Breitmoser2018-04-102-2/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The psycopg2 package isn't available for PyPy. This commit adds a check if the runtime is PyPy, and if it is uses psycopg2cffi module in favor of psycopg2. This is almost a drop-in replacement, except for one place where an additional cast to string is required.
| * | | | | | Use sortedcontainers instead of blistVincent Breitmoser2018-04-103-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 typoNeil Johnson2018-04-101-2/+2
| | | | | | |
* | | | | | | Merge pull request #3079 from matrix-org/erikj/limit_concurrent_sendsErik Johnston2018-04-102-55/+56
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Limit concurrent event sends for a room
| * | | | | | | Note why we're limiting concurrent event sendsErik Johnston2018-04-101-0/+5
| | | | | | | |
| * | | | | | | Limit concurrent event sends for a roomErik Johnston2018-04-091-49/+50
| | | | | | | |
| * | | | | | | Use create_and_send_nonmember_event everywhereErik Johnston2018-04-091-6/+1
| | | | | | | |
* | | | | | | | Merge pull request #3078 from matrix-org/erikj/federation_senderErik Johnston2018-04-101-15/+41
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Send federation events concurrently
| * | | | | | | | Use run_in_background insteadErik Johnston2018-04-101-1/+1
| | | | | | | | |
| * | | | | | | | Preserve log contexts correctlyErik Johnston2018-04-101-1/+4
| | | | | | | | |
| * | | | | | | | Log event ID on exceptionErik Johnston2018-04-101-1/+4
| | | | | | | | |
| * | | | | | | | Handle all events in a room correctlyErik Johnston2018-04-091-1/+2
| | | | | | | | |
| * | | | | | | | Send federation events concurrentlyErik Johnston2018-04-091-4/+18
| | | | | | | | |
| * | | | | | | | Handle exceptions in get_hosts_for_room when sending events over federationErik Johnston2018-04-091-11/+16
| |/ / / / / / /
* | | | | | | | Merge branch 'release-v0.27.0' of https://github.com/matrix-org/synapse into ↵Neil Johnson2018-04-102-7/+7
|\ \ \ \ \ \ \ \ | |_|_|/ / / / / |/| | | | | / / | | |_|_|_|/ / | |/| | | | | develop
| * | | | | | remove errant print v0.27.3-rc2Neil Johnson2018-04-091-1/+1
| | | | | | |
| * | | | | | Fix msec to sec, againNeil Johnson2018-04-091-3/+3
| | | | | | |
| * | | | | | Fix msec to secNeil Johnson2018-04-091-1/+1
| | | | | | |
| * | | | | | Fix psycopg2 interpolationNeil Johnson2018-04-091-5/+5
| | | | | | |
| * | | | | | version bump v0.27.3-rc2Neil Johnson2018-04-091-1/+1
| | | | | | |
| * | | | | | Merge branch 'develop' of https://github.com/matrix-org/synapse into ↵Neil Johnson2018-04-0931-151/+613
| |\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | release-v0.27.0
| * | | | | | | bump version to release candidateNeil Johnson2018-04-091-1/+1
| | | | | | | |
| * | | | | | | bump version v0.27.3-rc1Neil Johnson2018-04-091-1/+1
| | | | | | | |
* | | | | | | | Merge pull request #3082 from matrix-org/erikj/urlencode_pathsErik Johnston2018-04-101-48/+80
|\ \ \ \ \ \ \ \ | |_|_|_|/ / / / |/| | | | | | / | | |_|_|_|_|/ | |/| | | | | URL quote path segments over federation
| * | | | | | Ensure slashes are escapedErik Johnston2018-04-101-1/+1
| | | | | | |
| * | | | | | URL quote path segments over federationErik Johnston2018-04-101-48/+80
| | |/ / / / | |/| | | |
* | | | | | Merge pull request #2996 from krombel/allow_auto_join_roomsRichard van der Hoff2018-04-102-34/+34
|\ \ \ \ \ \ | |_|_|_|_|/ |/| | | | | move handling of auto_join_rooms to RegisterHandler
| * | | | | Merge branch 'develop' of into allow_auto_join_roomsKrombel2018-03-2848-101/+155
| |\ \ \ \ \
| * | | | | | move handling of auto_join_rooms to RegisterHandlerKrombel2018-03-142-34/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the handling of auto_join_rooms only works when a user registers itself via public register api. Registrations via registration_shared_secret and ModuleApi do not work This auto_joins the users in the registration handler which enables the auto join feature for all 3 registration paths. This is related to issue #2725 Signed-Off-by: Matthias Kesler <krombel@krombel.de>
* | | | | | | Merge pull request #3061 from NotAFile/add-some-byte-stringsRichard van der Hoff2018-04-095-13/+13
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Add b prefixes to some strings that are bytes in py3
| * | | | | | | Add b prefixes to some strings that are bytes in py3Adrian Tschira2018-04-045-13/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This has no effect on python2 Signed-off-by: Adrian Tschira <nota@notafile.com>
* | | | | | | | Merge pull request #3073 from NotAFile/use-six-reraiseRichard van der Hoff2018-04-091-1/+3
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Replace old-style raise with six.reraise
| * | | | | | | | Replace old-style raise with six.reraiseAdrian Tschira2018-04-061-1/+3
| | |_|_|_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old style raise is invalid syntax in python3. As noted in the docs, this adds one more frame in the traceback, but I think this is acceptable: <ipython-input-7-bcc5cba3de3f> in <module>() 16 except: 17 pass ---> 18 six.reraise(*x) /usr/lib/python3.6/site-packages/six.py in reraise(tp, value, tb) 691 if value.__traceback__ is not tb: 692 raise value.with_traceback(tb) --> 693 raise value 694 finally: 695 value = None <ipython-input-7-bcc5cba3de3f> in <module>() 9 10 try: ---> 11 x() 12 except: 13 x = sys.exc_info() Also note that this uses six, which is not formally a dependency yet, but is included indirectly since most packages depend on it. Signed-off-by: Adrian Tschira <nota@notafile.com>
* | | | | | | | Merge pull request #2938 from dklug/developRichard van der Hoff2018-04-091-1/+4
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Return 401 for invalid access_token on logout
| * | | | | | | | Return 401 for invalid access_token on logoutdklug2018-03-021-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Duncan Klug <dklug@ucmerced.edu>
* | | | | | | | | Merge pull request #3074 from NotAFile/fix-py3-printsRichard van der Hoff2018-04-091-5/+5
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | use python3-compatible prints
| * | | | | | | | | use python3-compatible printsAdrian Tschira2018-04-061-5/+5
| | |/ / / / / / / | |/| | | | | | |
* | | | | | | | | Merge pull request #3075 from NotAFile/six-type-checksRichard van der Hoff2018-04-093-6/+12
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Replace some type checks with six type checks
| * | | | | | | | | Replace some type checks with six type checksAdrian Tschira2018-04-073-6/+12
| |/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
* | | | | | | | | Merge pull request #3016 from silkeh/improve-service-lookupsRichard van der Hoff2018-04-091-95/+8
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Improve handling of SRV records for federation connections
| * | | | | | | | | Remove address resolution of hosts in SRV recordsSilke2018-04-041-95/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Silke Hofstra <silke@slxh.eu>
* | | | | | | | | | Merge pull request #3080 from matrix-org/rav/fix_500_on_rejoinRichard van der Hoff2018-04-091-0/+8
|\ \ \ \ \ \ \ \ \ \ | |_|_|_|_|_|_|/ / / |/| | | | | | | | | Return a 404 rather than a 500 on rejoining empty rooms
| * | | | | | | | | Return a 404 rather than a 500 on rejoining empty roomsRichard van der Hoff2018-04-091-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Filter ourselves out of the server list before checking for an empty remote host list, to fix 500 error Fixes #2141
* | | | | | | | | | Revert "Merge pull request #3066 from matrix-org/rav/remove_redundant_metrics"Richard van der Hoff2018-04-092-0/+51
| |_|/ / / / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We aren't ready to release this yet, so I'm reverting it for now. This reverts commit d1679a4ed7947b0814e0f2af9b888a16c588f1a1, reversing changes made to e089100c6231541c446e37e157dec8feed02d283.
* | | | | | | | | Merge pull request #3046 from matrix-org/dbkr/join_groupLuke Barnard2018-04-065-25/+133
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Implement group join API
| * | | | | | | | | de-lint, quote consistencyLuke Barnard2018-04-061-2/+2
| | | | | | | | | |
| * | | | | | | | | Explicitly grab individual columns from group objectLuke Barnard2018-04-061-6/+8
| | | | | | | | | |
| * | | | | | | | | When exposing group state, return is_openly_joinableLuke Barnard2018-04-061-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | as opposed to join_policy, which is really only pertinent to the synapse implementation of the group server. By doing this we keep the group server concept extensible by allowing arbitrarily complex rules for deciding whether a group is openly joinable.
| * | | | | | | | | By default, join policy is "invite"Luke Barnard2018-04-061-1/+1
| | | | | | | | | |
| * | | | | | | | | add_user -> _add_userLuke Barnard2018-04-061-3/+3
| | | | | | | | | |
| * | | | | | | | | pep8Luke Barnard2018-04-062-2/+4
| | | | | | | | | |
| * | | | | | | | | Get group_info from existing call to check_group_is_oursLuke Barnard2018-04-061-5/+1
| | | | | | | | | |
| * | | | | | | | | Don't use redundant inlineCallbacksLuke Barnard2018-04-061-4/+1
| | | | | | | | | |
| * | | | | | | | | join_rule -> join_policyLuke Barnard2018-04-061-1/+1
| | | | | | | | | |
| * | | | | | | | | is_joinable -> join_ruleLuke Barnard2018-04-062-5/+2
| | | | | | | | | |
| * | | | | | | | | Fix federation client `set_group_joinable` typoLuke Barnard2018-04-061-1/+1
| | | | | | | | | |
| * | | | | | | | | Factor out add_user from accept_invite and join_groupLuke Barnard2018-04-061-41/+29
| | | | | | | | | |
| * | | | | | | | | pep8David Baker2018-04-061-1/+2
| | | | | | | | | |
| * | | | | | | | | Implement group join APIDavid Baker2018-04-065-4/+124
| | | | | | | | | |
* | | | | | | | | | Add response size metricsErik Johnston2018-04-061-0/+7
|/ / / / / / / / /
* / / / / / / / / use PUT instead of POST for federating groups/m.join_policyKrombel2018-04-063-3/+7
|/ / / / / / / /
* | | | | | | | more verbosity in synctlRichard van der Hoff2018-04-061-0/+1
| | | | | | | |
* | | | | | | | Merge pull request #2986 from jplatte/join_reponse_room_idRichard van der Hoff2018-04-051-1/+6
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Add room_id to the response of `rooms/{roomId}/join`
| * | | | | | | | Add room_id to the response of `rooms/{roomId}/join`Jonas Platte2018-03-131-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes #2349
* | | | | | | | | Merge pull request #3068 from matrix-org/rav/fix_cache_invalidationRichard van der Hoff2018-04-051-26/+38
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Improve database cache performance
| * | | | | | | | | Fix overzealous cache invalidationRichard van der Hoff2018-04-051-26/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes an issue where a cache invalidation would invalidate *all* pending entries, rather than just the entry that we intended to invalidate.
* | | | | | | | | | Merge pull request #3066 from matrix-org/rav/remove_redundant_metricsRichard van der Hoff2018-04-052-51/+0
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Remove redundant metrics which were deprecated in 0.27.0.
| * | | | | | | | | | Remove redundant metrics which were deprecated in 0.27.0.Richard van der Hoff2018-04-042-51/+0
| |/ / / / / / / / /
* | | | | | | | | | Merge pull request #3045 from matrix-org/dbkr/group_joinableLuke Barnard2018-04-058-0/+157
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Add joinability for groups
| * | | | | | | | | | NON NULL -> NOT NULLLuke Barnard2018-04-051-1/+1
| | | | | | | | | | |
| * | | | | | | | | | Use "/settings/" (plural)Luke Barnard2018-04-053-3/+3
| | | | | | | | | | |
| * | | | | | | | | | Use DEFAULT join_policy of "invite" in dbLuke Barnard2018-04-051-1/+1
| | | | | | | | | | |
| * | | | | | | | | | Document set_group_join_policyLuke Barnard2018-04-051-0/+6
| | | | | | | | | | |
| * | | | | | | | | | Use join_policy API instead of joinableLuke Barnard2018-04-037-23/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The API is now under /groups/$group_id/setting/m.join_policy and expects a JSON blob of the shape ```json { "m.join_policy": { "type": "invite" } } ``` where "invite" could alternatively be "open".
| * | | | | | | | | | This should probably be a PUTDavid Baker2018-03-281-1/+1
| | | | | | | | | | |
| * | | | | | | | | | OK, smallint it is thenDavid Baker2018-03-281-1/+1
| | | | | | | | | | |
| * | | | | | | | | | Grr. Copy the definition from is_adminDavid Baker2018-03-281-1/+1
| | | | | | | | | | |
| * | | | | | | | | | pep8David Baker2018-03-281-2/+1
| | | | | | | | | | |
| * | | | | | | | | | Make column definition that works on both dbsDavid Baker2018-03-281-1/+1
| | | | | | | | | | |
| * | | | | | | | | | Add schema delta fileDavid Baker2018-03-281-0/+16
| | | | | | | | | | |
| * | | | | | | | | | Add joinability for groupsDavid Baker2018-03-287-1/+102
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds API to set the 'joinable' flag, and corresponding flag in the table.
* | | | | | | | | | | Merge pull request #3041 from matrix-org/r30_statsNeil Johnson2018-04-055-7/+115
|\ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | R30 stats
| * | | | | | | | | | | Review commentsNeil Johnson2018-04-052-5/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use iteritems over item to loop over dict formatting
| * | | | | | | | | | | pep8Neil Johnson2018-03-291-2/+4
| | | | | | | | | | | |
| * | | | | | | | | | | Remove need for sqlite specific queryNeil Johnson2018-03-291-30/+57
| | | | | | | | | | | |
| * | | | | | | | | | | fix pep8 errorsNeil Johnson2018-03-281-3/+0
| | | | | | | | | | | |
| * | | | | | | | | | | remove twisted deferral cruftNeil Johnson2018-03-281-6/+3
| | | | | | | | | | | |
| * | | | | | | | | | | bump schema versionNeil Johnson2018-03-281-1/+1
| | | | | | | | | | | |
| * | | | | | | | | | | Support multi client R30 for psqlNeil Johnson2018-03-282-9/+31
| | | | | | | | | | | |
| * | | | | | | | | | | rename stat to future proofNeil Johnson2018-03-281-1/+1
| | | | | | | | | | | |
| * | | | | | | | | | | Add user_ips last seen indexNeil Johnson2018-03-282-0/+24
| | | | | | | | | | | |
| * | | | | | | | | | | No need to cast in count_daily_usersNeil Johnson2018-03-281-2/+2
| | | | | | | | | | | |
| * | | | | | | | | | | query and call for r30 statsNeil Johnson2018-03-282-0/+38
| | | | | | | | | | | |
| * | | | | | | | | | | count_daily_users failed if db was sqlite due to type failure - presumably ↵Neil Johnson2018-03-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | this prevcented all sqlite homeservers reporting home
* | | | | | | | | | | | Merge pull request #3060 from matrix-org/rav/kill_event_contentRichard van der Hoff2018-04-053-7/+12
|\ \ \ \ \ \ \ \ \ \ \ \ | |_|_|/ / / / / / / / / |/| | | | | | | | | | | Remove uses of events.content
| * | | | | | | | | | | Remove uses of events.contentRichard van der Hoff2018-03-293-7/+12
| | |_|_|_|_|_|_|_|_|/ | |/| | | | | | | | |
* | | | | | | | | | | phone home cache size configurationsJan Christian Grünhage2018-04-041-0/+3
| | | | | | | | | | |
* | | | | | | | | | | Revert "improve mxid check performance"Richard van der Hoff2018-04-041-4/+3
| |_|_|_|/ / / / / / |/| | | | | | | | |
* | | | | | | | | | Merge pull request #3000 from NotAFile/change-except-styleRichard van der Hoff2018-04-042-5/+5
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Replace old style error catching with 'as' keyword
| * | | | | | | | | | replace old style error catching with 'as' keywordNotAFile2018-03-152-5/+5
| | |_|_|_|_|_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is both easier to read and compatible with python3 (not that that matters) Signed-off-by: Adrian Tschira <nota@notafile.com>
* | | | | | | | | | Merge pull request #3044 from matrix-org/michaelk/performance_statsRichard van der Hoff2018-04-041-0/+33
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Add basic performance statistics to phone home
| * | | | | | | | | | Handle review commentsMichael Kaye2018-03-281-6/+9
| | | | | | | | | | |
| * | | | | | | | | | As daemonizing will make a new process, defer call to init.Michael Kaye2018-03-281-13/+23
| | | | | | | | | | |
| * | | | | | | | | | Include coarse CPU and Memory use in stats callbacks.Michael Kaye2018-03-271-0/+20
| | |_|/ / / / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This requires the psutil module, and is still opt-in based on the report_stats config option.
* | | | | | | | | | Merge pull request #3053 from NotAFile/speedup-mxid-checkRichard van der Hoff2018-04-041-3/+4
|\ \ \ \ \ \ \ \ \ \ | |_|_|_|_|_|_|/ / / |/| | | | | | | | | improve mxid check performance
| * | | | | | | | | improve mxid check performance ~4xAdrian Tschira2018-03-311-3/+4
| | |_|/ / / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Adrian Tschira <nota@notafile.com>
* | | | | | | | | Merge pull request #3049 from matrix-org/rav/use_staticjsonRichard van der Hoff2018-04-034-20/+34
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Use static JSONEncoders
| * | | | | | | | | Fix json encoding bug in replicationRichard van der Hoff2018-04-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | json encoders have an encode method, not a dumps method.
| * | | | | | | | | Use static JSONEncodersRichard van der Hoff2018-03-294-20/+34
| |/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | using json.dumps with custom options requires us to create a new JSONEncoder on each call. It's more efficient to create one upfront and reuse it.
* / / / / / / / / Use simplejson throughoutRichard van der Hoff2018-03-293-5/+9
|/ / / / / / / / | | | | | | | | | | | | | | | | | | | | | | | | Let's use simplejson rather than json, for consistency.
* | | | | | | | Merge pull request #3043 from matrix-org/erikj/measure_state_group_creationErik Johnston2018-03-281-27/+28
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Measure time it takes to calculate state group ID
| * | | | | | | | Measure time it takes to calculate state group IDErik Johnston2018-03-281-27/+28
| | |_|_|_|_|_|/ | |/| | | | | |
* | | | | | | | Merge pull request #3034 from matrix-org/rav/fix_key_claim_errorsRichard van der Hoff2018-03-281-28/+28
|\ \ \ \ \ \ \ \ | |_|_|_|_|_|_|/ |/| | | | | | | Fix error when claiming e2e keys from offline servers
| * | | | | | | Stringify exceptions for keys/{query,claim}Richard van der Hoff2018-03-271-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make sure we stringify any exceptions we return from keys/query and keys/claim, to avoid a 'not JSON serializable' error later Fixes #3010
| * | | | | | | factor out exception handling for keys/claim and keys/queryRichard van der Hoff2018-03-271-28/+25
| | |/ / / / / | |/| | | | | | | | | | | | | | | | | | | this stuff is badly c&p'ed
* | | | | | | Fix search_user_dir multiple sqlite versions do different thingsNeil Johnson2018-03-281-2/+2
| |/ / / / / |/| | | | |
* | | | | | Merge pull request #3029 from matrix-org/erikj/linearize_generate_user_idErik Johnston2018-03-282-7/+11
|\ \ \ \ \ \ | | | | | | | | | | | | | | Linearize calls to _generate_user_id
| * | | | | | Also do check inside linearizerErik Johnston2018-03-271-3/+4
| | | | | | |
| * | | | | | PEP8Erik Johnston2018-03-261-1/+3
| | | | | | |
| * | | | | | Don't use _cursor_to_dict in find_next_generated_user_id_localpartErik Johnston2018-03-261-3/+1
| | | | | | |
| * | | | | | Linearize calls to _generate_user_idErik Johnston2018-03-261-4/+7
| | | | | | |
* | | | | | | Merge pull request #3030 from matrix-org/erikj/no_ujsonErik Johnston2018-03-282-2/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Remove last usage of ujson
| * | | | | | | Remove last usage of ujsonErik Johnston2018-03-262-2/+1
| | | | | | | |
* | | | | | | | Merge pull request #3033 from matrix-org/erikj/calculate_state_metricsErik Johnston2018-03-281-1/+38
|\ \ \ \ \ \ \ \ | |_|_|/ / / / / |/| | | | | | | Add counter metrics for calculating state delta
| * | | | | | | CommentErik Johnston2018-03-271-4/+5
| | | | | | | |
| * | | | | | | Fix indentErik Johnston2018-03-271-1/+1
| | | | | | | |
| * | | | | | | CommentErik Johnston2018-03-271-0/+7
| | | | | | | |
| * | | | | | | Add counter metrics for calculating state deltaErik Johnston2018-03-271-1/+30
| | |_|_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This will allow us to measure how often we calculate state deltas in event persistence that we would have been able to calculate at the same time we calculated the state for the event.
* | | | | | | Merge pull request #3017 from matrix-org/erikj/add_cache_control_headersErik Johnston2018-03-271-0/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Add Cache-Control headers to all JSON APIs
| * | | | | | | Add Cache-Control headers to all JSON APIsErik Johnston2018-03-211-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is especially important that sync requests don't get cached, as if a sync returns the same token given then the client will call sync with the same parameters again. If the previous response was cached it will get reused, resulting in the client tight looping making the same request and never making any progress. In general, clients will expect to get up to date data when requesting APIs, and so its safer to do a blanket no cache policy than only whitelisting APIs that we know will break things if they get cached.
* | | | | | | | Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2018-03-261-1/+1
|\ \ \ \ \ \ \ \ | |_|/ / / / / / |/| | | | | | |
| * | | | | | | Bum version and changelogErik Johnston2018-03-261-1/+1
| | | | | | | |
| * | | | | | | Merge branch 'erikj/simplejson_replication' of github.com:matrix-org/synapse ↵Erik Johnston2018-03-261-7/+9
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | into release-v0.27.0
| * | | | | | | Bump version and changelogErik Johnston2018-03-261-1/+1
| | | | | | | |
| * | | | | | | version bumpNeil Johnson2018-03-261-1/+1
| | |/ / / / / | |/| | | | |
* | | | | | | 404 correctly on missing paths via NoResourceMatthew Hodgson2018-03-2312-24/+24
| |_|/ / / / |/| | | | | | | | | | | | | | | | | fixes https://github.com/matrix-org/synapse/issues/2043 and https://github.com/matrix-org/synapse/issues/2029
* | | | | | Merge pull request #3006 from matrix-org/erikj/state_iterErik Johnston2018-03-221-12/+12
|\ \ \ \ \ \ | | | | | | | | | | | | | | Use .iter* to avoid copies in StateHandler
| * | | | | | Fix s/iteriterms/itervaluesErik Johnston2018-03-221-1/+1
| | | | | | |
| * | | | | | Use .iter* to avoid copies in StateHandlerErik Johnston2018-03-151-12/+12
| | |_|/ / / | |/| | | |
* | | | | | Merge branch 'release-v0.27.0' of github.com:matrix-org/synapse into developErik Johnston2018-03-221-1/+1
|\ \ \ \ \ \ | | |/ / / / | |/| / / / | |_|/ / / |/| | | |
| * | | | fix merge conflictsNeil Johnson2018-03-2029-46/+57
| |\ \ \ \
| * | | | | Update __init__.pyNeil Johnson2018-03-191-1/+1
| | | | | | | | | | | | | | | | | | bump version
| * | | | | Bump version number v0.27.0-rc1Erik Johnston2018-03-151-1/+1
| | |/ / / | |/| | |
* | | | | Explicitly use simplejsonErik Johnston2018-03-201-7/+7
| | | | |
* | | | | Fix replication after switch to simplejsonErik Johnston2018-03-191-2/+4
| |/ / / |/| | | | | | | | | | | | | | | Turns out that simplejson serialises namedtuple's as dictionaries rather than tuples by default.
* | | | Merge pull request #3005 from matrix-org/erikj/fix_cache_sizeErik Johnston2018-03-192-5/+16
|\ \ \ \ | | | | | | | | | | Fix bug where state cache used lots of memory
| * | | | Add commentsErik Johnston2018-03-191-0/+7
| | | | |
| * | | | Fix bug where state cache used lots of memoryErik Johnston2018-03-152-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.
* | | | Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2018-03-1925-37/+34
|\ \ \ \
| * | | | Remove wrong commentErik Johnston2018-03-161-1/+0
| | | | |
| * | | | Bump version and changelogErik Johnston2018-03-151-1/+1
| | | | |
| * | | | Replace ujson with simplejsonErik Johnston2018-03-1525-38/+37
| | | | |
* | | | | spell out not to massively increase bcrypt roundsMatthew Hodgson2018-03-191-1/+3
| | | | |
* | | | | Replace some ujson with simplejson to make it workErik Johnston2018-03-164-4/+5
| |/ / / |/| | |
* | | | Register membership/state servlets in event_creatorErik Johnston2018-03-141-1/+13
| | | |
* | | | Merge pull request #2992 from matrix-org/erikj/implement_member_workreErik Johnston2018-03-144-4/+440
|\ \ \ \ | | | | | | | | | | Implement RoomMemberWorkerHandler
| * | | | Fix importsErik Johnston2018-03-142-7/+4
| | | | |
| * | | | s/join/joined/ in notify_user_membership_changeErik Johnston2018-03-142-4/+4
| | | | |
| * | | | Split RoomMemberWorkerHandler to separate fileErik Johnston2018-03-143-81/+104
| | | | |
| * | | | Implement RoomMemberWorkerHandlerErik Johnston2018-03-134-2/+418
| | | | |
* | | | | Merge pull request #2989 from matrix-org/erikj/profile_cache_masterErik Johnston2018-03-141-1/+4
|\ \ \ \ \ | | | | | | | | | | | | Only update remote profile cache on master
| * | | | | Only update remote profile cache on masterErik Johnston2018-03-131-1/+4
| | | | | |
* | | | | | Merge pull request #2988 from matrix-org/erikj/split_profile_storeErik Johnston2018-03-142-24/+47
|\ \ \ \ \ \ | | | | | | | | | | | | | | Split up ProfileStore
| * | | | | | Split up ProfileStoreErik Johnston2018-03-132-24/+47
| |/ / / / /
* | | | | | Merge pull request #2991 from matrix-org/erikj/fixup_rmErik Johnston2018-03-141-4/+4
|\ \ \ \ \ \ | | | | | | | | | | | | | | _remote_join and co take a requester
| * | | | | | _remote_join and co take a requesterErik Johnston2018-03-131-4/+4
| | |/ / / / | |/| | | |
* | | | | | Merge pull request #2993 from matrix-org/erikj/is_blockedErik Johnston2018-03-141-13/+17
|\ \ \ \ \ \ | | | | | | | | | | | | | | Add is_blocked to worker store
| * | | | | | Add is_blocked to worker storeErik Johnston2018-03-131-13/+17
| |/ / / / /
* / / / / / fix bug #2926 (loading all state for a given type from the DB if the ↵Matthew Hodgson2018-03-131-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.
* | | | | Merge pull request #2987 from matrix-org/erikj/split_room_member_handlerErik Johnston2018-03-132-100/+189
|\ \ \ \ \ | |/ / / / |/| | | | Split RoomMemberHandler into base and master class
| * | | | Raise, don't return, exceptionErik Johnston2018-03-131-1/+1
| | | | |
| * | | | Add missing param to docstringsErik Johnston2018-03-131-0/+3
| | | | |
| * | | | Correct import orderErik Johnston2018-03-131-3/+3
| | | | |
| * | | | Move user_*_room distributor stuff to master classErik Johnston2018-03-131-5/+50
| | | | | | | | | | | | | | | | | | | | | | | | | I added yields when calling user_left_room, but they shouldn't matter on the master process as they always return None anyway.
| * | | | Split RoomMemberHandler into base and master classErik Johnston2018-03-132-98/+139
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The intention here is to split the class into the bits that can be done on workers and the bits that have to be done on the master. In future there will also be a class that can be run on the worker, which will delegate work to the master when necessary.
* | | | | Merge pull request #2978 from matrix-org/erikj/refactor_replication_layerErik Johnston2018-03-139-12/+12
|\ \ \ \ \ | | | | | | | | | | | | Remove ReplicationLayer and user Client/Server directly
| * | | | | s/replication_client/federation_client/Erik Johnston2018-03-138-9/+9
| | | | | |
| * | | | | s/replication_server/federation_serverErik Johnston2018-03-132-3/+3
| | | | | |
* | | | | | Merge pull request #2981 from matrix-org/erikj/factor_remote_leaveErik Johnston2018-03-131-22/+54
|\ \ \ \ \ \ | | |/ / / / | |/| | / / | |_|_|/ / |/| | | | Factor out _remote_reject_invite in RoomMember
| * | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵Erik Johnston2018-03-1319-110/+146
| |\ \ \ \ | | | | | | | | | | | | | | | | | | erikj/factor_remote_leave
| * | | | | Add docstringErik Johnston2018-03-131-0/+26
| | | | | |
| * | | | | Factor out _remote_reject_invite in RoomMemberErik Johnston2018-03-131-22/+28
| | | | | |
* | | | | | Merge pull request #2979 from matrix-org/erikj/no_handlersErik Johnston2018-03-1319-91/+19
|\ \ \ \ \ \ | |_|/ / / / |/| | | | | Don't build handlers on workers unnecessarily
| * | | | | Don't build handlers on workers unnecessarilyErik Johnston2018-03-135-5/+0
| | |/ / / | |/| | |
| * | | | Remove unused ReplicationLayerErik Johnston2018-03-132-59/+0
| | | | |
| * | | | Split replication layer into twoErik Johnston2018-03-1312-27/+19
| | | | |
* | | | | Merge pull request #2980 from matrix-org/erikj/rm_privErik Johnston2018-03-131-7/+7
|\ \ \ \ \ | | | | | | | | | | | | Make RoomMemberHandler functions private that can be
| * | | | | Make functions private that can beErik Johnston2018-03-131-7/+7
| | |/ / / | |/| | |
* | | | | Merge pull request #2982 from matrix-org/erikj/fix_extra_usersErik Johnston2018-03-132-5/+5
|\ \ \ \ \ | | | | | | | | | | | | extra_users is actually a list of UserIDs
| * | | | | extra_users is actually a list of UserIDsErik Johnston2018-03-132-5/+5
| |/ / / /
* | | | | Merge pull request #2983 from matrix-org/erikj/rename_register_3pidErik Johnston2018-03-132-11/+25
|\ \ \ \ \ | | | | | | | | | | | | Refactor get_or_register_3pid_guest
| * | | | | Refactor get_or_register_3pid_guestErik Johnston2018-03-132-11/+25
| |/ / / /
* | | | | Merge pull request #2984 from matrix-org/erikj/fix_rest_regeixErik Johnston2018-03-131-1/+1
|\ \ \ \ \ | | | | | | | | | | | | RoomMembershipRestServlet doesn't handle /forget
| * | | | | RoomMembershipRestServlet doesn't handle /forgetErik Johnston2018-03-131-1/+1
| |/ / / / | | | | | | | | | | | | | | | | | | | | Due to the order we register the REST handlers `/forget` was handled by the correct handler.
* | | | | Merge pull request #2975 from matrix-org/rav/measure_persist_eventsRichard van der Hoff2018-03-131-4/+5
|\ \ \ \ \ | | | | | | | | | | | | Add Measure block for persist_events
| * | | | | Add Measure block for persist_eventsRichard van der Hoff2018-03-131-4/+5
| |/ / / / | | | | | | | | | | | | | | | This seems like a useful thing to measure.
* | | | | Merge pull request #2977 from matrix-org/erikj/replication_move_propsErik Johnston2018-03-134-22/+13
|\ \ \ \ \ | | |/ / / | |/| | | Move property setting from ReplicationLayer to base classes
| * | | | Move property setting from ReplicationLayer to FederationBaseErik Johnston2018-03-134-22/+13
| | | | |
* | | | | Fix docstring typesErik Johnston2018-03-131-2/+2
|/ / / /
* / / / Split out edu/query registration to a separate classErik Johnston2018-03-1310-60/+90
|/ / /
* | | Add transactional API to history purgeRichard van der Hoff2018-03-122-8/+134
| | | | | | | | | | | | Make the purge request return quickly, and allow scripts to poll for updates.
* | | Return an error when doing two purges on a roomRichard van der Hoff2018-03-121-3/+14
| | | | | | | | | | | | Queuing up purges doesn't sound like a good thing.
* | | Merge pull request #2961 from matrix-org/rav/run_in_backgroundRichard van der Hoff2018-03-121-24/+29
|\ \ \ | | | | | | | | Factor run_in_background out from preserve_fn
| * | | Factor run_in_background out from preserve_fnRichard van der Hoff2018-03-081-24/+29
| | | | | | | | | | | | | | | | | | | | It annoys me that we create temporary function objects when there's really no need for it. Let's factor the gubbins out of preserve_fn and start using it.
* | | | Merge pull request #2965 from matrix-org/rav/request_loggingRichard van der Hoff2018-03-122-34/+96
|\ \ \ \ | | | | | | | | | | Add a metric which increments when a request is received
| * | | | Add some docstrings to help figure this outRichard van der Hoff2018-03-091-2/+26
| | | | |
| * | | | Add a metric which increments when a request is receivedRichard van der Hoff2018-03-092-2/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It's useful to know when there are peaks in incoming requests - which isn't quite the same as there being peaks in outgoing responses, due to the time taken to handle requests.
| * | | | refactor JsonResourceRichard van der Hoff2018-03-091-32/+46
| | | | | | | | | | | | | | | | | | | | | | | | | rephrase the OPTIONS and unrecognised request handling so that they look similar to the common flow.
* | | | | Fix up log messageErik Johnston2018-03-071-1/+1
| | | | |
* | | | | Fix typoErik Johnston2018-03-071-2/+2
| | | | |
* | | | | Fix race in sync when joining roomErik Johnston2018-03-073-30/+102
| |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 #2949 from krombel/use_bcrypt_checkpwRichard van der Hoff2018-03-062-3/+5
|\ \ \ \ | | | | | | | | | | use bcrypt.checkpw
| * | | | use bcrypt.checkpwKrombel2018-03-052-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | in bcrypt 3.1.0 checkpw got introduced (already 2 years ago) This makes use of that with enhancements which might get introduced by that Signed-Off-by: Matthias Kesler <krombel@krombel.de>
* | | | | Merge pull request #2946 from matrix-org/rav/timestamp_to_purgeRichard van der Hoff2018-03-063-12/+87
|\ \ \ \ \ | | | | | | | | | | | | Implement purge_history by timestamp
| * | | | | Provide a means to pass a timestamp to purge_historyRichard van der Hoff2018-03-053-12/+87
| |/ / / /
* | | | | Merge pull request #2948 from matrix-org/erikj/kill_as_syncErik Johnston2018-03-064-163/+14
|\ \ \ \ \ | | | | | | | | | | | | Remove ability for AS users to call /events and /sync
| * | | | | Remove ability for AS users to call /events and /syncErik Johnston2018-03-054-163/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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_storeErik Johnston2018-03-052-28/+30
|\ \ \ \ \ \ | |_|/ / / / |/| | | | | Split Directory store