summaryrefslogtreecommitdiff
path: root/distbuild
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2014-04-10 08:04:13 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2014-04-14 11:19:06 +0300
commit426c9ea359689103de8c0ff6a7dccc6922d78cf8 (patch)
tree4179b3de3790b273a28626a79291dd7ee8eb0fac /distbuild
parent0c3323ba9bb76907288b1b8ff58d50baf8e153b1 (diff)
downloadmorph-426c9ea359689103de8c0ff6a7dccc6922d78cf8.tar.gz
distbuild: Make some transitions more specific
There is always one BuildController object per InitiatorConnection. By coupling the objects slightly closer we can simplify some transitions in BuildController.
Diffstat (limited to 'distbuild')
-rw-r--r--distbuild/build_controller.py39
-rw-r--r--distbuild/initiator_connection.py2
2 files changed, 18 insertions, 23 deletions
diff --git a/distbuild/build_controller.py b/distbuild/build_controller.py
index 4515ffc6..d750286d 100644
--- a/distbuild/build_controller.py
+++ b/distbuild/build_controller.py
@@ -150,10 +150,11 @@ class BuildController(distbuild.StateMachine):
_idgen = distbuild.IdentifierGenerator('BuildController')
- def __init__(self, build_request_message, artifact_cache_server,
- morph_instance):
+ def __init__(self, initiator_connection, build_request_message,
+ artifact_cache_server, morph_instance):
distbuild.crash_point()
distbuild.StateMachine.__init__(self, 'init')
+ self._initiator_connection = initiator_connection
self._request = build_request_message
self._artifact_cache_server = artifact_cache_server
self._morph_instance = morph_instance
@@ -170,10 +171,9 @@ class BuildController(distbuild.StateMachine):
spec = [
# state, source, event_class, new_state, callback
('init', self, _Start, 'graphing', self._start_graphing),
- ('init', distbuild.InitiatorConnection,
- distbuild.InitiatorDisconnect, 'init', self._maybe_abort),
- ('init', self, _Abort, None, None),
-
+ ('init', self._initiator_connection,
+ distbuild.InitiatorDisconnect, None, None),
+
('graphing', distbuild.HelperRouter, distbuild.HelperOutput,
'graphing', self._collect_graph),
('graphing', distbuild.HelperRouter, distbuild.HelperResult,
@@ -181,17 +181,15 @@ class BuildController(distbuild.StateMachine):
('graphing', self, _GotGraph,
'annotating', self._start_annotating),
('graphing', self, _GraphFailed, None, None),
- ('graphing', distbuild.InitiatorConnection,
- distbuild.InitiatorDisconnect, 'graphing',
- self._maybe_abort),
-
+ ('graphing', self._initiator_connection,
+ distbuild.InitiatorDisconnect, None, None),
+
('annotating', distbuild.HelperRouter, distbuild.HelperResult,
'annotating', self._handle_cache_response),
('annotating', self, _Annotated, 'building',
self._queue_worker_builds),
- ('annotating', distbuild.InitiatorConnection,
- distbuild.InitiatorDisconnect, 'annotating',
- self._maybe_abort),
+ ('annotating', self._initiator_connection,
+ distbuild.InitiatorDisconnect, None, None),
# The exact WorkerConnection that is doing our building changes
# from build to build. We must listen to all messages from all
@@ -217,18 +215,14 @@ class BuildController(distbuild.StateMachine):
self._maybe_notify_build_failed),
('building', self, _Abort, None, None),
('building', self, _Built, None, self._notify_build_done),
- ('building', distbuild.InitiatorConnection,
- distbuild.InitiatorDisconnect, 'building',
+ ('building', self._initiator_connection,
+ distbuild.InitiatorDisconnect, None,
self._notify_initiator_disconnected),
]
self.add_transitions(spec)
self.mainloop.queue_event(self, _Start())
- def _maybe_abort(self, event_source, event):
- if event.id == self._request['id']:
- self.mainloop.queue_event(self, _Abort())
-
def _start_graphing(self, event_source, event):
distbuild.crash_point()
@@ -427,9 +421,10 @@ class BuildController(distbuild.StateMachine):
def _notify_initiator_disconnected(self, event_source, disconnect):
- if disconnect.id == self._request['id']:
- cancel = BuildCancel(disconnect.id)
- self.mainloop.queue_event(BuildController, cancel)
+ logging.debug("BuildController %r: initiator id %s disconnected", self,
+ disconnect.id)
+ cancel = BuildCancel(disconnect.id)
+ self.mainloop.queue_event(BuildController, cancel)
def _relay_build_step_started(self, event_source, event):
distbuild.crash_point()
diff --git a/distbuild/initiator_connection.py b/distbuild/initiator_connection.py
index 31f89479..e20e6d98 100644
--- a/distbuild/initiator_connection.py
+++ b/distbuild/initiator_connection.py
@@ -103,7 +103,7 @@ class InitiatorConnection(distbuild.StateMachine):
self._route_map.add(event.msg['id'], new_id)
event.msg['id'] = new_id
build_controller = distbuild.BuildController(
- event.msg, self.artifact_cache_server, self.morph_instance)
+ self, event.msg, self.artifact_cache_server, self.morph_instance)
self.mainloop.add_state_machine(build_controller)
def _disconnect(self, event_source, event):