summaryrefslogtreecommitdiff
path: root/distbuild/initiator_connection.py
diff options
context:
space:
mode:
Diffstat (limited to 'distbuild/initiator_connection.py')
-rw-r--r--distbuild/initiator_connection.py62
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)