aboutsummaryrefslogtreecommitdiff
path: root/rumba/storyboard.py
diff options
context:
space:
mode:
Diffstat (limited to 'rumba/storyboard.py')
-rw-r--r--rumba/storyboard.py40
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):