cutter: Fix a failure mode where we never recover from a DB conn failure in TranscodeChecker

Since we never got a new conn after failure, we would just keep erroring with
"connection already closed" errors.

This isn't applicable to the main cutter loops since a DB failure there will restart the process.
pull/60/head
Mike Lang 6 years ago
parent fe68e98804
commit e048db0d94

@ -389,14 +389,14 @@ class TranscodeChecker(object):
NO_VIDEOS_RETRY_INTERVAL = 5 NO_VIDEOS_RETRY_INTERVAL = 5
ERROR_RETRY_INTERVAL = 5 ERROR_RETRY_INTERVAL = 5
def __init__(self, youtube, conn, stop): def __init__(self, youtube, dbmanager, stop):
""" """
youtube is an authenticated and initialized youtube api client. youtube is an authenticated and initialized youtube api client.
Conn is a database connection. Conn is a database connection.
Stop is an Event triggering graceful shutdown when set. Stop is an Event triggering graceful shutdown when set.
""" """
self.youtube = youtube self.youtube = youtube
self.conn = conn self.dbmanager = dbmanager
self.stop = stop self.stop = stop
self.logger = logging.getLogger(type(self).__name__) self.logger = logging.getLogger(type(self).__name__)
@ -405,6 +405,7 @@ class TranscodeChecker(object):
self.stop.wait(common.jitter(interval)) self.stop.wait(common.jitter(interval))
def run(self): def run(self):
self.conn = self.dbmanager.get_conn()
while not self.stop.is_set(): while not self.stop.is_set():
try: try:
ids = self.get_ids_to_check() ids = self.get_ids_to_check()
@ -421,6 +422,9 @@ class TranscodeChecker(object):
self.logger.info("Marked {} videos as done".format(done)) self.logger.info("Marked {} videos as done".format(done))
except Exception: except Exception:
self.logger.exception("Error in TranscodeChecker") self.logger.exception("Error in TranscodeChecker")
# To ensure a fresh slate and clear any DB-related errors, get a new conn on error.
# This is heavy-handed but simple and effective.
self.conn = self.dbmanager.get_conn()
self.wait(self.ERROR_RETRY_INTERVAL) self.wait(self.ERROR_RETRY_INTERVAL)
def get_ids_to_check(self): def get_ids_to_check(self):

Loading…
Cancel
Save