diff options
author | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2014-05-07 14:16:21 +0000 |
---|---|---|
committer | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2014-05-07 14:16:21 +0000 |
commit | 9ea146fdcfbe9b93b297165b1b5222e1eadb9d23 (patch) | |
tree | ca17eabee3e7fe929d397df158778caf358b5661 /distbuild/build_controller.py | |
parent | 201b043e4d7ab03d11ad1e71bac7916b19aed294 (diff) | |
parent | c8cdcbb70740f3c71da83587c1368b7c4b03b330 (diff) | |
download | morph-9ea146fdcfbe9b93b297165b1b5222e1eadb9d23.tar.gz |
Merge branch 'baserock/richardipsum/distbuild_cancel2'
Reviewed by:
Richard Maw
Lars Wirzenius
Daniel Silverstone
Diffstat (limited to 'distbuild/build_controller.py')
-rw-r--r-- | distbuild/build_controller.py | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/distbuild/build_controller.py b/distbuild/build_controller.py index a3911586..c399939e 100644 --- a/distbuild/build_controller.py +++ b/distbuild/build_controller.py @@ -235,9 +235,9 @@ class BuildController(distbuild.StateMachine): self._maybe_notify_build_failed), ('building', self, _Abort, None, None), ('building', self, _Built, None, self._notify_build_done), - ('building', self._initiator_connection, - distbuild.InitiatorDisconnect, None, - self._notify_initiator_disconnected), + ('building', distbuild.InitiatorConnection, + distbuild.InitiatorDisconnect, 'building', + self._maybe_notify_initiator_disconnected), ] self.add_transitions(spec) @@ -438,12 +438,24 @@ class BuildController(distbuild.StateMachine): a.state = BUILDING - def _notify_initiator_disconnected(self, event_source, disconnect): - logging.debug("BuildController %r: initiator id %s disconnected", self, - disconnect.id) - cancel = BuildCancel(disconnect.id) + def _maybe_notify_initiator_disconnected(self, event_source, event): + if event.id != self._request['id']: + logging.debug('Heard initiator disconnect with event id %d ' + 'but our request id is %d', + event.id, self._request['id']) + return # not for us + + logging.debug("BuildController %r: initiator id %s disconnected", + self, event.id) + + cancel_pending = distbuild.WorkerCancelPending(event.id) + self.mainloop.queue_event(distbuild.WorkerBuildQueuer, cancel_pending) + + cancel = BuildCancel(event.id) self.mainloop.queue_event(BuildController, cancel) + self.mainloop.queue_event(self, _Abort) + def _maybe_relay_build_waiting_for_worker(self, event_source, event): if event.initiator_id != self._request['id']: return # not for us |