Merge pull request #1268 from paperless-ngx/bugfix-db-locked

Bugfix: Adds configuration for database timeout, fixing database locked error
This commit is contained in:
shamoon
2022-07-26 09:44:42 -07:00
committed by GitHub
4 changed files with 51 additions and 9 deletions

View File

@@ -11,6 +11,7 @@ from django.contrib.contenttypes.models import ContentType
from django.db import DatabaseError
from django.db import models
from django.db.models import Q
from django.db.utils import OperationalError
from django.dispatch import receiver
from django.utils import termcolors
from django.utils import timezone
@@ -506,21 +507,28 @@ def add_to_index(sender, document, **kwargs):
@receiver(django_q.signals.pre_enqueue)
def init_paperless_task(sender, task, **kwargs):
if task["func"] == "documents.tasks.consume_file":
paperless_task, created = PaperlessTask.objects.get_or_create(
task_id=task["id"],
)
paperless_task.name = task["name"]
paperless_task.created = task["started"]
paperless_task.save()
try:
paperless_task, created = PaperlessTask.objects.get_or_create(
task_id=task["id"],
)
paperless_task.name = task["name"]
paperless_task.created = task["started"]
paperless_task.save()
except OperationalError as e:
logger.error(f"Creating PaperlessTask failed: {e}")
@receiver(django_q.signals.pre_execute)
def paperless_task_started(sender, task, **kwargs):
try:
if task["func"] == "documents.tasks.consume_file":
paperless_task = PaperlessTask.objects.get(task_id=task["id"])
paperless_task, created = PaperlessTask.objects.get_or_create(
task_id=task["id"],
)
paperless_task.started = timezone.now()
paperless_task.save()
except OperationalError as e:
logger.error(f"Creating PaperlessTask failed: {e}")
except PaperlessTask.DoesNotExist:
pass
@@ -529,8 +537,12 @@ def paperless_task_started(sender, task, **kwargs):
def update_paperless_task(sender, instance, **kwargs):
try:
if instance.func == "documents.tasks.consume_file":
paperless_task = PaperlessTask.objects.get(task_id=instance.id)
paperless_task, created = PaperlessTask.objects.get_or_create(
task_id=instance.id,
)
paperless_task.attempted_task = instance
paperless_task.save()
except OperationalError as e:
logger.error(f"Creating PaperlessTask failed: {e}")
except PaperlessTask.DoesNotExist:
pass

View File

@@ -338,6 +338,13 @@ if os.getenv("PAPERLESS_DBHOST"):
if os.getenv("PAPERLESS_DBPORT"):
DATABASES["default"]["PORT"] = os.getenv("PAPERLESS_DBPORT")
if os.getenv("PAPERLESS_DB_TIMEOUT") is not None:
_new_opts = {"timeout": float(os.getenv("PAPERLESS_DB_TIMEOUT"))}
if "OPTIONS" in DATABASES["default"]:
DATABASES["default"]["OPTIONS"].update(_new_opts)
else:
DATABASES["default"]["OPTIONS"] = _new_opts
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
###############################################################################