diff options
Diffstat (limited to 'rumba/storyboard.py')
-rw-r--r-- | rumba/storyboard.py | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/rumba/storyboard.py b/rumba/storyboard.py index 2f1c6de..ecd639d 100644 --- a/rumba/storyboard.py +++ b/rumba/storyboard.py @@ -41,7 +41,6 @@ import uuid import rumba.model as model import rumba.ssh_support as ssh_support import rumba.log as log -import rumba.prototypes.ouroboros as our try: from io import StringIO @@ -326,7 +325,7 @@ class Server(_SBEntity): def __init__(self, ap, arrival_rate, mean_duration, options=None, max_clients=float('inf'), clients=None, nodes=None, min_duration=2, - s_id=None, as_root=False): + s_id=None, as_root=False, difs=None): """ :param ap: the application binary or command which should be run @@ -356,6 +355,10 @@ class Server(_SBEntity): :param as_root: if true, the server app will be started with root permissions :type as_root: `bool` + :param difs: the difs this server intends to register to + (note: the effect of this parameter is prototype + dependent, and other strategies might be required) + :type difs: `rumba.model.DIF` or `list` thereof """ self.ap = ap e_id = s_id if s_id is not None else self.ap.replace(' ', '_') @@ -374,6 +377,13 @@ class Server(_SBEntity): self.pids = {} self.min_duration = min_duration self.as_root = as_root + if difs is None: + difs = [] + elif hasattr(difs, '__iter__'): + difs = list(difs) + else: + difs = [difs] + self.difs = difs def add_client(self, client): """ @@ -476,17 +486,18 @@ class Server(_SBEntity): proc_id=p ) + def _make_run_cmd(self): + run_cmd = self.ap + ( + (" " + self.options) if self.options is not None else "" + ) + return "./startup.sh %s %s" % ('server_' + self.id, run_cmd) + def run(self): """Starts this server""" for node in self.nodes: - if isinstance(self.experiment, our.Experiment): - self.experiment.bind_program(node, self.ap, self.id) - self.experiment.register_name(node, self.id, None) - run_cmd = self.ap + ( - (" " + self.options) if self.options is not None else "" - ) - cmd = "./startup.sh %s %s" % ('server_' + self.id, run_cmd) + cmd = self._make_run_cmd() + logger.debug( 'Starting server %s on node %s.', self.id, node.name @@ -580,6 +591,10 @@ class StoryBoard(_SBEntity): self.shims[dif.name] = dif def _validate_and_add_server(self, s, n=None): + if self.experiment is None: + raise ValueError("Cannot add a server before " + "setting the experiment.") + s = self.experiment.server_decorator(s) if len(s.clients) == 0: logger.warning("'%s' server has no registered clients.", s.ap) else: @@ -596,7 +611,6 @@ class StoryBoard(_SBEntity): 'not in experiment.' % (node.name,)) self.server_apps[s.id] = s self._build_nodes_lists() - s.experiment = self.experiment def set_experiment(self, experiment): """ @@ -618,9 +632,6 @@ class StoryBoard(_SBEntity): :param server: the server application :type server: `.Server` """ - if self.experiment is None: - raise ValueError("Cannot add a server before " - "setting the experiment.") if not isinstance(server, Server): raise TypeError('Argument must be of type Server') self._validate_and_add_server(server) @@ -635,9 +646,6 @@ class StoryBoard(_SBEntity): :param node: the node upon which the server should run :type node: `rumba.model.Node` """ - if self.experiment is None: - raise ValueError("Cannot add a server before " - "setting the experiment.") if not isinstance(server, Server): raise TypeError('First argument must be of type Server') if not isinstance(node, model.Node): |