try/catch for operational error

- Database might not yet be ready to load models
This commit is contained in:
Oliver Walters 2022-01-07 17:11:53 +11:00
parent c04e07c1fa
commit 103dfaa2a5
2 changed files with 43 additions and 30 deletions

View File

@ -135,41 +135,49 @@ class ScheduleMixin:
Register the tasks with the database
"""
from django_q.models import Schedule
try:
from django_q.models import Schedule
for key, task in self.scheduled_tasks.items():
for key, task in self.scheduled_tasks.items():
task_name = self.get_task_name(key)
task_name = self.get_task_name(key)
# If a matching scheduled task does not exist, create it!
if not Schedule.objects.filter(name=task_name).exists():
# If a matching scheduled task does not exist, create it!
if not Schedule.objects.filter(name=task_name).exists():
logger.info(f"Adding scheduled task '{task_name}'")
logger.info(f"Adding scheduled task '{task_name}'")
Schedule.objects.create(
name=task_name,
func=task['func'],
schedule_type=task['schedule'],
minutes=task.get('minutes', None),
repeats=task.get('repeats', -1),
)
Schedule.objects.create(
name=task_name,
func=task['func'],
schedule_type=task['schedule'],
minutes=task.get('minutes', None),
repeats=task.get('repeats', -1),
)
except OperationalError:
# Database might not yet be ready
pass
def unregister_tasks(self):
"""
Deregister the tasks with the database
"""
from django_q.models import Schedule
try:
from django_q.models import Schedule
for key, task in self.scheduled_tasks.items():
for key, task in self.scheduled_tasks.items():
task_name = self.get_task_name(key)
task_name = self.get_task_name(key)
try:
scheduled_task = Schedule.objects.get(name=task_name)
scheduled_task.delete()
except Schedule.DoesNotExist:
pass
try:
scheduled_task = Schedule.objects.get(name=task_name)
scheduled_task.delete()
except Schedule.DoesNotExist:
pass
except OperationalError:
# Database might not yet be ready
pass
class UrlsMixin:

View File

@ -301,7 +301,6 @@ class PluginsRegistry:
logger.info('Activating plugin tasks')
from common.models import InvenTreeSetting
from django_q.models import Schedule
# List of tasks we have activated
task_keys = []
@ -323,17 +322,23 @@ class PluginsRegistry:
# Remove any scheduled tasks which do not match
# This stops 'old' plugin tasks from accumulating
scheduled_plugin_tasks = Schedule.objects.filter(name__istartswith="plugin.")
try:
from django_q.models import Schedule
deleted_count = 0
scheduled_plugin_tasks = Schedule.objects.filter(name__istartswith="plugin.")
for task in scheduled_plugin_tasks:
if task.name not in task_keys:
task.delete()
deleted_count += 1
deleted_count = 0
if deleted_count > 0:
logger.info(f"Removed {deleted_count} old scheduled tasks")
for task in scheduled_plugin_tasks:
if task.name not in task_keys:
task.delete()
deleted_count += 1
if deleted_count > 0:
logger.info(f"Removed {deleted_count} old scheduled tasks")
except OperationalError:
# Database might not yet be ready
pass
def deactivate_integration_schedule(self):
pass