diff options
author | Erik Johnston <erik@matrix.org> | 2019-11-26 17:04:15 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-26 17:04:15 +0000 |
commit | f085894cd118557441a2c5fb71c06c7f66b7fe1a (patch) | |
tree | 0e48a89740363a1fc36fd7a7b5a4d5c331ab2cad /synapse/storage | |
parent | Merge branch 'master' into develop (diff) | |
parent | Don't construct a set (diff) | |
download | synapse-f085894cd118557441a2c5fb71c06c7f66b7fe1a.tar.xz |
Merge pull request #6420 from matrix-org/erikj/fix_find_next_generated_user_id_localpart
Fix guest registration
Diffstat (limited to 'synapse/storage')
-rw-r--r-- | synapse/storage/data_stores/main/registration.py | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/synapse/storage/data_stores/main/registration.py b/synapse/storage/data_stores/main/registration.py index 6a594c160c..0a3c1f0510 100644 --- a/synapse/storage/data_stores/main/registration.py +++ b/synapse/storage/data_stores/main/registration.py @@ -19,7 +19,6 @@ import logging import re from six import iterkeys -from six.moves import range from twisted.internet import defer from twisted.internet.defer import Deferred @@ -482,12 +481,8 @@ class RegistrationWorkerStore(SQLBaseStore): """ Gets the localpart of the next generated user ID. - Generated user IDs are integers, and we aim for them to be as small as - we can. Unfortunately, it's possible some of them are already taken by - existing users, and there may be gaps in the already taken range. This - function returns the start of the first allocatable gap. This is to - avoid the case of ID 1000 being pre-allocated and starting at 1001 while - 0-999 are available. + Generated user IDs are integers, so we find the largest integer user ID + already taken and return that plus one. """ def _find_next_generated_user_id(txn): @@ -497,15 +492,14 @@ class RegistrationWorkerStore(SQLBaseStore): regex = re.compile(r"^@(\d+):") - found = set() + max_found = 0 for (user_id,) in txn: match = regex.search(user_id) if match: - found.add(int(match.group(1))) - for i in range(len(found) + 1): - if i not in found: - return i + max_found = max(int(match.group(1)), max_found) + + return max_found + 1 return ( ( |