Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed: Queued jobs are not considered in deferring logic #7907

Merged
merged 35 commits into from
Jun 5, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
bc920a8
Kill workhorse process when cancelling export job
bsekachev May 17, 2024
683420a
Minor improvements
bsekachev May 17, 2024
7d095f4
Minor improvements
bsekachev May 17, 2024
e7fc367
Fixed debug worker
bsekachev May 17, 2024
e272452
Removed extra code
bsekachev May 17, 2024
79d2c87
Production improvements
bsekachev May 19, 2024
566b908
Moved method
bsekachev May 19, 2024
0ac46f8
Fixed comment
bsekachev May 19, 2024
7ac72dd
Disabled pylint false alarm
bsekachev May 19, 2024
d1cb317
Minor fix
bsekachev May 19, 2024
29bbb44
Updated comments
bsekachev May 19, 2024
74393e6
Implemented for backup
bsekachev May 19, 2024
43bbc97
Merge branch 'develop' into bs/kill_worker
bsekachev May 20, 2024
8ed8c49
Patched rq
bsekachev May 21, 2024
3bbc2c9
Fixed pylint
bsekachev May 21, 2024
98a00b4
Updated license headers
bsekachev May 21, 2024
0536e0d
Consider queued jobs when looking for a dependends job
bsekachev May 21, 2024
fda8d89
added comment
bsekachev May 21, 2024
ed0cc01
Merge branch 'develop' into bs/kill_worker
bsekachev May 21, 2024
9a35fa9
Fixed define_dependent_job
bsekachev May 21, 2024
c082802
Improved comments
bsekachev May 21, 2024
9e7f6ae
Merge branch 'develop' into bs/kill_worker
bsekachev May 21, 2024
57616e9
Using cupress
bsekachev May 22, 2024
98fa00b
Returned status check
bsekachev May 22, 2024
c2de3e3
Fixed circular dependency issues
bsekachev May 23, 2024
d5a57cf
Update cvat/apps/engine/utils.py
bsekachev May 23, 2024
fbff394
Restored comment
bsekachev May 23, 2024
bf054ce
Update cvat/apps/engine/utils.py
bsekachev May 23, 2024
89a8b6c
Merge branch 'develop' into bs/kill_worker
bsekachev May 23, 2024
b332d9c
Merge branch 'develop' into bs/kill_worker
bsekachev May 23, 2024
6af94a7
Merge branch 'develop' into bs/kill_worker
bsekachev May 23, 2024
c7955ca
Renamed identificators
bsekachev May 27, 2024
8a86065
Updated
bsekachev Jun 5, 2024
8f43503
Added changelog
bsekachev Jun 5, 2024
959d340
Added none check
bsekachev Jun 5, 2024
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: 0 additions & 5 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,4 @@
"cSpell.words": [
"crowdsourcing"
],
"isort.args":["--profile", "black"],
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true
}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added these settings previously, but now it looks like they bring more problems than profit

}
11 changes: 8 additions & 3 deletions cvat/apps/engine/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2972,9 +2972,14 @@ def _export_annotations(
rq_request = rq_job.meta.get('request', None)
request_time = rq_request.get('timestamp', None) if rq_request else None
if request_time is None or request_time < last_instance_update_time:
# in case the server is configured with ONE_RUNNING_JOB_IN_QUEUE_PER_USER
# we have to enqueue dependent jobs after canceling one
rq_job.cancel(enqueue_dependents=settings.ONE_RUNNING_JOB_IN_QUEUE_PER_USER)
if rq_job.worker_name:
send_stop_job_command(rq_job.connection, rq_job.id)
bsekachev marked this conversation as resolved.
Show resolved Hide resolved
else:
# in case the server is configured with ONE_RUNNING_JOB_IN_QUEUE_PER_USER
# we have to enqueue dependent jobs after canceling one
rq_job.cancel(
enqueue_dependents=settings.ONE_RUNNING_JOB_IN_QUEUE_PER_USER
)
rq_job.delete()
else:
if rq_job.is_finished:
Expand Down
5 changes: 5 additions & 0 deletions cvat/apps/events/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,11 @@ def handle_dataset_import(
handle_dataset_io(instance, "import", format_name=format_name, cloud_storage=cloud_storage)

def handle_rq_exception(rq_job, exc_type, exc_value, tb):
if isinstance(exc_type, SystemExit):
# rq process was killed intentionally by SIGTERM
# we do not need to log it
return False

oid = rq_job.meta.get("org_id", None)
oslug = rq_job.meta.get("org_slug", None)
pid = rq_job.meta.get("project_id", None)
Expand Down
11 changes: 9 additions & 2 deletions cvat/rqworker.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# SPDX-License-Identifier: MIT

import os

import signal
from rq import Worker

import cvat.utils.remote_debugger as debug
Expand Down Expand Up @@ -42,12 +42,18 @@ def execute_job(self, *args, **kwargs):
# errors during debugging
# https://stackoverflow.com/questions/8242837/django-multiprocessing-and-database-connections/10684672#10684672
from django import db
db.connections.close_all()

db.connections.close_all()
return self.perform_job(*args, **kwargs)

def kill_horse(self, sig: signal.Signals = signal.SIGTERM):
# Send SIGTERM instead of default SIGKILL in debug mode as SIGKILL can't be handled
# to prevent killing rq worker process as rq code handles SIGTERM properly
super().kill_horse(sig)


if debug.is_debugging_enabled():

class RemoteDebugWorker(SimpleWorker):
"""
Support for VS code debugger
Expand All @@ -68,6 +74,7 @@ def execute_job(self, *args, **kwargs):

if os.environ.get("COVERAGE_PROCESS_START"):
import coverage

default_exit = os._exit

def coverage_exit(*args, **kwargs):
Expand Down
Loading