diff options
Diffstat (limited to 'distbuild/initiator_connection.py')
-rw-r--r-- | distbuild/initiator_connection.py | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/distbuild/initiator_connection.py b/distbuild/initiator_connection.py index 48d083e4..34f2bdaa 100644 --- a/distbuild/initiator_connection.py +++ b/distbuild/initiator_connection.py @@ -35,9 +35,12 @@ class _Close(object): class InitiatorConnection(distbuild.StateMachine): - '''Communicate with the initiator. - - This state machine communicates with the initiator, relaying and + '''Communicate with a single initiator. + + When a developer runs 'morph distbuild' and connects to the controller, + the ListenServer object on the controller creates an InitiatorConnection. + + This state machine communicates with the build initiator, relaying and translating messages from the initiator to the rest of the controller's state machines, and vice versa. @@ -51,6 +54,11 @@ class InitiatorConnection(distbuild.StateMachine): self.conn = conn self.artifact_cache_server = artifact_cache_server self.morph_instance = morph_instance + self.initiator_name = conn.remotename() + + def __repr__(self): + return '<InitiatorConnection at 0x%x: remote %s>' % (id(self), + self.initiator_name) def setup(self): self.jm = distbuild.JsonMachine(self.conn) @@ -59,6 +67,7 @@ class InitiatorConnection(distbuild.StateMachine): self.our_ids = set() spec = [ + # state, source, event_class, new_state, callback ('idle', self.jm, distbuild.JsonNewMessage, 'idle', self._handle_msg), ('idle', self.jm, distbuild.JsonEof, 'closing', self._disconnect), @@ -84,31 +93,32 @@ class InitiatorConnection(distbuild.StateMachine): def _handle_msg(self, event_source, event): '''Handle message from initiator.''' - - logging.debug( - 'InitiatorConnection: from initiator: %s', repr(event.msg)) - + + logging.debug('InitiatorConnection: from %s: %r', self.initiator_name, + event.msg) + if event.msg['type'] == 'build-request': new_id = self._idgen.next() self.our_ids.add(new_id) 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): for id in self.our_ids: - logging.debug('InitiatorConnection: InitiatorDisconnect(%s)' - % str(id)) + logging.debug('InitiatorConnection: %s: InitiatorDisconnect(%s)', + self.initiator_name, str(id)) self.mainloop.queue_event(InitiatorConnection, InitiatorDisconnect(id)) # TODO should this clear our_ids? self.mainloop.queue_event(self, _Close(event_source)) def _close(self, event_source, event): - logging.debug('InitiatorConnection: closing: %s', - repr(event.event_source)) + logging.debug('InitiatorConnection: %s: closing: %s', + self.initiator_name, repr(event.event_source)) event.event_source.close() @@ -120,6 +130,10 @@ class InitiatorConnection(distbuild.StateMachine): 'InitiatorConnection: received result: %s', repr(event.msg)) self.jm.send(event.msg) + def _log_send(self, msg): + logging.debug( + 'InitiatorConnection: sent to %s: %r', self.initiator_name, msg) + def _send_build_finished_message(self, event_source, event): if event.id in self.our_ids: msg = distbuild.message('build-finished', @@ -128,8 +142,7 @@ class InitiatorConnection(distbuild.StateMachine): self._route_map.remove(event.id) self.our_ids.remove(event.id) self.jm.send(msg) - logging.debug( - 'InitiatorConnection: sent to initiator: %s', repr(msg)) + self._log_send(msg) def _send_build_failed_message(self, event_source, event): if event.id in self.our_ids: @@ -139,8 +152,7 @@ class InitiatorConnection(distbuild.StateMachine): self._route_map.remove(event.id) self.our_ids.remove(event.id) self.jm.send(msg) - logging.debug( - 'InitiatorConnection: sent to initiator: %s', repr(msg)) + self._log_send(msg) def _send_build_progress_message(self, event_source, event): if event.id in self.our_ids: @@ -148,8 +160,7 @@ class InitiatorConnection(distbuild.StateMachine): id=self._route_map.get_incoming_id(event.id), message=event.message_text) self.jm.send(msg) - logging.debug( - 'InitiatorConnection: sent to initiator: %s', repr(msg)) + self._log_send(msg) def _send_build_steps_message(self, event_source, event): @@ -169,8 +180,7 @@ class InitiatorConnection(distbuild.StateMachine): id=self._route_map.get_incoming_id(event.id), steps=step_names) self.jm.send(msg) - logging.debug( - 'InitiatorConnection: sent to initiator: %s', repr(msg)) + self._log_send(msg) def _send_build_step_started_message(self, event_source, event): if event.id in self.our_ids: @@ -179,8 +189,7 @@ class InitiatorConnection(distbuild.StateMachine): step_name=event.step_name, worker_name=event.worker_name) self.jm.send(msg) - logging.debug( - 'InitiatorConnection: sent to initiator: %s', repr(msg)) + self._log_send(msg) def _send_build_output_message(self, event_source, event): logging.debug('InitiatorConnection: build_output: ' @@ -193,8 +202,7 @@ class InitiatorConnection(distbuild.StateMachine): stdout=event.stdout, stderr=event.stderr) self.jm.send(msg) - logging.debug( - 'InitiatorConnection: sent to initiator: %s', repr(msg)) + self._log_send(msg) def _send_build_step_finished_message(self, event_source, event): if event.id in self.our_ids: @@ -202,8 +210,7 @@ class InitiatorConnection(distbuild.StateMachine): id=self._route_map.get_incoming_id(event.id), step_name=event.step_name) self.jm.send(msg) - logging.debug( - 'InitiatorConnection: sent to initiator: %s', repr(msg)) + self._log_send(msg) def _send_build_step_failed_message(self, event_source, event): if event.id in self.our_ids: @@ -211,6 +218,5 @@ class InitiatorConnection(distbuild.StateMachine): id=self._route_map.get_incoming_id(event.id), step_name=event.step_name) self.jm.send(msg) - logging.debug( - 'InitiatorConnection: sent to initiator: %s', repr(msg)) + self._log_send(msg) |