mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 11:06:07 -04:00
Reduce serialization errors in MultiWriterIdGen (#8456)
We call `_update_stream_positions_table_txn` a lot, which is an UPSERT that can conflict in `REPEATABLE READ` isolation level. Instead of doing a transaction consisting of a single query we may as well run it outside of a transaction.
This commit is contained in:
parent
52a50e8686
commit
ae5b2a72c0
7 changed files with 112 additions and 8 deletions
|
@ -97,3 +97,20 @@ class BaseDatabaseEngine(Generic[ConnectionType], metaclass=abc.ABCMeta):
|
|||
"""Gets a string giving the server version. For example: '3.22.0'
|
||||
"""
|
||||
...
|
||||
|
||||
@abc.abstractmethod
|
||||
def in_transaction(self, conn: Connection) -> bool:
|
||||
"""Whether the connection is currently in a transaction.
|
||||
"""
|
||||
...
|
||||
|
||||
@abc.abstractmethod
|
||||
def attempt_to_set_autocommit(self, conn: Connection, autocommit: bool):
|
||||
"""Attempt to set the connections autocommit mode.
|
||||
|
||||
When True queries are run outside of transactions.
|
||||
|
||||
Note: This has no effect on SQLite3, so callers still need to
|
||||
commit/rollback the connections.
|
||||
"""
|
||||
...
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue