From 4fea45903bd5ae406ea9965bdec3ada7119d0ea1 Mon Sep 17 00:00:00 2001 From: Alina Quereilhac Date: Sun, 24 Nov 2013 22:29:33 +0100 Subject: [PATCH] Fixing tickets: http://nepi.pl.sophia.inria.fr/trac/ticket/66 (TAP device fails to run twice without cleaning exp home) and http://nepi.pl.sophia.inria.fr/trac/ticket/46 (User manual: ExperimentController API) --- doc/user_manual/ec_api.tex | 235 +++++++++++- doc/user_manual/ec_internals.tex | 3 +- doc/user_manual/faq.tex | 9 +- doc/user_manual/user_manual.pdf | Bin 427216 -> 438081 bytes src/nepi/execution/ec.py | 474 ++++++++++++++---------- src/nepi/execution/resource.py | 8 + src/nepi/resources/linux/application.py | 4 +- src/nepi/resources/linux/node.py | 18 +- src/nepi/resources/planetlab/tap.py | 59 +-- 9 files changed, 538 insertions(+), 272 deletions(-) diff --git a/doc/user_manual/ec_api.tex b/doc/user_manual/ec_api.tex index e7a3c027..5de660f5 100644 --- a/doc/user_manual/ec_api.tex +++ b/doc/user_manual/ec_api.tex @@ -32,6 +32,7 @@ Likewise, in order to deploy and control resources, and collect data, the EC exposes another set of methods, which form the execution API. These two APIs are described in detail in the rest of this chapter. + \section{The experiment script} NEPI is a Python-based language and all classes and functions can @@ -45,8 +46,8 @@ from nepi.execution.ec import ExperimentController \end{lstlisting} -Once this is done, an ExperimentController instance must be instantiated -for a particular experiment. The ExperimentController constructor receives +Once this is done, an ExperimentController must be instantiated for +the experiment. The ExperimentController constructor receives the optional argument \emph{exp\_id}. This argument is important because it defines the experiment identity and allows to distinguish among different experiments. If an experiment id is not explicitly given, NEPI will automatically @@ -66,7 +67,20 @@ exp_id = ec.exp_id \end{lstlisting} -%TODO: What is the run_id ?? +Since a same experiment can be ran more than one time, and this is +often desirable to obtain statistical data, the EC identifies +different runs of an experiment with a same \emph{exp\_id} with +another attribute, the \emph{run\_id}. The \emph{run\_id} is +a timestamp string value, and in combination with the \emph{exp\_id}, +it allows to uniquely identify an experiment instance. + +\begin{lstlisting}[language=Python] + +run_id = ec.run_id + +\end{lstlisting} + + \section{The design API} @@ -74,6 +88,7 @@ Once an ExperimentController has been instantiated, it is possible to start describing the experiment. The design API is the set of methods which allow to do so. + \subsection{Registering resources} Every resource supported by NEPI is controlled by a specific ResourceManager @@ -118,6 +133,7 @@ is the value returned by the \emph{register\_resource} method. The EC keeps internal references to all RMs, which the user can reference using the corresponding guid value. + \subsection{Attributes} ResourceManagers expose the configurable parameters of resources @@ -151,7 +167,6 @@ new_value = ec.get(guid, "attr_name") \end{lstlisting} -% Critical attribute Since each RM type exposes the characteristics of a particular type of resource, it is to be expected that different RMs will have different attributes. However, there a particular attribute that is common to all RMs. @@ -163,6 +178,7 @@ When this attribute is set to \emph{False} the EC will ignore failures on that resource and carry on with the experiment. Otherwise, the EC will immediately interrupt the experiment. + \subsection{Traces} A Trace represent a stream of data collected during the experiment and associated @@ -195,6 +211,7 @@ print ec.trace_enabled(guid, "trace-name") \end{lstlisting} + \subsection{Registering connections} In order to describe the experiment set-up, resources need to be @@ -218,6 +235,7 @@ The order in which the guids are given is not important, since the RMs \emph{`know'} internally how to interpret the connection relationship. + \subsection{Registering conditions} All ResourceMangers must go through the same sequence of state transitions. @@ -260,25 +278,222 @@ Allowed actions are: DEPLOY, START and STOP. \\ Existing states are: NEW, DISCOVERED, PROVISIONED, READY, STARTED, STOPPED, FAILED and RELEASED. \\ + + \section{The execution API} +After registering all the resources and connections and setting attributes and +traces, once the experiment we want to conduct has been described, we can +proceed to run it. To this purpose we make use of the \emph{execution} methods +exposed by the EC. + + \subsection{Deploying an experiment} -%TODO: Talk about groups -%TODO: Talk about interactive deploymet +Deploying an experiment is very easy, it only requires to invoke the +\emph{deploy} method of the EC. + +\begin{lstlisting}[language=Python] + +ec.deploy() + +\end{lstlisting} + +Given the experiment description provided earlier, the EC will take care +of automatically performing all necessary actions to discover, provision, +configure and start all resources registered in the experiment. + +Furthermore, NEPI does not restrict deployment to only one time, it allows +to continue to register, connect and configure resources and deploy them +at any moment. We call this feature \emph{interactive} or \emph{dynamic} +deployment. + +The \emph{deploy} method can receive other optional arguments to customize +deployment. By default, the EC will deploy all registered RMs that are in +state NEW. However, it is possible to specify a subset of resources to be +deployed using the \emph{guids} argument. + +\begin{lstlisting}[language=Python] + +ec.deploy(guids=[guid1, guid2, guid3]) + +\end{lstlisting} + +Another useful argument of the \emph{deploy} method is \emph{wait\_all\_ready}. +This argument has a default value of \emph{True}, and it is used as a barrier +to force the START action to be invoked on all RMs being deploy only after +they have all reached the state READY. + +\begin{lstlisting}[language=Python] + +ec.deploy(wait_all_ready=False) + +\end{lstlisting} + \subsection{Getting attributes} +Attribute values can be retrieved at any moment during the experiment run, +using the \emph{get} method. +However, not all attributes can de modified after a resource has +been deployed. The possibility of changing the value of a certain attribute +depends strongly on the RM and on the attribute itself. +As an example, once a \emph{hostname} has been specified for a certain Node +RM, it might not be possible to change it after deployment. + +\begin{lstlisting}[language=Python] + +attr_value = ec.get(guid, "attr-name") + +\end{lstlisting} + +Attributes have flags that indicate whether their values can be changed +and when it is possible to change them (e.g. before or after deployment, +or both). These flags are \emph{NoFlags} (the attribute value can be +modified always), \emph{ReadOnly} (the attribute value can never be +modified), \emph{ExecReadOnly} (the attribute value can only be modified +before deployment). The flags of a certain attribute can be validated +as shown in the example below, and the value of the attribute can be +changed using the \emph{set} method. + +\begin{lstlisting}[language=Python] + +from nepi.execution.attribute import Flags + +attr = ec.get_attribute(guid, "attr-name") + +if not attr.has_flag(Flags.ReadOnly): + ec.set(guid, "attr-name", attr_value) + +\end{lstlisting} + \subsection{Quering the state} +It is possible to query the state of any resource at any moment. +The state of a resource is requested using the \emph{state} method. +This method receives the optional parameter \emph{hr} to output the +state in a \emph{human readable} string format instead of an integer +state code. + +\begin{lstlisting}[language=Python] + +state_id = ec.state(guid) + +# Human readable state +state = ec.state(guid, hr = True) + +\end{lstlisting} + \subsection{Getting traces} - -% TODO: Give examples of Traces (how to collect traces to the local repo, talk about the Collector RM) -% how to retrieve an application trace when the Node failed? (critical attribute) +After a ResourceManager has been deployed it is possible to get information +about the active traces and the trace streams of the generated data using +the \emph{trace} method. + +Most traces are collected to a file in the host where they are generated, +the total trace size and the file path in the (remote) host can be +retrieved as follows. + +\begin{lstlisting}[language=Python] + +from nepi.execution.trace import TraceAttr + +path = ec.trace(guid, "trace-name", TraceAttr.PATH) +size = ec.trace(guid, "trace-name", TraceAttr.SIZE) + +\end{lstlisting} + +The trace content can be retrieved in a stream, block by block. + +\begin{lstlisting}[language=Python] + +trace_block = ec.trace(guid, "trace-name", TraceAttr.STREAM, block=1, offset=0) + +\end{lstlisting} + +It is also possible to directly retrieve the complete trace content. + +\begin{lstlisting}[language=Python] + +trace_stream = ec.trace(guid, "trace-name") + +\end{lstlisting} + +Using the \emph{trace} method it is easy to collect all traces +to the local user machine. + +\begin{lstlisting}[language=Python] + +for trace in ec.get_traces(guid): + trace_stream = ec.trace(guid, "trace-name") + f = open("trace-name", "w") + f.write(trace_stream) + f.close() -\subsection{The collector RM} +\end{lstlisting} + + +% TODO: how to retrieve an application trace when the Node failed? (critical attribute) + + +% \subsection{The collector RM} + +%%%%%%%%%% +%% TODO +%%%%%%%%%%% + +\subsection{API reference} + +Further information about classes and method signatures +can be found using the Python \emph{help} method. +For this inspection work, we recommend instantiating an +ExperimentController from an IPython console. This is an +interactive console that allows to dynamically send input +to the python interpreter. + +If NEPI is not installed in the system, you will need to add the +NEPI sources path to the PYTHONPATH environmental variable +before invoking \emph{ipython}. + +\begin{lstlisting}[language=Python] + +$ PYTHONPATH=$PYTHONPATH:src ipython +Python 2.7.3 (default, Jan 2 2013, 13:56:14) +Type "copyright", "credits" or "license" for more information. + + +IPython 0.13.1 -- An enhanced Interactive Python. +? -> Introduction and overview of IPython's features. +%quickref -> Quick reference. +help -> Python's own help system. +object? -> Details about 'object', use 'object??' for extra details. +In [1]: from nepi.execution.ec import ExperimentController +In [2]: ec = ExperimentController(exp_id = "test-tap") + +In [3]: help(ec.set) + +\end{lstlisting} + +The example above will show the following information related to the +\emph{set} method of the EC API. + +\begin{lstlisting}[language=Python] + +Help on method set in module nepi.execution.ec: + +set(self, guid, name, value) method of nepi.execution.ec.ExperimentController instance + Modifies the value of the attribute with name 'name' on the RM with guid 'guid'. + + :param guid: Guid of the RM + :type guid: int + + :param name: Name of the attribute + :type name: str + + :param value: Value of the attribute + +\end{lstlisting} diff --git a/doc/user_manual/ec_internals.tex b/doc/user_manual/ec_internals.tex index ecca184f..07288fcd 100644 --- a/doc/user_manual/ec_internals.tex +++ b/doc/user_manual/ec_internals.tex @@ -24,9 +24,10 @@ \begin{itemize} \item the RMs dictionary + \item The scheduling API \item The scheduler queue, the tasks dictionary, the schedule method \item the processing thread and the \_process method, the inmediate execution queueu and the ParallelRunner \item the \_execute method - \item The deploy method, deployment groups + \item The deploy method (implementation), deployment groups \item The FailManager and what happens upon release (critical attribute) \end{itemize} diff --git a/doc/user_manual/faq.tex b/doc/user_manual/faq.tex index 4b227171..842169dc 100644 --- a/doc/user_manual/faq.tex +++ b/doc/user_manual/faq.tex @@ -157,10 +157,9 @@ as long as you keep the same license. There are many ways you can contribute to the project. The first one is using it and reporting bugs. -You can report bugs on the NEPI bugzilla page -(\textbf{not yet set-up, so for now send the bugs by email to the users list}): \\ +You can report bugs on the NEPI bugzilla page at: -\url{https://nepi.inria.fr/bugzilla/} \\ +\url{http://nepi.inria.fr/bugzilla} \\ You can also become a part of the NEPI community and join our mailing lists: @@ -180,12 +179,12 @@ to the \textit{nepi-developers} list. To report a bug take a look at the NEPI bugzilla page at: -\url{https://nepi.inria.fr/bugzilla/} \\ +\url{http://nepi.inria.fr/bugzilla} \\ \section{Where can I get more information ?} For more information visit NEPI web site at -\url{https://nepi.inria.fr} \\ +\url{http://nepi.inria.fr} \\ diff --git a/doc/user_manual/user_manual.pdf b/doc/user_manual/user_manual.pdf index 6c204f2dce012ab2ec5b7a3cece09f88f80e45f3..2dbd3323d4be6c0e76e75cdd7206f1cac74ace5a 100644 GIT binary patch delta 69420 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 Y#z;XGiB*(C4W+Gtf=Njk+nT`s1;K!`SpWb4 delta 58796 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�H-=i}qeZcXgEh$uv;Fo9v^u^rm5 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%0Dk{Jxarc6j^OL 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 diff --git a/src/nepi/execution/ec.py b/src/nepi/execution/ec.py index 0d0e4774..066e6b40 100644 --- a/src/nepi/execution/ec.py +++ b/src/nepi/execution/ec.py @@ -38,15 +38,15 @@ import threading import weakref class FailureLevel(object): - """ Describes the system failure state - """ + """ Describes the system failure state """ OK = 1 RM_FAILURE = 2 EC_FAILURE = 3 class FailureManager(object): - """ The FailureManager is responsible for handling errors, - and deciding whether an experiment should be aborted + """ The FailureManager is responsible for handling errors + and deciding whether an experiment should be aborted or not + """ def __init__(self, ec): @@ -55,7 +55,10 @@ class FailureManager(object): @property def ec(self): - """ Returns the Experiment Controller """ + """ Returns the ExperimentController associated to this FailureManager + + """ + return self._ec() @property @@ -77,7 +80,7 @@ class FailureManager(object): class ECState(object): - """ State of the Experiment Controller + """ Possible states for an ExperimentController """ RUNNING = 1 @@ -93,62 +96,63 @@ class ExperimentController(object): .. note:: - An experiment, or scenario, is defined by a concrete set of resources, - behavior, configuration and interconnection of those resources. - The Experiment Description (ED) is a detailed representation of a - single experiment. It contains all the necessary information to - allow repeating the experiment. NEPI allows to describe - experiments by registering components (resources), configuring them - and interconnecting them. - - A same experiment (scenario) can be executed many times, generating - different results. We call an experiment execution (instance) a 'run'. - - The ExperimentController (EC), is the entity responsible of - managing an experiment run. The same scenario can be - recreated (and re-run) by instantiating an EC and recreating - the same experiment description. - - In NEPI, an experiment is represented as a graph of interconnected - resources. A resource is a generic concept in the sense that any - component taking part of an experiment, whether physical of - virtual, is considered a resource. A resources could be a host, - a virtual machine, an application, a simulator, a IP address. - - A ResourceManager (RM), is the entity responsible for managing a - single resource. ResourceManagers are specific to a resource - type (i.e. An RM to control a Linux application will not be - the same as the RM used to control a ns-3 simulation). - To support a new type of resource in NEPI, a new RM must be - implemented. NEPI already provides a variety of - RMs to control basic resources, and new can be extended from - the existing ones. - - Through the EC interface the user can create ResourceManagers (RMs), - configure them and interconnect them, to describe an experiment. - Describing an experiment through the EC does not run the experiment. - Only when the 'deploy()' method is invoked on the EC, the EC will take - actions to transform the 'described' experiment into a 'running' experiment. - - While the experiment is running, it is possible to continue to - create/configure/connect RMs, and to deploy them to involve new - resources in the experiment (this is known as 'interactive' deployment). - - An experiments in NEPI is identified by a string id, - which is either given by the user, or automatically generated by NEPI. - The purpose of this identifier is to separate files and results that - belong to different experiment scenarios. - However, since a same 'experiment' can be run many times, the experiment - id is not enough to identify an experiment instance (run). - For this reason, the ExperimentController has two identifier, the - exp_id, which can be re-used in different ExperimentController, - and the run_id, which is unique to one ExperimentController instance, and - is automatically generated by NEPI. + An experiment, or scenario, is defined by a concrete set of resources, + behavior, configuration and interconnection of those resources. + The Experiment Description (ED) is a detailed representation of a + single experiment. It contains all the necessary information to + allow repeating the experiment. NEPI allows to describe + experiments by registering components (resources), configuring them + and interconnecting them. + + A same experiment (scenario) can be executed many times, generating + different results. We call an experiment execution (instance) a 'run'. + + The ExperimentController (EC), is the entity responsible of + managing an experiment run. The same scenario can be + recreated (and re-run) by instantiating an EC and recreating + the same experiment description. + + In NEPI, an experiment is represented as a graph of interconnected + resources. A resource is a generic concept in the sense that any + component taking part of an experiment, whether physical of + virtual, is considered a resource. A resources could be a host, + a virtual machine, an application, a simulator, a IP address. + + A ResourceManager (RM), is the entity responsible for managing a + single resource. ResourceManagers are specific to a resource + type (i.e. An RM to control a Linux application will not be + the same as the RM used to control a ns-3 simulation). + To support a new type of resource in NEPI, a new RM must be + implemented. NEPI already provides a variety of + RMs to control basic resources, and new can be extended from + the existing ones. + + Through the EC interface the user can create ResourceManagers (RMs), + configure them and interconnect them, to describe an experiment. + Describing an experiment through the EC does not run the experiment. + Only when the 'deploy()' method is invoked on the EC, the EC will take + actions to transform the 'described' experiment into a 'running' experiment. + + While the experiment is running, it is possible to continue to + create/configure/connect RMs, and to deploy them to involve new + resources in the experiment (this is known as 'interactive' deployment). + + An experiments in NEPI is identified by a string id, + which is either given by the user, or automatically generated by NEPI. + The purpose of this identifier is to separate files and results that + belong to different experiment scenarios. + However, since a same 'experiment' can be run many times, the experiment + id is not enough to identify an experiment instance (run). + For this reason, the ExperimentController has two identifier, the + exp_id, which can be re-used in different ExperimentController, + and the run_id, which is unique to one ExperimentController instance, and + is automatically generated by NEPI. """ def __init__(self, exp_id = None): super(ExperimentController, self).__init__() + # Logging self._logger = logging.getLogger("ExperimentController") @@ -206,43 +210,49 @@ class ExperimentController(object): @property def logger(self): - """ Return the logger of the Experiment Controller + """ Returns the logger instance of the Experiment Controller """ return self._logger @property def ecstate(self): - """ Return the state of the Experiment Controller + """ Returns the state of the Experiment Controller """ return self._state @property def exp_id(self): - """ Return the experiment id assigned by the user + """ Returns the experiment id assigned by the user """ return self._exp_id @property def run_id(self): - """ Return the experiment instance (run) identifier + """ Returns the experiment instance (run) identifier (automatically + generated) """ return self._run_id @property def abort(self): + """ Returns True if the experiment has failed and should be interrupted, + False otherwise. + + """ return self._fm.abort def wait_finished(self, guids): - """ Blocking method that wait until all RMs in the 'guid' list - reach a state >= STOPPED (i.e. STOPPED, FAILED or - RELEASED ) or until a System Failure occurs (e.g. Task Failure) + """ Blocking method that waits until all RMs in the 'guids' list + have reached a state >= STOPPED (i.e. STOPPED, FAILED or + RELEASED ), or until a failure in the experiment occurs + (i.e. abort == True) - :param guids: List of guids - :type guids: list + :param guids: List of guids + :type guids: list """ @@ -253,12 +263,13 @@ class ExperimentController(object): quit = quit) def wait_started(self, guids): - """ Blocking method that wait until all RMs in the 'guid' list - reach a state >= STARTED or until a System Failure occurs - (e.g. Task Failure) + """ Blocking method that waits until all RMs in the 'guids' list + have reached a state >= STARTED, or until a failure in the + experiment occurs (i.e. abort == True) + + :param guids: List of guids + :type guids: list - :param guids: List of guids - :type guids: list """ def quit(): @@ -268,11 +279,12 @@ class ExperimentController(object): quit = quit) def wait_released(self, guids): - """ Blocking method that wait until all RMs in the 'guid' list - reach a state = RELEASED or until the EC fails + """ Blocking method that waits until all RMs in the 'guids' list + have reached a state == RELEASED, or until the EC fails + + :param guids: List of guids + :type guids: list - :param guids: List of guids - :type guids: list """ def quit(): @@ -282,12 +294,13 @@ class ExperimentController(object): quit = quit) def wait_deployed(self, guids): - """ Blocking method that wait until all RMs in the 'guid' list - reach a state >= READY or until a System Failure occurs - (e.g. Task Failure) + """ Blocking method that waits until all RMs in the 'guids' list + have reached a state >= READY, or until a failure in the + experiment occurs (i.e. abort == True) + + :param guids: List of guids + :type guids: list - :param guids: List of guids - :type guids: list """ def quit(): @@ -297,12 +310,15 @@ class ExperimentController(object): quit = quit) def wait(self, guids, state, quit): - """ Blocking method that wait until all RMs in the 'guid' list - reach a state >= 'state' or until quit yileds True + """ Blocking method that waits until all RMs in the 'guids' list + have reached a state >= 'state', or until the 'quit' callback + yields True - :param guids: List of guids - :type guids: list + :param guids: List of guids + :type guids: list + """ + if isinstance(guids, int): guids = [guids] @@ -334,40 +350,49 @@ class ExperimentController(object): time.sleep(0.5) def get_task(self, tid): - """ Get a specific task + """ Returns a task by its id - :param tid: Id of the task - :type tid: int - :rtype: Task + :param tid: Id of the task + :type tid: int + + :rtype: Task + """ return self._tasks.get(tid) def get_resource(self, guid): - """ Get a specific Resource Manager + """ Returns a registered ResourceManager by its guid - :param guid: Id of the task - :type guid: int - :rtype: ResourceManager + :param guid: Id of the task + :type guid: int + + :rtype: ResourceManager + """ return self._resources.get(guid) @property def resources(self): - """ Returns the list of all the Resource Manager Id + """ Returns the set() of guids of all the ResourceManager - :rtype: set + :return: Set of all RM guids + :rtype: set """ return self._resources.keys() def register_resource(self, rtype, guid = None): - """ Register a Resource Manager. It creates a new 'guid', if it is not specified, - for the RM of type 'rtype' and add it to the list of Resources. + """ Registers a new ResourceManager of type 'rtype' in the experiment + + This method will assign a new 'guid' for the RM, if no guid + is specified. - :param rtype: Type of the RM - :type rtype: str - :return: Id of the RM - :rtype: int + :param rtype: Type of the RM + :type rtype: str + + :return: Guid of the RM + :rtype: int + """ # Get next available guid guid = self._guid_generator.next(guid) @@ -381,25 +406,47 @@ class ExperimentController(object): return guid def get_attributes(self, guid): - """ Return all the attibutes of a specific RM + """ Returns all the attributes of the RM with guid 'guid' + + :param guid: Guid of the RM + :type guid: int + + :return: List of attributes + :rtype: list - :param guid: Guid of the RM - :type guid: int - :return: List of attributes - :rtype: list """ rm = self.get_resource(guid) return rm.get_attributes() + def get_attribute(self, guid, name): + """ Returns the attribute 'name' of the RM with guid 'guid' + + :param guid: Guid of the RM + :type guid: int + + :param name: Name of the attribute + :type name: str + + :return: The attribute with name 'name' + :rtype: Attribute + + """ + rm = self.get_resource(guid) + return rm.get_attribute(name) + def register_connection(self, guid1, guid2): - """ Registers a guid1 with a guid2. - The declaration order is not important + """ Registers a connection between a RM with guid 'guid1' + and another RM with guid 'guid2'. + + The order of the in which the two guids are provided is not + important, since the connection relationship is symmetric. :param guid1: First guid to connect :type guid1: ResourceManager :param guid2: Second guid to connect :type guid: ResourceManager + """ rm1 = self.get_resource(guid1) rm2 = self.get_resource(guid2) @@ -409,19 +456,21 @@ class ExperimentController(object): def register_condition(self, guids1, action, guids2, state, time = None): - """ Registers an action START or STOP for all RM on guids1 to occur - time 'time' after all elements in guids2 reached state 'state'. + """ Registers an action START, STOP or DEPLOY for all RM on list + guids1 to occur at time 'time' after all elements in list guids2 + have reached state 'state'. :param guids1: List of guids of RMs subjected to action :type guids1: list - :param action: Action to register (either START or STOP) + :param action: Action to perform (either START, STOP or DEPLOY) :type action: ResourceAction :param guids2: List of guids of RMs to we waited for :type guids2: list - :param state: State to wait for on RMs (STARTED, STOPPED, etc) + :param state: State to wait for on RMs of list guids2 (STARTED, + STOPPED, etc) :type state: ResourceState :param time: Time to wait after guids2 has reached status @@ -438,49 +487,74 @@ class ExperimentController(object): rm.register_condition(action, guids2, state, time) def enable_trace(self, guid, name): - """ Enable trace + """ Enables a trace to be collected during the experiment run + + :param name: Name of the trace + :type name: str - :param name: Name of the trace - :type name: str """ rm = self.get_resource(guid) rm.enable_trace(name) def trace_enabled(self, guid, name): - """ Returns True if trace is enabled + """ Returns True if the trace of name 'name' is enabled + + :param name: Name of the trace + :type name: str - :param name: Name of the trace - :type name: str """ rm = self.get_resource(guid) return rm.trace_enabled(name) def trace(self, guid, name, attr = TraceAttr.ALL, block = 512, offset = 0): - """ Get information on collected trace + """ Returns information on a collected trace, the trace stream or + blocks (chunks) of the trace stream - :param name: Name of the trace - :type name: str + :param name: Name of the trace + :type name: str - :param attr: Can be one of: + :param attr: Can be one of: - TraceAttr.ALL (complete trace content), - - TraceAttr.STREAM (block in bytes to read starting at offset), + - TraceAttr.STREAM (block in bytes to read starting + at offset), - TraceAttr.PATH (full path to the trace file), - TraceAttr.SIZE (size of trace file). - :type attr: str + :type attr: str - :param block: Number of bytes to retrieve from trace, when attr is TraceAttr.STREAM - :type name: int + :param block: Number of bytes to retrieve from trace, when attr is + TraceAttr.STREAM + :type name: int - :param offset: Number of 'blocks' to skip, when attr is TraceAttr.STREAM - :type name: int + :param offset: Number of 'blocks' to skip, when attr is TraceAttr.STREAM + :type name: int + + :rtype: str - :rtype: str """ rm = self.get_resource(guid) return rm.trace(name, attr, block, offset) + def get_traces(self, guid): + """ Returns the list of the trace names of the RM with guid 'guid' + + :param guid: Guid of the RM + :type guid: int + + :return: List of trace names + :rtype: list + + """ + rm = self.get_resource(guid) + return rm.get_traces() + + def discover(self, guid): - """ Discover a specific RM defined by its 'guid' + """ Discovers an available resource matching the criteria defined + by the RM with guid 'guid', and associates that resource to the RM + + Not all RM types require (or are capable of) performing resource + discovery. For the RM types which are not capable of doing so, + invoking this method does not have any consequences. :param guid: Guid of the RM :type guid: int @@ -490,7 +564,12 @@ class ExperimentController(object): return rm.discover() def provision(self, guid): - """ Provision a specific RM defined by its 'guid' + """ Provisions the resource associated to the RM with guid 'guid'. + + Provisioning means making a resource 'accessible' to the user. + Not all RM types require (or are capable of) performing resource + provisioning. For the RM types which are not capable of doing so, + invoking this method does not have any consequences. :param guid: Guid of the RM :type guid: int @@ -500,29 +579,32 @@ class ExperimentController(object): return rm.provision() def get(self, guid, name): - """ Get a specific attribute 'name' from the RM 'guid' + """ Returns the value of the attribute with name 'name' on the + RM with guid 'guid' :param guid: Guid of the RM :type guid: int - :param name: attribute's name + :param name: Name of the attribute :type name: str + :return: The value of the attribute with name 'name' + """ rm = self.get_resource(guid) return rm.get(name) def set(self, guid, name, value): - """ Set a specific attribute 'name' from the RM 'guid' - with the value 'value' + """ Modifies the value of the attribute with name 'name' on the + RM with guid 'guid'. :param guid: Guid of the RM :type guid: int - :param name: attribute's name + :param name: Name of the attribute :type name: str - :param value: attribute's value + :param value: Value of the attribute """ rm = self.get_resource(guid) @@ -548,7 +630,10 @@ class ExperimentController(object): return state def stop(self, guid): - """ Stop a specific RM defined by its 'guid' + """ Stops the RM with guid 'guid' + + Stopping a RM means that the resource it controls will + no longer take part of the experiment. :param guid: Guid of the RM :type guid: int @@ -558,7 +643,10 @@ class ExperimentController(object): return rm.stop() def start(self, guid): - """ Start a specific RM defined by its 'guid' + """ Starts the RM with guid 'guid' + + Starting a RM means that the resource it controls will + begin taking part of the experiment. :param guid: Guid of the RM :type guid: int @@ -569,9 +657,9 @@ class ExperimentController(object): def set_with_conditions(self, name, value, guids1, guids2, state, time = None): - """ Set value 'value' on attribute with name 'name' on all RMs of - guids1 when 'time' has elapsed since all elements in guids2 - have reached state 'state'. + """ Modifies the value of attribute with name 'name' on all RMs + on the guids1 list when time 'time' has elapsed since all + elements in guids2 list have reached state 'state'. :param name: Name of attribute to set in RM :type name: string @@ -605,17 +693,20 @@ class ExperimentController(object): rm.set_with_conditions(name, value, guids2, state, time) def deploy(self, guids = None, wait_all_ready = True, group = None): - """ Deploy all resource manager in guids list + """ Deploys all ResourceManagers in the guids list. + + If the argument 'guids' is not given, all RMs with state NEW + are deployed. - :param guids: List of guids of RMs to deploy - :type guids: list + :param guids: List of guids of RMs to deploy + :type guids: list - :param wait_all_ready: Wait until all RMs are ready in - order to start the RMs - :type guid: int + :param wait_all_ready: Wait until all RMs are ready in + order to start the RMs + :type guid: int - :param group: Id of deployment group in which to deploy RMs - :type group: int + :param group: Id of deployment group in which to deploy RMs + :type group: int """ self.logger.debug(" ------- DEPLOY START ------ ") @@ -689,8 +780,10 @@ class ExperimentController(object): self.schedule("0s", rm.stop_with_conditions) def release(self, guids = None): - """ Release al RMs on the guids list or - all the resources if no list is specified + """ Releases all ResourceManagers in the guids list. + + If the argument 'guids' is not given, all RMs registered + in the experiment are released. :param guids: List of RM guids :type guids: list @@ -712,8 +805,7 @@ class ExperimentController(object): self.wait_released(guids) def shutdown(self): - """ Shutdown the Experiment Controller. - Releases all the resources and stops task processing thread + """ Releases all resources and stops the ExperimentController """ # If there was a major failure we can't exit gracefully @@ -735,7 +827,7 @@ class ExperimentController(object): self._thread.join() def schedule(self, date, callback, track = False): - """ Schedule a callback to be executed at time date. + """ Schedules a callback to be executed at time 'date'. :param date: string containing execution time for the task. It can be expressed as an absolute time, using @@ -746,10 +838,12 @@ class ExperimentController(object): Python function, and receives args and kwargs as arguments. - :param track: if set to True, the task will be retrivable with + :param track: if set to True, the task will be retrievable with the get_task() method :return : The Id of the task + :rtype: int + """ timestamp = stabsformat(date) task = Task(timestamp, callback) @@ -767,37 +861,40 @@ class ExperimentController(object): """ Process scheduled tasks. .. note:: + + Tasks are scheduled by invoking the schedule method with a target + callback and an execution time. + The schedule method creates a new Task object with that callback + and execution time, and pushes it into the '_scheduler' queue. + The execution time and the order of arrival of tasks are used + to order the tasks in the queue. + + The _process method is executed in an independent thread held by + the ExperimentController for as long as the experiment is running. + This method takes tasks from the '_scheduler' queue in a loop + and processes them in parallel using multithreading. + The environmental variable NEPI_NTHREADS can be used to control + the number of threads used to process tasks. The default value is + 50. - The _process method is executed in an independent thread held by the - ExperimentController for as long as the experiment is running. + To execute tasks in parallel, a ParallelRunner (PR) object is used. + This object keeps a pool of threads (workers), and a queue of tasks + scheduled for 'immediate' execution. - Tasks are scheduled by invoking the schedule method with a target callback. - The schedule method is given a execution time which controls the - order in which tasks are processed. + On each iteration, the '_process' loop will take the next task that + is scheduled for 'future' execution from the '_scheduler' queue, + and if the execution time of that task is >= to the current time, + it will push that task into the PR for 'immediate execution'. + As soon as a worker is free, the PR will assign the next task to + that worker. - Tasks are processed in parallel using multithreading. - The environmental variable NEPI_NTHREADS can be used to control - the number of threads used to process tasks. The default value is 50. - - Exception handling: - - To execute tasks in parallel, an ParallelRunner (PR) object, holding - a pool of threads (workers), is used. - For each available thread in the PR, the next task popped from - the scheduler queue is 'put' in the PR. - Upon receiving a task to execute, each PR worker (thread) invokes the - _execute method of the EC, passing the task as argument. - This method, calls task.callback inside a try/except block. If an - exception is raised by the tasks.callback, it will be trapped by the - try block, logged to standard error (usually the console), and the EC - state will be set to ECState.FAILED. - The invocation of _notify immediately after, forces the processing - loop in the _process method, to wake up if it was blocked waiting for new - tasks to arrived, and to check the EC state. - As the EC is in FAILED state, the processing loop exits and the - 'finally' block is invoked. In the 'finally' block, the 'sync' method - of the PR is invoked, which forces the PR to raise any unchecked errors - that might have been raised by the workers. + Upon receiving a task to execute, each PR worker (thread) will + invoke the _execute method of the EC, passing the task as + argument. + The _execute method will then invoke task.callback inside a + try/except block. If an exception is raised by the tasks.callback, + it will be trapped by the try block, logged to standard error + (usually the console), and the task will be marked as failed. """ @@ -855,12 +952,6 @@ class ExperimentController(object): :param task: Object containing the callback to execute :type task: Task - .. note:: - - If the invokation of the task callback raises an - exception, the processing thread of the ExperimentController - will be stopped and the experiment will be aborted. - """ # Invoke callback task.status = TaskStatus.DONE @@ -876,8 +967,9 @@ class ExperimentController(object): self.logger.error("Error occurred while executing task: %s" % err) def _notify(self): - """ Awakes the processing thread in case it is blocked waiting - for a new task to be scheduled. + """ Awakes the processing thread if it is blocked waiting + for new tasks to arrive + """ self._cond.acquire() self._cond.notify() diff --git a/src/nepi/execution/resource.py b/src/nepi/execution/resource.py index e1679a8c..be803295 100644 --- a/src/nepi/execution/resource.py +++ b/src/nepi/execution/resource.py @@ -259,6 +259,14 @@ class ResourceManager(Logger): """ return copy.deepcopy(cls._attributes.values()) + @classmethod + def get_attribute(cls, name): + """ Returns a copy of the attribute with name 'name' + + """ + return copy.deepcopy(cls._attributes[name]) + + @classmethod def get_traces(cls): """ Returns a copy of the traces diff --git a/src/nepi/resources/linux/application.py b/src/nepi/resources/linux/application.py index 50cb2055..a83393d7 100644 --- a/src/nepi/resources/linux/application.py +++ b/src/nepi/resources/linux/application.py @@ -319,7 +319,7 @@ class LinuxApplication(ResourceManager): super(LinuxApplication, self).do_provision() - def upload_start_command(self): + def upload_start_command(self, overwrite = False): # Upload command to remote bash script # - only if command can be executed in background and detached command = self.get("command") @@ -339,7 +339,7 @@ class LinuxApplication(ResourceManager): self.node.upload_command(command, shfile = shfile, env = env, - overwrite = False) + overwrite = overwrite) def execute_deploy_command(self, command): if command: diff --git a/src/nepi/resources/linux/node.py b/src/nepi/resources/linux/node.py index cbc0099e..d17e4dfb 100644 --- a/src/nepi/resources/linux/node.py +++ b/src/nepi/resources/linux/node.py @@ -389,22 +389,12 @@ class LinuxNode(ResourceManager): # TODO: Validate! return True - def clean_processes(self, killer = False): + def clean_processes(self): self.info("Cleaning up processes") - if killer: - # Hardcore kill - cmd = ("sudo -S killall python tcpdump || /bin/true ; " + - "sudo -S killall python tcpdump || /bin/true ; " + - "sudo -S kill $(ps -N -T -o pid --no-heading | grep -v $PPID | sort) || /bin/true ; " + - "sudo -S killall -u root || /bin/true ; " + - "sudo -S killall -u root || /bin/true ; ") - else: - # Be gentler... - cmd = ("sudo -S killall tcpdump || /bin/true ; " + - "sudo -S killall tcpdump || /bin/true ; " + - "sudo -S killall -u %s || /bin/true ; " % self.get("username") + - "sudo -S killall -u %s || /bin/true ; " % self.get("username")) + cmd = ("sudo -S killall tcpdump || /bin/true ; " + + "sudo -S kill $(ps aux | grep '[n]epi' | awk '{print $2}') || /bin/true ; " + + "sudo -S killall -u %s || /bin/true ; " % self.get("username")) out = err = "" (out, err), proc = self.execute(cmd, retry = 1, with_lock = True) diff --git a/src/nepi/resources/planetlab/tap.py b/src/nepi/resources/planetlab/tap.py index fc15662f..5ca85905 100644 --- a/src/nepi/resources/planetlab/tap.py +++ b/src/nepi/resources/planetlab/tap.py @@ -92,51 +92,6 @@ class PlanetlabTap(LinuxApplication): if node: return node[0] return None - """ - def trace(self, name, attr = TraceAttr.ALL, block = 512, offset = 0): - self.info("Retrieving '%s' trace %s " % (name, attr)) - - path = os.path.join(self.run_home, name) - - command = "(test -f %s && echo 'success') || echo 'error'" % path - (out, err), proc = self.node.execute(command) - - if (err and proc.poll()) or out.find("error") != -1: - msg = " Couldn't find trace %s " % name - self.error(msg, out, err) - return None - - if attr == TraceAttr.PATH: - return path - - if attr == TraceAttr.ALL: - (out, err), proc = self.node.check_output(self.run_home, name) - - if proc.poll(): - msg = " Couldn't read trace %s " % name - self.error(msg, out, err) - return None - - return out - - if attr == TraceAttr.STREAM: - cmd = "dd if=%s bs=%d count=1 skip=%d" % (path, block, offset) - elif attr == TraceAttr.SIZE: - cmd = "stat -c%%s %s " % path - - (out, err), proc = self.node.execute(cmd) - - if proc.poll(): - msg = " Couldn't find trace %s " % name - self.error(msg, out, err) - return None - - if attr == TraceAttr.SIZE: - out = int(out.strip()) - - return out - """ - def upload_sources(self): # upload vif-creation python script pl_vif_create = os.path.join(os.path.dirname(__file__), "scripts", @@ -174,11 +129,17 @@ class PlanetlabTap(LinuxApplication): stop_command = self.replace_paths(self._stop_command) self.node.upload(stop_command, os.path.join(self.app_home, "stop.sh"), - text = True, - overwrite = False) + text = True, + # Overwrite file every time. + # The stop.sh has the path to the socket, wich should change + # on every experiment run. + overwrite = True) def upload_start_command(self): - super(PlanetlabTap, self).upload_start_command() + # Overwrite file every time. + # The stop.sh has the path to the socket, wich should change + # on every experiment run. + super(PlanetlabTap, self).upload_start_command(overwrite = True) # We want to make sure the device is up and running # before the deploy finishes (so things will be ready @@ -246,7 +207,7 @@ class PlanetlabTap(LinuxApplication): if out.strip().find(self.get("deviceName")) == -1: # tap is not running is not running (socket not found) - self.finish() + self.set_stopped() self._last_state_check = tnow() -- 2.47.0