fix: Stop running prepared reports when report is deleted
This commit is contained in:
parent
f72643781d
commit
5850176066
2 changed files with 22 additions and 6 deletions
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
|
||||
import json
|
||||
from contextlib import suppress
|
||||
from typing import Any
|
||||
|
||||
from rq import get_current_job
|
||||
|
|
@ -38,6 +39,15 @@ class PreparedReport(Document):
|
|||
def before_insert(self):
|
||||
self.status = "Queued"
|
||||
|
||||
def on_trash(self):
|
||||
# If job is running then send stop signal.
|
||||
if self.status != "Started":
|
||||
return
|
||||
|
||||
with suppress(Exception):
|
||||
job = frappe.get_doc("RQ Job", self.job_id)
|
||||
job.stop_job()
|
||||
|
||||
def after_insert(self):
|
||||
enqueue(
|
||||
generate_report,
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ from contextlib import contextmanager
|
|||
|
||||
import frappe
|
||||
from frappe.desk.query_report import generate_report_result, get_report_doc
|
||||
from frappe.query_builder.utils import db_type_is
|
||||
from frappe.tests.test_query_builder import run_only_if
|
||||
from frappe.tests.utils import FrappeTestCase, timeout
|
||||
|
||||
|
||||
|
|
@ -25,7 +27,6 @@ class TestPreparedReport(FrappeTestCase):
|
|||
report.reload()
|
||||
if report.status == status:
|
||||
break
|
||||
# Cheap blocking behaviour
|
||||
time.sleep(0.5)
|
||||
|
||||
def create_prepared_report(self, report=None, commit=True):
|
||||
|
|
@ -62,13 +63,17 @@ class TestPreparedReport(FrappeTestCase):
|
|||
self.assertEqual(len(prepared_data["result"]), len(generated_data["result"]))
|
||||
self.assertEqual(len(prepared_data), len(generated_data))
|
||||
|
||||
def test_start_status(self):
|
||||
if frappe.db.db_type == "postgres":
|
||||
return
|
||||
|
||||
with test_report(report_type="Query Report", query="select sleep(5)") as report:
|
||||
@run_only_if(db_type_is.MARIADB)
|
||||
def test_start_status_and_kill_jobs(self):
|
||||
with test_report(report_type="Query Report", query="select sleep(10)") as report:
|
||||
doc = self.create_prepared_report(report.name)
|
||||
self.wait_for_status(doc, "Started")
|
||||
job_id = doc.job_id
|
||||
|
||||
doc.delete()
|
||||
time.sleep(1)
|
||||
job = frappe.get_doc("RQ Job", job_id)
|
||||
self.assertEqual(job.status, "stopped")
|
||||
|
||||
|
||||
@contextmanager
|
||||
|
|
@ -81,6 +86,7 @@ def test_report(**args):
|
|||
if not report.ref_doctype:
|
||||
report.ref_doctype = "ToDo"
|
||||
report.insert()
|
||||
frappe.db.commit()
|
||||
yield report
|
||||
finally:
|
||||
report.delete()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue