Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Make AS's faster #2076

Merged
merged 4 commits into from
Mar 31, 2017
Merged

Make AS's faster #2076

merged 4 commits into from
Mar 31, 2017

Conversation

erikjohnston
Copy link
Member

No description provided.

if not isinstance(regex_obj.get("regex"), basestring):
regex = regex_obj.get("regex")
if isinstance(regex, basestring):
regex_obj["regex"] = re.compile(regex)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please comment that you're pre-compiling the regexps.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Err, like this?

regex_obj["regex"] = re.compile(regex)  # Pre-compile regex

Isn't that commenting on what a line does? I don't see how it helps understanding?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're clobbering directly over a regex string with a regex object, but fail to say why you're doing this - which is to pre-compile it so you don't need to incur repeated compilation costs. A one-liner inline comment as you have there looks good to me.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, in which case I think I'll change it to not clobber the existing value, or comment in the function name/docstring.

A comment which is literally describing what a code line is doing always feels wrong to me, and from your comment it sounds like you more dislike the clobbering here than not understanding what's going on. The question is: who is this comment going to help? People who are trying to figure out what the type is will either a) not find the line and guess or b) see from the code its a regex object.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A comment which is literally describing what a code line is doing

It isn't. This is a comment which literally describes what a code line is doing:

# replace regex string with regex object
regex_obj["regex"] = re.compile(regex)

What I want to know is why you're doing this. Why don't we keep them as strings and then do it on the fly? Because that's needlessly slow compared to pre-compiling the regex. I don't care about the fact you're clobbering, I care that you fail to describe your intent.

raise ValueError(
"Expected string for 'regex' in ns '%s'" % ns
)
return namespaces

def _matches_regex(self, test_string, namespace_key, return_obj=False):
if not isinstance(test_string, basestring):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We've lost this type check entirely - is this check expensive enough to warrant that (eg in JS it actually kinda is, introspection of types is painful, python idk).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is basically against the code style, we never check parameters (except in exceptional circumstances). I think it hurts readability if we do type checking of all parameters, even worse when we only check one parameter.

Besides, the call to re.match will implode if its not a string.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay.

raise ValueError(
"Expected string for 'regex' in ns '%s'" % ns
)
return namespaces

def _matches_regex(self, test_string, namespace_key, return_obj=False):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We've lost the return_obj arg. Was it ever used?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, hence why I changed it at the call sites as per commit message

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay.

@kegsay kegsay assigned kegsay and unassigned richvdh Mar 28, 2017
@kegsay
Copy link
Member

kegsay commented Mar 28, 2017

Otherwise LGTM!

@kegsay
Copy link
Member

kegsay commented Mar 30, 2017

Pending comment, but then LGTM

@erikjohnston erikjohnston merged commit 350333a into develop Mar 31, 2017
psaavedra added a commit to psaavedra/synapse that referenced this pull request May 19, 2017
Changes in synapse v0.21.0 (2017-05-18)
=======================================

No changes since v0.21.0-rc3

Changes in synapse v0.21.0-rc3 (2017-05-17)
===========================================

Features:

* Add per user rate-limiting overrides (PR matrix-org#2208)
* Add config option to limit maximum number of events requested by ``/sync``
  and ``/messages`` (PR matrix-org#2221) Thanks to @psaavedra!

Changes:

* Various small performance fixes (PR matrix-org#2201, matrix-org#2202, matrix-org#2224, matrix-org#2226, matrix-org#2227, matrix-org#2228,
  matrix-org#2229)
* Update username availability checker API (PR matrix-org#2209, matrix-org#2213)
* When purging, don't de-delta state groups we're about to delete (PR matrix-org#2214)
* Documentation to check synapse version (PR matrix-org#2215) Thanks to @hamber-dick!
* Add an index to event_search to speed up purge history API (PR matrix-org#2218)

Bug fixes:

* Fix API to allow clients to upload one-time-keys with new sigs (PR matrix-org#2206)

Changes in synapse v0.21.0-rc2 (2017-05-08)
===========================================

Changes:

* Always mark remotes as up if we receive a signed request from them (PR matrix-org#2190)

Bug fixes:

* Fix bug where users got pushed for rooms they had muted (PR matrix-org#2200)

Changes in synapse v0.21.0-rc1 (2017-05-08)
===========================================

Features:

* Add username availability checker API (PR matrix-org#2183)
* Add read marker API (PR matrix-org#2120)

Changes:

* Enable guest access for the 3pl/3pid APIs (PR matrix-org#1986)
* Add setting to support TURN for guests (PR matrix-org#2011)
* Various performance improvements (PR matrix-org#2075, matrix-org#2076, matrix-org#2080, matrix-org#2083, matrix-org#2108,
  matrix-org#2158, matrix-org#2176, matrix-org#2185)
* Make synctl a bit more user friendly (PR matrix-org#2078, matrix-org#2127) Thanks @APwhitehat!
* Replace HTTP replication with TCP replication (PR matrix-org#2082, matrix-org#2097, matrix-org#2098,
  matrix-org#2099, matrix-org#2103, matrix-org#2014, matrix-org#2016, matrix-org#2115, matrix-org#2116, matrix-org#2117)
* Support authenticated SMTP (PR matrix-org#2102) Thanks @DanielDent!
* Add a counter metric for successfully-sent transactions (PR matrix-org#2121)
* Propagate errors sensibly from proxied IS requests (PR matrix-org#2147)
* Add more granular event send metrics (PR matrix-org#2178)

Bug fixes:

* Fix nuke-room script to work with current schema (PR matrix-org#1927) Thanks
  @zuckschwerdt!
* Fix db port script to not assume postgres tables are in the public schema
  (PR matrix-org#2024) Thanks @jerrykan!
* Fix getting latest device IP for user with no devices (PR matrix-org#2118)
* Fix rejection of invites to unreachable servers (PR matrix-org#2145)
* Fix code for reporting old verify keys in synapse (PR matrix-org#2156)
* Fix invite state to always include all events (PR matrix-org#2163)
* Fix bug where synapse would always fetch state for any missing event (PR matrix-org#2170)
* Fix a leak with timed out HTTP connections (PR matrix-org#2180)
* Fix bug where we didn't time out HTTP requests to ASes  (PR matrix-org#2192)

Docs:

* Clarify doc for SQLite to PostgreSQL port (PR matrix-org#1961) Thanks @benhylau!
* Fix typo in synctl help (PR matrix-org#2107) Thanks @HarHarLinks!
* ``web_client_location`` documentation fix (PR matrix-org#2131) Thanks @matthewjwolff!
* Update README.rst with FreeBSD changes (PR matrix-org#2132) Thanks @feld!
* Clarify setting up metrics (PR matrix-org#2149) Thanks @encks!
@erikjohnston erikjohnston deleted the erikj/as_perf branch October 26, 2017 10:59
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants