From fb5f740adeae236ba32bdac67857351054c0bae9 Mon Sep 17 00:00:00 2001 From: Richard Ipsum Date: Mon, 5 May 2014 16:02:24 +0100 Subject: Add cancelling to build controller --- distbuild/build_controller.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'distbuild') 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 -- cgit v1.2.1