Skip to content

Commit 398f9af

Browse files
committed
Catch unique errors when inserting megolm sessions
1 parent 61d8e6f commit 398f9af

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

mautrix/crypto/store/asyncpg/store.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from collections import defaultdict
99
from datetime import timedelta
1010

11+
from asyncpg import UniqueViolationError
12+
1113
from mautrix.client.state_store import SyncStore
1214
from mautrix.client.state_store.asyncpg import PgStateStore
1315
from mautrix.types import (
@@ -33,13 +35,16 @@
3335
from .upgrade import upgrade_table
3436

3537
try:
36-
from sqlite3 import sqlite_version_info as sqlite_version
38+
from sqlite3 import IntegrityError, sqlite_version_info as sqlite_version
3739

3840
from aiosqlite import Cursor
3941
except ImportError:
4042
Cursor = None
4143
sqlite_version = (0, 0, 0)
4244

45+
class IntegrityError(Exception):
46+
pass
47+
4348

4449
class PgCryptoStateStore(PgStateStore, StateStore):
4550
"""
@@ -231,16 +236,19 @@ async def put_group_session(
231236
session_id, sender_key, signing_key, room_id, session, forwarding_chains, account_id
232237
) VALUES ($1, $2, $3, $4, $5, $6, $7)
233238
"""
234-
await self.db.execute(
235-
q,
236-
session_id,
237-
sender_key,
238-
session.signing_key,
239-
room_id,
240-
pickle,
241-
forwarding_chains,
242-
self.account_id,
243-
)
239+
try:
240+
await self.db.execute(
241+
q,
242+
session_id,
243+
sender_key,
244+
session.signing_key,
245+
room_id,
246+
pickle,
247+
forwarding_chains,
248+
self.account_id,
249+
)
250+
except (IntegrityError, UniqueViolationError):
251+
self.log.exception(f"Failed to insert megolm session {session_id}")
244252

245253
async def get_group_session(
246254
self, room_id: RoomID, session_id: SessionID

0 commit comments

Comments
 (0)