Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/task_processor/processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from importlib.metadata import version

from django.conf import settings
from django.db import close_old_connections
from django.utils import timezone
from opentelemetry import context as otel_context
from opentelemetry import propagate, trace
Expand Down Expand Up @@ -93,6 +94,10 @@ def run_recurring_task(database: str) -> RecurringTaskRun | None:
task, run = _run_task(task)
assert isinstance(run, RecurringTaskRun)
task_run = run
# task.run() may have idled the DB connection past the server's
# session timeout; drop stale connections so the saves below open
# a fresh one. See Sentry FLAGSMITH-API-5EM.
close_old_connections()
else:
task.unlock()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ def test_run_task__timeout__kills_task(
)


@pytest.mark.multi_database
@pytest.mark.multi_database(transaction=True)
@pytest.mark.task_processor_mode
def test_run_recurring_task__timeout__kills_task(
caplog: pytest.LogCaptureFixture,
Expand Down Expand Up @@ -214,7 +214,7 @@ def _dummy_recurring_task() -> None:
)


@pytest.mark.multi_database
@pytest.mark.multi_database(transaction=True)
@pytest.mark.task_processor_mode
def test_run_recurring_task__success__creates_recurring_task_run_object(
current_database: str,
Expand Down Expand Up @@ -246,7 +246,7 @@ def _dummy_recurring_task() -> None:
assert task_run.error_details is None


@pytest.mark.multi_database
@pytest.mark.multi_database(transaction=True)
@pytest.mark.task_processor_mode
def test_run_recurring_task__locked_task_after_timeout__runs_task(
current_database: str,
Expand Down Expand Up @@ -375,7 +375,7 @@ def _dummy_recurring_task_3() -> None:
)


@pytest.mark.multi_database
@pytest.mark.multi_database(transaction=True)
@pytest.mark.task_processor_mode
def test_run_recurring_task__called_before_interval__executes_only_once(
current_database: str,
Expand Down Expand Up @@ -564,7 +564,7 @@ def test_run_task__failed_task__runs_again(
assert task.is_locked is False


@pytest.mark.multi_database
@pytest.mark.multi_database(transaction=True)
@pytest.mark.task_processor_mode
def test_run_recurring_task__failure__creates_recurring_task_run_object(
current_database: str,
Expand Down