Avoid locking for upsert on pushers tables
* replace the upsert into deleted_pushers with an insert * no need to lock for upsert on pusher_throttle
This commit is contained in:
parent
ba05f28ae7
commit
06e5bcfc83
|
@ -244,11 +244,19 @@ class PusherStore(SQLBaseStore):
|
||||||
"pushers",
|
"pushers",
|
||||||
{"app_id": app_id, "pushkey": pushkey, "user_name": user_id}
|
{"app_id": app_id, "pushkey": pushkey, "user_name": user_id}
|
||||||
)
|
)
|
||||||
self._simple_upsert_txn(
|
|
||||||
|
# it's possible for us to end up with duplicate rows for
|
||||||
|
# (app_id, pushkey, user_id) at different stream_ids, but that
|
||||||
|
# doesn't really matter.
|
||||||
|
self._simple_insert_txn(
|
||||||
txn,
|
txn,
|
||||||
"deleted_pushers",
|
table="deleted_pushers",
|
||||||
{"app_id": app_id, "pushkey": pushkey, "user_id": user_id},
|
values={
|
||||||
{"stream_id": stream_id},
|
"stream_id": stream_id,
|
||||||
|
"app_id": app_id,
|
||||||
|
"pushkey": pushkey,
|
||||||
|
"user_id": user_id,
|
||||||
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
with self._pushers_id_gen.get_next() as stream_id:
|
with self._pushers_id_gen.get_next() as stream_id:
|
||||||
|
@ -311,9 +319,12 @@ class PusherStore(SQLBaseStore):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def set_throttle_params(self, pusher_id, room_id, params):
|
def set_throttle_params(self, pusher_id, room_id, params):
|
||||||
|
# no need to lock because `pusher_throttle` has a primary key on
|
||||||
|
# (pusher, room_id) so _simple_upsert will retry
|
||||||
yield self._simple_upsert(
|
yield self._simple_upsert(
|
||||||
"pusher_throttle",
|
"pusher_throttle",
|
||||||
{"pusher": pusher_id, "room_id": room_id},
|
{"pusher": pusher_id, "room_id": room_id},
|
||||||
params,
|
params,
|
||||||
desc="set_throttle_params"
|
desc="set_throttle_params",
|
||||||
|
lock=False,
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/* Copyright 2017 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- drop the unique constraint on deleted_pushers so that we can just insert
|
||||||
|
-- into it rather than upserting.
|
||||||
|
|
||||||
|
CREATE TABLE deleted_pushers2 (
|
||||||
|
stream_id BIGINT NOT NULL,
|
||||||
|
app_id TEXT NOT NULL,
|
||||||
|
pushkey TEXT NOT NULL,
|
||||||
|
user_id TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO deleted_pushers2 (stream_id, app_id, pushkey, user_id)
|
||||||
|
SELECT stream_id, app_id, pushkey, user_id from deleted_pushers;
|
||||||
|
|
||||||
|
DROP TABLE deleted_pushers;
|
||||||
|
ALTER TABLE deleted_pushers2 RENAME TO deleted_pushers;
|
||||||
|
|
||||||
|
-- create the index after doing the inserts because that's more efficient.
|
||||||
|
-- it also means we can give it the same name as the old one without renaming.
|
||||||
|
CREATE INDEX deleted_pushers_stream_id ON deleted_pushers (stream_id);
|
||||||
|
|
Loading…
Reference in New Issue