summaryrefslogtreecommitdiff
path: root/distbuild
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2015-04-09 11:44:37 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2015-05-07 14:35:39 +0000
commit44917b2525e6947b9fdd038ab4183c9230443d42 (patch)
tree50f1c8720eea539b62dce60bd8337f044b5fd786 /distbuild
parent42b915c2961c6fc72e08073cb98f9cbf7cb9c08a (diff)
downloadmorph-44917b2525e6947b9fdd038ab4183c9230443d42.tar.gz
distbuild: Make Jobs class into a more generic JobQueue
The intention is to allow workers to use this class for job tracking, in addition to the controller. Change-Id: I355861086764476b383266bab7e850af5e05bc54
Diffstat (limited to 'distbuild')
-rw-r--r--distbuild/worker_build_scheduler.py28
1 files changed, 17 insertions, 11 deletions
diff --git a/distbuild/worker_build_scheduler.py b/distbuild/worker_build_scheduler.py
index fa9c6c98..4c5bd545 100644
--- a/distbuild/worker_build_scheduler.py
+++ b/distbuild/worker_build_scheduler.py
@@ -109,20 +109,25 @@ class Job(object):
self.failed = False
-class Jobs(object):
+class JobQueue(object):
+ '''Tracks worker build jobs that are queued, or in progress.'''
- def __init__(self, idgen):
- self._idgen = idgen
+ def __init__(self, owner):
+ self._owner = owner
self._jobs = {}
def get(self, artifact_basename):
return (self._jobs[artifact_basename]
if artifact_basename in self._jobs else None)
- def create(self, artifact, initiator_id):
- job = Job(self._idgen.next(), artifact, initiator_id)
- self._jobs[job.artifact.basename()] = job
- return job
+ def add(self, job):
+ artifact_basename = job.artifact.basename()
+ if artifact_basename in self._jobs:
+ logging.error(
+ "Duplicate job for %s added to %s job queue, ignoring.",
+ artifact_basename, self._owner)
+ else:
+ self._jobs[artifact_basename] = job
def remove(self, job):
if job.artifact.basename() in self._jobs:
@@ -215,9 +220,9 @@ class WorkerBuildQueuer(distbuild.StateMachine):
logging.debug('WBQ: Setting up %s' % self)
self._available_workers = []
- self._jobs = Jobs(
- distbuild.IdentifierGenerator('WorkerBuildQueuerJob'))
-
+ self._jobs = JobQueue(owner='controller')
+ self._idgen = distbuild.IdentifierGenerator('WorkerBuildQueuerJob')
+
spec = [
# state, source, event_class, new_state, callback
('idle', WorkerBuildQueuer, WorkerBuildRequest, 'idle',
@@ -287,7 +292,8 @@ class WorkerBuildQueuer(distbuild.StateMachine):
self.mainloop.queue_event(WorkerConnection, progress)
else:
logging.debug('WBQ: Creating job for: %s' % event.artifact.name)
- job = self._jobs.create(event.artifact, event.initiator_id)
+ job = Job(self._idgen.next(), event.artifact, event.initiator_id)
+ self._jobs.add(job)
if self._available_workers:
self._give_job(job)