Apparently we can't do txn.rollback(), so raise and catch an exception instead.
This commit is contained in:
parent
c1a25756c2
commit
e062f2dfa8
|
@ -47,6 +47,11 @@ import os
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class _RollbackButIsFineException(Exception):
|
||||||
|
""" This exception is used to rollback a transaction without implying
|
||||||
|
something went wrong.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
class DataStore(RoomMemberStore, RoomStore,
|
class DataStore(RoomMemberStore, RoomStore,
|
||||||
RegistrationStore, StreamStore, ProfileStore, FeedbackStore,
|
RegistrationStore, StreamStore, ProfileStore, FeedbackStore,
|
||||||
|
@ -71,6 +76,7 @@ class DataStore(RoomMemberStore, RoomStore,
|
||||||
self.min_token -= 1
|
self.min_token -= 1
|
||||||
stream_ordering = self.min_token
|
stream_ordering = self.min_token
|
||||||
|
|
||||||
|
try:
|
||||||
latest = yield self._db_pool.runInteraction(
|
latest = yield self._db_pool.runInteraction(
|
||||||
self._persist_pdu_event_txn,
|
self._persist_pdu_event_txn,
|
||||||
pdu=pdu,
|
pdu=pdu,
|
||||||
|
@ -78,6 +84,8 @@ class DataStore(RoomMemberStore, RoomStore,
|
||||||
backfilled=backfilled,
|
backfilled=backfilled,
|
||||||
stream_ordering=stream_ordering,
|
stream_ordering=stream_ordering,
|
||||||
)
|
)
|
||||||
|
except _RollbackButIsFineException as e:
|
||||||
|
pass
|
||||||
defer.returnValue(latest)
|
defer.returnValue(latest)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
@ -175,12 +183,12 @@ class DataStore(RoomMemberStore, RoomStore,
|
||||||
try:
|
try:
|
||||||
self._simple_insert_txn(txn, "events", vals)
|
self._simple_insert_txn(txn, "events", vals)
|
||||||
except:
|
except:
|
||||||
logger.exception(
|
logger.warn(
|
||||||
"Failed to persist, probably duplicate: %s",
|
"Failed to persist, probably duplicate: %s",
|
||||||
event.event_id
|
event.event_id,
|
||||||
|
exc_info=True,
|
||||||
)
|
)
|
||||||
txn.rollback()
|
raise _RollbackButIsFineException("_persist_event")
|
||||||
return
|
|
||||||
|
|
||||||
if not backfilled and hasattr(event, "state_key"):
|
if not backfilled and hasattr(event, "state_key"):
|
||||||
vals = {
|
vals = {
|
||||||
|
|
Loading…
Reference in New Issue