Fix a number of "Starting txn from sentinel context" warnings (#5605)

Fixes #5602, #5603
This commit is contained in:
Richard van der Hoff 2019-07-03 09:31:27 +01:00 committed by GitHub
parent c7b48bd42d
commit 91753cae59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 6 deletions

1
changelog.d/5605.bugfix Normal file
View File

@ -0,0 +1 @@
Fix a number of "Starting txn from sentinel context" warnings.

View File

@ -22,6 +22,7 @@ from email.mime.text import MIMEText
from twisted.internet import defer from twisted.internet import defer
from synapse.api.errors import StoreError from synapse.api.errors import StoreError
from synapse.metrics.background_process_metrics import run_as_background_process
from synapse.types import UserID from synapse.types import UserID
from synapse.util import stringutils from synapse.util import stringutils
from synapse.util.logcontext import make_deferred_yieldable from synapse.util.logcontext import make_deferred_yieldable
@ -67,7 +68,14 @@ class AccountValidityHandler(object):
) )
# Check the renewal emails to send and send them every 30min. # Check the renewal emails to send and send them every 30min.
self.clock.looping_call(self.send_renewal_emails, 30 * 60 * 1000) def send_emails():
# run as a background process to make sure that the database transactions
# have a logcontext to report to
return run_as_background_process(
"send_renewals", self.send_renewal_emails
)
self.clock.looping_call(send_emails, 30 * 60 * 1000)
@defer.inlineCallbacks @defer.inlineCallbacks
def send_renewal_emails(self): def send_renewal_emails(self):

View File

@ -253,7 +253,14 @@ class EventsStore(
) )
# Read the extrems every 60 minutes # Read the extrems every 60 minutes
hs.get_clock().looping_call(self._read_forward_extremities, 60 * 60 * 1000) def read_forward_extremities():
# run as a background process to make sure that the database transactions
# have a logcontext to report to
return run_as_background_process(
"read_forward_extremities", self._read_forward_extremities
)
hs.get_clock().looping_call(read_forward_extremities, 60 * 60 * 1000)
@defer.inlineCallbacks @defer.inlineCallbacks
def _read_forward_extremities(self): def _read_forward_extremities(self):

View File

@ -25,6 +25,7 @@ from twisted.internet import defer
from synapse.api.constants import UserTypes from synapse.api.constants import UserTypes
from synapse.api.errors import Codes, StoreError, ThreepidValidationError from synapse.api.errors import Codes, StoreError, ThreepidValidationError
from synapse.metrics.background_process_metrics import run_as_background_process
from synapse.storage import background_updates from synapse.storage import background_updates
from synapse.storage._base import SQLBaseStore from synapse.storage._base import SQLBaseStore
from synapse.types import UserID from synapse.types import UserID
@ -619,9 +620,15 @@ class RegistrationStore(
) )
# Create a background job for culling expired 3PID validity tokens # Create a background job for culling expired 3PID validity tokens
hs.get_clock().looping_call( def start_cull():
self.cull_expired_threepid_validation_tokens, THIRTY_MINUTES_IN_MS # run as a background process to make sure that the database transactions
) # have a logcontext to report to
return run_as_background_process(
"cull_expired_threepid_validation_tokens",
self.cull_expired_threepid_validation_tokens,
)
hs.get_clock().looping_call(start_cull, THIRTY_MINUTES_IN_MS)
@defer.inlineCallbacks @defer.inlineCallbacks
def _backgroud_update_set_deactivated_flag(self, progress, batch_size): def _backgroud_update_set_deactivated_flag(self, progress, batch_size):

View File

@ -62,7 +62,10 @@ class Clock(object):
def looping_call(self, f, msec): def looping_call(self, f, msec):
"""Call a function repeatedly. """Call a function repeatedly.
Waits `msec` initially before calling `f` for the first time. Waits `msec` initially before calling `f` for the first time.
Note that the function will be called with no logcontext, so if it is anything
other than trivial, you probably want to wrap it in run_as_background_process.
Args: Args:
f(function): The function to call repeatedly. f(function): The function to call repeatedly.
@ -77,6 +80,9 @@ class Clock(object):
def call_later(self, delay, callback, *args, **kwargs): def call_later(self, delay, callback, *args, **kwargs):
"""Call something later """Call something later
Note that the function will be called with no logcontext, so if it is anything
other than trivial, you probably want to wrap it in run_as_background_process.
Args: Args:
delay(float): How long to wait in seconds. delay(float): How long to wait in seconds.
callback(function): Function to call callback(function): Function to call