From 28d34549ecf3a6fe5dde672569b7e8f5e05f1a5e Mon Sep 17 00:00:00 2001 From: Marco Capitani Date: Wed, 6 Jun 2018 10:30:34 +0200 Subject: sb + our: add server_decorator functionality and our decorator --- rumba/prototypes/ouroboros.py | 91 +++++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 34 deletions(-) (limited to 'rumba/prototypes/ouroboros.py') diff --git a/rumba/prototypes/ouroboros.py b/rumba/prototypes/ouroboros.py index 51f3629..0c16482 100644 --- a/rumba/prototypes/ouroboros.py +++ b/rumba/prototypes/ouroboros.py @@ -34,18 +34,62 @@ import rumba.multiprocess as m_processing import rumba.log as log import rumba.testbeds.local as local import rumba.testbeds.dockertb as docker - +import rumba.storyboard as sb logger = log.get_logger(__name__) +class OurServer(sb.Server): + + def __init__(self, server): + super(OurServer, self).__init__( + server.ap, + server.arrival_rate, + server.actual_parameter + server.min_duration, + server.options, + server.max_clients, + server.clients, + server.nodes, + server.min_duration, + server.id, + server.as_root, + server.difs + ) + + def _make_run_cmd(self): + o_cmd = super(OurServer, self)._make_run_cmd() + + # Run and store PID + n_cmd = 'pid=$(%s); ' % (o_cmd,) + + # Add bind command + n_cmd += 'irm b process $pid name %s > /dev/null 2>&1; ' % (self.id,) + + # Build register command + r_cmd = 'irm r n %s ' % (self.id,) + if len(self.difs) == 0: + r_cmd += 'layer \'*\'' + else: + r_cmd += ' '.join('layer %s' % (layer,) for layer in self.difs) + r_cmd += ' > /dev/null 2>&1; ' + + # Add register command + n_cmd += r_cmd + n_cmd += 'echo $pid' # We need to return the pid for the sb + + return n_cmd + + class Experiment(mod.Experiment): """ Represents an Ouroboros experiment. """ - def __init__(self, testbed, nodes=None, + def __init__(self, + testbed, + nodes=None, git_repo='git://ouroboros.ilabt.imec.be/ouroboros', - git_branch='master', enrollment_strategy='minimal', + git_branch='master', + enrollment_strategy='minimal', dt_strategy='full-mesh'): """ Initializes the experiment class. @@ -57,9 +101,16 @@ class Experiment(mod.Experiment): :param enrollment_strategy: Can be 'full-mesh', 'minimal' or 'manual'. :param dt_strategy: For data flows, 'full-mesh', 'minimal' or 'manual'. """ - mod.Experiment.__init__(self, testbed, nodes, git_repo, git_branch, - enrollment_strategy=enrollment_strategy, - dt_strategy=dt_strategy) + mod.Experiment.__init__( + self, + testbed, + nodes, + git_repo, + git_branch, + enrollment_strategy=enrollment_strategy, + dt_strategy=dt_strategy, + server_decorator=OurServer + ) self.r_ipcps = dict() self.set_startup_command("irmd") @@ -248,34 +299,6 @@ class Experiment(mod.Experiment): logger.info("Killing IRMd...") subprocess.check_call('sudo killall -15 irmd'.split()) - def bind_program(self, node, program, name): - """ - Bind a program to a certain name on a certain node. - - :param node: The node - :param program: The binary name - :param name: Name to bind to - """ - node.execute_command('irm b prog %s name %s' % (program, name)) - - def register_name(self, node, name, layers): - """ - Bind a program to a certain name on a certain node. - - :param node: The node - :param name: Name to register - :param layers: Layers to register in. If it is None, - then it registers in all layers. - """ - cmd = 'irm r n %s ' % name - if layers is None: - cmd += 'layer \'*\'' - else: - for layer in layers: - cmd += 'layer %s ' % layer - - node.execute_command(cmd) - def destroy_dif(self, dif): for ipcp in dif.ipcps: ipcp.node.execute_command('irm i d n ' + ipcp.name) -- cgit v1.2.3