X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Fns3%2Fns3application.py;h=681e1a11c870fa39e950a96fa992638561805f8c;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=302e12898da8f43155bd86c5a5456b44ebb743be;hpb=0cff9603cef884887e19b6f594745284e54a2b19;p=nepi.git diff --git a/src/nepi/resources/ns3/ns3application.py b/src/nepi/resources/ns3/ns3application.py index 302e1289..681e1a11 100644 --- a/src/nepi/resources/ns3/ns3application.py +++ b/src/nepi/resources/ns3/ns3application.py @@ -3,9 +3,8 @@ # Copyright (C) 2014 INRIA # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation; # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,25 +16,31 @@ # # Author: Alina Quereilhac -from nepi.execution.resource import clsinit_copy, ResourceState, \ - reschedule_delay +from nepi.execution.resource import clsinit_copy, ResourceState from nepi.resources.ns3.ns3base import NS3Base @clsinit_copy class NS3BaseApplication(NS3Base): _rtype = "abstract::ns3::Application" + def __init__(self, ec, guid): + super(NS3BaseApplication, self).__init__(ec, guid) + self._node = None + @property def node(self): - from nepi.resources.ns3.ns3node import NS3BaseNode - nodes = self.get_connected(NS3BaseNode.get_rtype()) + if not self._node: + from nepi.resources.ns3.ns3node import NS3BaseNode + nodes = self.get_connected(NS3BaseNode.get_rtype()) - if not nodes: - msg = "Application not connected to node" - self.error(msg) - raise RuntimeError, msg + if not nodes: + msg = "Application not connected to node" + self.error(msg) + raise RuntimeError(msg) - return nodes[0] + self._node = nodes[0] + + return self._node @property def _rms_to_wait(self): @@ -59,7 +64,7 @@ class NS3BaseApplication(NS3Base): def do_start(self): if self.simulation.state < ResourceState.STARTED: self.debug("---- RESCHEDULING START ----" ) - self.ec.schedule(reschedule_delay, self.start) + self.ec.schedule(self.reschedule_delay, self.start) else: super(NS3BaseApplication, self).do_start() self._start_time = self.simulation.start_time @@ -67,10 +72,19 @@ class NS3BaseApplication(NS3Base): @property def state(self): if self._state == ResourceState.STARTED: - is_running = self.simulation.invoke(self.uuid, "isAppRunning") - - if not is_running: - self.set_stopped() + try: + is_running = self.simulation.invoke(self.uuid, "isAppRunning") + + if not is_running: + self.set_stopped() + except: + msg = "Application failed. Can not retrieve state" + out = "" + + import traceback + err = traceback.format_exc() + self.error(msg, out, err) + self.do_fail() return self._state