diff options
author | Erik Johnston <erik@matrix.org> | 2015-04-15 16:24:14 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2015-04-15 16:24:14 +0100 |
commit | ed26e4012bb68cbde33f020b2756efe2bc87455a (patch) | |
tree | 0aaf676c7387b65addea28f94fb42fdb4ffc77d9 /synapse/storage | |
parent | Make LruCache thread safe, as its used for event cache (diff) | |
download | synapse-ed26e4012bb68cbde33f020b2756efe2bc87455a.tar.xz |
pushers table requires a unique id.
Diffstat (limited to 'synapse/storage')
-rw-r--r-- | synapse/storage/_base.py | 10 | ||||
-rw-r--r-- | synapse/storage/pusher.py | 4 |
2 files changed, 11 insertions, 3 deletions
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py index ede25c43b7..43a923d914 100644 --- a/synapse/storage/_base.py +++ b/synapse/storage/_base.py @@ -260,6 +260,7 @@ class SQLBaseStore(object): self._transaction_id_gen = IdGenerator("sent_transactions", "id", self) self._state_groups_id_gen = IdGenerator("state_groups", "id", self) self._access_tokens_id_gen = IdGenerator("access_tokens", "id", self) + self._pushers_id_gen = IdGenerator("pushers", "id", self) def start_profiling(self): self._previous_loop_ts = self._clock.time_msec() @@ -423,20 +424,22 @@ class SQLBaseStore(object): txn.execute(sql, values.values()) - def _simple_upsert(self, table, keyvalues, values, desc="_simple_upsert"): + def _simple_upsert(self, table, keyvalues, values, + insertion_values={}, desc="_simple_upsert"): """ Args: table (str): The table to upsert into keyvalues (dict): The unique key tables and their new values values (dict): The nonunique columns and their new values + insertion_values (dict): key/values to use when inserting Returns: A deferred """ return self.runInteraction( desc, - self._simple_upsert_txn, table, keyvalues, values + self._simple_upsert_txn, table, keyvalues, values, insertion_values, ) - def _simple_upsert_txn(self, txn, table, keyvalues, values): + def _simple_upsert_txn(self, txn, table, keyvalues, values, insertion_values={}): # Try to update sql = "UPDATE %s SET %s WHERE %s" % ( table, @@ -455,6 +458,7 @@ class SQLBaseStore(object): allvalues = {} allvalues.update(keyvalues) allvalues.update(values) + allvalues.update(insertion_values) sql = "INSERT INTO %s (%s) VALUES (%s)" % ( table, diff --git a/synapse/storage/pusher.py b/synapse/storage/pusher.py index 000502b4ff..e4135ba922 100644 --- a/synapse/storage/pusher.py +++ b/synapse/storage/pusher.py @@ -99,6 +99,7 @@ class PusherStore(SQLBaseStore): app_display_name, device_display_name, pushkey, pushkey_ts, lang, data): try: + next_id = self._pushers_id_gen.get_next() yield self._simple_upsert( PushersTable.table_name, dict( @@ -115,6 +116,9 @@ class PusherStore(SQLBaseStore): lang=lang, data=data ), + insertion_values=dict( + id=next_id, + ), desc="add_pusher", ) except Exception as e: |