diff options
author | Erik Johnston <erik@matrix.org> | 2015-04-29 19:17:00 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-04-29 19:17:00 +0100 |
commit | 50f96f256f01dcdb549017f68eccb2ae8a285134 (patch) | |
tree | b0f1ab75686581fd3a4d8d8d072b7fd65fa3f0c6 /synapse/storage | |
parent | Fix deadlock in id_generators. No idea why this was an actual deadlock. (diff) | |
download | synapse-50f96f256f01dcdb549017f68eccb2ae8a285134.tar.xz |
Also remove yield from within lock in the other generator
Diffstat (limited to 'synapse/storage')
-rw-r--r-- | synapse/storage/util/id_generators.py | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/synapse/storage/util/id_generators.py b/synapse/storage/util/id_generators.py index 54aeff2b43..a51268511c 100644 --- a/synapse/storage/util/id_generators.py +++ b/synapse/storage/util/id_generators.py @@ -30,15 +30,13 @@ class IdGenerator(object): @defer.inlineCallbacks def get_next(self): - with self._lock: - if not self._next_id: - res = yield self.store._execute_and_decode( - "IdGenerator_%s" % (self.table,), - "SELECT MAX(%s) as mx FROM %s" % (self.column, self.table,) - ) - - self._next_id = (res and res[0] and res[0]["mx"]) or 1 + if self._next_id is None: + yield self.store.runInteraction( + "IdGenerator_%s" % (self.table,), + self.get_next_txn, + ) + with self._lock: i = self._next_id self._next_id += 1 defer.returnValue(i) |