Remove useless reports, avoid DB-Races
This commit is contained in:
+43
-39
@@ -773,41 +773,48 @@ def _copy_summary_to_job(job_id: str, summary) -> None:
|
||||
import_jobs.update(job_id, mutate)
|
||||
|
||||
|
||||
def _run_import_job(job_id: str, action: str, body: ProcessNowRequest | BacklogRequest, lease: InboxRunLease) -> None:
|
||||
def mark_running(job):
|
||||
job.status = "running"
|
||||
|
||||
import_jobs.update(job_id, mark_running)
|
||||
def _run_import_job(job_id: str, action: str, body: ProcessNowRequest | BacklogRequest) -> None:
|
||||
lease: InboxRunLease | None = None
|
||||
try:
|
||||
inbox = settings.get_inbox(body.inbox_id)
|
||||
with session_scope() as session:
|
||||
if action == "backlog":
|
||||
assert isinstance(body, BacklogRequest)
|
||||
summary = process_inbox(
|
||||
session,
|
||||
settings,
|
||||
inbox,
|
||||
folder=body.folder or inbox.folder,
|
||||
mode="backlog",
|
||||
since=body.since,
|
||||
before=body.before,
|
||||
limit=body.limit,
|
||||
dry_run=body.dry_run,
|
||||
reprocess=body.reprocess,
|
||||
mark_seen=body.mark_seen,
|
||||
progress_callback=lambda item: _copy_summary_to_job(job_id, item),
|
||||
)
|
||||
else:
|
||||
assert isinstance(body, ProcessNowRequest)
|
||||
summary = process_inbox(
|
||||
session,
|
||||
settings,
|
||||
inbox,
|
||||
mode=body.mode,
|
||||
limit=body.limit,
|
||||
progress_callback=lambda item: _copy_summary_to_job(job_id, item),
|
||||
)
|
||||
_copy_summary_to_job(job_id, summary)
|
||||
lease = inbox_run_locks.acquire(inbox.id, blocking=True)
|
||||
|
||||
def mark_running(job):
|
||||
job.status = "running"
|
||||
|
||||
import_jobs.update(job_id, mark_running)
|
||||
try:
|
||||
with session_scope() as session:
|
||||
if action == "backlog":
|
||||
assert isinstance(body, BacklogRequest)
|
||||
summary = process_inbox(
|
||||
session,
|
||||
settings,
|
||||
inbox,
|
||||
folder=body.folder or inbox.folder,
|
||||
mode="backlog",
|
||||
since=body.since,
|
||||
before=body.before,
|
||||
limit=body.limit,
|
||||
dry_run=body.dry_run,
|
||||
reprocess=body.reprocess,
|
||||
mark_seen=body.mark_seen,
|
||||
progress_callback=lambda item: _copy_summary_to_job(job_id, item),
|
||||
)
|
||||
else:
|
||||
assert isinstance(body, ProcessNowRequest)
|
||||
summary = process_inbox(
|
||||
session,
|
||||
settings,
|
||||
inbox,
|
||||
mode=body.mode,
|
||||
limit=body.limit,
|
||||
progress_callback=lambda item: _copy_summary_to_job(job_id, item),
|
||||
)
|
||||
_copy_summary_to_job(job_id, summary)
|
||||
finally:
|
||||
lease.release()
|
||||
lease = None
|
||||
|
||||
def mark_done(job):
|
||||
job.status = "succeeded"
|
||||
@@ -824,7 +831,8 @@ def _run_import_job(job_id: str, action: str, body: ProcessNowRequest | BacklogR
|
||||
|
||||
import_jobs.update(job_id, mark_failed)
|
||||
finally:
|
||||
lease.release()
|
||||
if lease:
|
||||
lease.release()
|
||||
|
||||
|
||||
def _start_import_job(action: str, body: ProcessNowRequest | BacklogRequest) -> dict:
|
||||
@@ -835,16 +843,12 @@ def _start_import_job(action: str, body: ProcessNowRequest | BacklogRequest) ->
|
||||
active = import_jobs.active_for_inbox(body.inbox_id)
|
||||
if active:
|
||||
return active.to_dict()
|
||||
lease = inbox_run_locks.acquire(body.inbox_id, blocking=False)
|
||||
if not lease:
|
||||
raise HTTPException(status_code=409, detail=f"Inbox {body.inbox_id} is already processing.")
|
||||
try:
|
||||
job = import_jobs.create(body.inbox_id, action)
|
||||
thread = threading.Thread(target=_run_import_job, args=(job.id, action, body, lease), daemon=True)
|
||||
thread = threading.Thread(target=_run_import_job, args=(job.id, action, body), daemon=True)
|
||||
thread.start()
|
||||
return job.to_dict()
|
||||
except Exception:
|
||||
lease.release()
|
||||
raise
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user