Skip to content

Commit 763925d

Browse files
committed
Move code from worker pool to a method of JobGroup
1 parent 9081d57 commit 763925d

2 files changed

Lines changed: 35 additions & 27 deletions

File tree

cms/grading/Job.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444

4545
import logging
4646

47-
from cms.db import File, Manager, Executable, UserTestExecutable, Evaluation
47+
from cms.db import Dataset, Evaluation, Executable, File, Manager, Submission, \
48+
UserTest, UserTestExecutable
4849
from cms.grading.languagemanager import get_language
4950
from cms.service.esoperations import ESOperation
5051

@@ -677,3 +678,29 @@ def import_from_dict(cls, data):
677678
for job in data["jobs"]:
678679
jobs.append(Job.import_from_dict_with_type(job))
679680
return cls(jobs)
681+
682+
@staticmethod
683+
def from_operations(operations, session):
684+
jobs = []
685+
datasets = {}
686+
submissions = {}
687+
user_tests = {}
688+
for operation in operations:
689+
if operation.dataset_id not in datasets:
690+
datasets[operation.dataset_id] = Dataset.get_from_id(
691+
operation.dataset_id, session)
692+
if operation.for_submission():
693+
if operation.object_id not in submissions:
694+
submissions[operation.object_id] = \
695+
Submission.get_from_id(
696+
operation.object_id, session)
697+
object_ = submissions[operation.object_id]
698+
else:
699+
if operation.object_id not in user_tests:
700+
user_tests[operation.object_id] = \
701+
UserTest.get_from_id(operation.object_id, session)
702+
object_ = user_tests[operation.object_id]
703+
704+
jobs.append(Job.from_operation(
705+
operation, object_, datasets[operation.dataset_id]))
706+
return JobGroup(jobs)

cms/service/workerpool.py

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343

4444
from gevent.event import Event
4545

46-
from cms.db import Dataset, SessionGen, Submission, UserTest
47-
from cms.grading.Job import Job, JobGroup
46+
from cms.db import SessionGen
47+
from cms.grading.Job import JobGroup
4848
from cmscommon.datetime import make_datetime, make_timestamp
4949

5050

@@ -221,30 +221,11 @@ def acquire_worker(self, operations):
221221
self._start_time[shard] = make_datetime()
222222

223223
with SessionGen() as session:
224-
jobs = []
225-
datasets = {}
226-
submissions = {}
227-
user_tests = {}
228-
for operation in operations:
229-
if operation.dataset_id not in datasets:
230-
datasets[operation.dataset_id] = Dataset.get_from_id(
231-
operation.dataset_id, session)
232-
if operation.for_submission():
233-
if operation.object_id not in submissions:
234-
submissions[operation.object_id] = \
235-
Submission.get_from_id(
236-
operation.object_id, session)
237-
object_ = submissions[operation.object_id]
238-
else:
239-
if operation.object_id not in user_tests:
240-
user_tests[operation.object_id] = \
241-
UserTest.get_from_id(operation.object_id, session)
242-
object_ = user_tests[operation.object_id]
243-
logger.info("Asking worker %s to `%s'.", shard, operation)
244-
245-
jobs.append(Job.from_operation(
246-
operation, object_, datasets[operation.dataset_id]))
247-
job_group_dict = JobGroup(jobs).export_to_dict()
224+
job_group_dict = \
225+
JobGroup.from_operations(operations, session).export_to_dict()
226+
227+
logger.info("Asking worker %s to %s.", shard,
228+
", ".join("`%s'" % operation for operation in operations))
248229

249230
self._worker[shard].execute_job_group(
250231
job_group_dict=job_group_dict,

0 commit comments

Comments
 (0)