summaryrefslogtreecommitdiff
path: root/distbuild/worker_build_scheduler.py
diff options
context:
space:
mode:
Diffstat (limited to 'distbuild/worker_build_scheduler.py')
-rw-r--r--distbuild/worker_build_scheduler.py57
1 files changed, 23 insertions, 34 deletions
diff --git a/distbuild/worker_build_scheduler.py b/distbuild/worker_build_scheduler.py
index 843b9eb9..bc2df4b1 100644
--- a/distbuild/worker_build_scheduler.py
+++ b/distbuild/worker_build_scheduler.py
@@ -100,8 +100,7 @@ class _Disconnected(object):
class Job(object):
- def __init__(self, job_id, artifact, initiator_id):
- self.id = job_id
+ def __init__(self, artifact, initiator_id):
self.artifact = artifact
self.initiators = [initiator_id]
self.who = None # we don't know who's going to do this yet
@@ -122,8 +121,8 @@ class Job(object):
def set_state(self, state):
assert state in ['queued', 'running', 'complete', 'failed']
- logging.debug('Setting job state for job %s with id %s to %s',
- self.artifact.basename(), self.id, state)
+ logging.debug('Setting job state for job %s to %s',
+ self.artifact.basename(), state)
self._state = state
@@ -236,7 +235,6 @@ class WorkerBuildQueuer(distbuild.StateMachine):
logging.debug('WBQ: Setting up %s' % self)
self._available_workers = []
self._jobs = JobQueue(owner='controller')
- self._idgen = distbuild.IdentifierGenerator('WorkerBuildQueuerJob')
spec = [
# state, source, event_class, new_state, callback
@@ -301,7 +299,7 @@ class WorkerBuildQueuer(distbuild.StateMachine):
self.mainloop.queue_event(WorkerConnection, progress)
else:
logging.debug('WBQ: Creating job for: %s' % event.artifact.name)
- job = Job(self._idgen.next(), event.artifact, event.initiator_id)
+ job = Job(event.artifact, event.initiator_id)
self._jobs.add(job)
if self._available_workers:
@@ -318,27 +316,22 @@ class WorkerBuildQueuer(distbuild.StateMachine):
return False # not for us
name = job.artifact.basename()
- job_id = job.id
- logging.debug('Checking whether to remove job %s with job id %s',
- name, job_id)
+ logging.debug('Checking whether to remove job %s', name)
if len(job.initiators) == 1:
if job.running() or job.failed():
- logging.debug('NOT removing running job %s with job id %s '
- '(WorkerConnection will cancel job)',
- name, job_id)
+ logging.debug('NOT removing running job %s '
+ '(WorkerConnection will cancel job)', name)
else:
- logging.debug('Removing job %s with job id %s',
- name, job_id)
+ logging.debug('Removing job %s with job id %s', name)
return True
else:
# Don't cancel, but still remove this initiator from
# the list of initiators
- logging.debug('NOT removing job %s with job id %s '
- 'other initiators want it: %s', name, job_id,
- [i for i in job.initiators
- if i != event.initiator_id])
+ logging.debug('NOT removing job %s, other initiators want it: '
+ '%s', name, [i for i in job.initiators if i !=
+ event.initiator_id])
job.initiators.remove(event.initiator_id)
@@ -358,8 +351,7 @@ class WorkerBuildQueuer(distbuild.StateMachine):
logging.debug('%s wants new job, just did %s',
who.name(), last_job.artifact.basename())
- logging.debug('Removing job %s with job id %s',
- last_job.artifact.basename(), last_job.id)
+ logging.debug('Removing job %s', last_job.artifact.basename())
self._jobs.remove(last_job)
else:
logging.debug('%s wants its first job', who.name())
@@ -480,19 +472,15 @@ class WorkerConnection(distbuild.StateMachine):
job = self._current_job
if (len(job.initiators) == 1):
- logging.debug('WC: Cancelling running job %s '
- 'with job id %s running on %s',
- job.artifact.basename(), job.id,
- self.name())
+ logging.debug('WC: Cancelling running job %s running on %s',
+ job.artifact.basename(), self.name())
- msg = distbuild.message('exec-cancel', id=job.id)
+ msg = distbuild.message('exec-cancel', id=job.artifact.basename())
self._jm.send(msg)
self.mainloop.queue_event(self, _BuildCancelled())
else:
- logging.debug('WC: Not cancelling running job %s with job id %s, '
- 'other initiators want it done: %s',
- job.artifact.basename(),
- job.id,
+ logging.debug('WC: Not cancelling running job %s, other initiators '
+ 'want it done: %s', job.artifact.basename(),
[i for i in job.initiators if i != build_cancel.id])
job.initiators.remove(build_cancel.id)
@@ -510,13 +498,14 @@ class WorkerConnection(distbuild.StateMachine):
job = event.job
- if job.id in self._active_jobs:
- logging.warn('Duplicate job %s for worker %s', job.id, self.name())
+ if job.artifact.basename() in self._active_jobs:
+ logging.warn('Worker %s already has job %s', self.name(),
+ job.artifact.basename())
if self._current_job_exec_response or self._current_job_cache_request:
logging.warn('Caching not finished for %s', self._current_job.id)
- self._active_jobs[job.id] = job
+ self._active_jobs[job.artifact.basename()] = job
self._current_job = job
logging.debug('WC: starting build: %s for %s' %
@@ -530,7 +519,7 @@ class WorkerConnection(distbuild.StateMachine):
]
msg = distbuild.message('exec-request',
- id=job.id,
+ id=job.artifact.basename(),
argv=argv,
stdin_contents=distbuild.serialise_artifact(job.artifact,
job.artifact.repo,
@@ -599,7 +588,7 @@ class WorkerConnection(distbuild.StateMachine):
# The job is no longer considered active, because the worker is
# finished with it so we won't receive any more messages about it.
- del self._active_jobs[job.id]
+ del self._active_jobs[job.artifact.basename()]
def _request_job(self, event_source, event):
distbuild.crash_point()