X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Flinux%2Fccn%2Fccnd.py;h=1fc8979b6dba37f30cc1047840588113403d9d60;hb=e7eb6ef8873e1e197b3db8842f67a483c004a77a;hp=cc30823d38c0e9822314924b78da6472c8fbb7bd;hpb=46da4690c5120b820385fd47b7fbf995c1bff2a0;p=nepi.git diff --git a/src/nepi/resources/linux/ccn/ccnd.py b/src/nepi/resources/linux/ccn/ccnd.py index cc30823d..1fc8979b 100644 --- a/src/nepi/resources/linux/ccn/ccnd.py +++ b/src/nepi/resources/linux/ccn/ccnd.py @@ -19,8 +19,8 @@ from nepi.execution.attribute import Attribute, Flags, Types from nepi.execution.trace import Trace, TraceAttr -from nepi.execution.resource import ResourceManager, clsinit_copy, ResourceState, \ - reschedule_delay +from nepi.execution.resource import ResourceManager, clsinit_copy, \ + ResourceState, reschedule_delay from nepi.resources.linux.application import LinuxApplication from nepi.resources.linux.node import OSType from nepi.util.timefuncs import tnow, tdiffsec @@ -50,56 +50,56 @@ class LinuxCCND(LinuxApplication): " -1 - max logging \n" " Or apply bitwise OR to these values to get combinations of them", type = Types.Integer, - flags = Flags.ExecReadOnly) + flags = Flags.Design) port = Attribute("port", "Sets the CCN_LOCAL_PORT environmental variable. " "Defaults to 9695 ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) sockname = Attribute("sockname", "Sets the CCN_LOCAL_SCOKNAME environmental variable. " "Defaults to /tmp/.ccnd.sock", - flags = Flags.ExecReadOnly) + flags = Flags.Design) capacity = Attribute("capacity", "Sets the CCND_CAP environmental variable. " "Capacity limit in terms of ContentObjects", - flags = Flags.ExecReadOnly) + flags = Flags.Design) mtu = Attribute("mtu", "Sets the CCND_MTU environmental variable. ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) data_pause = Attribute("dataPauseMicrosec", "Sets the CCND_DATA_PAUSE_MICROSEC environmental variable. ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) default_stale = Attribute("defaultTimeToStale", "Sets the CCND_DEFAULT_TIME_TO_STALE environmental variable. ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) max_stale = Attribute("maxTimeToStale", "Sets the CCND_MAX_TIME_TO_STALE environmental variable. ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) max_rte = Attribute("maxRteMicrosec", "Sets the CCND_MAX_RTE_MICROSEC environmental variable. ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) keystore = Attribute("keyStoreDirectory", "Sets the CCND_KEYSTORE_DIRECTORY environmental variable. ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) listen_on = Attribute("listenOn", "Sets the CCND_LISTEN_ON environmental variable. ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) autoreg = Attribute("autoreg", "Sets the CCND_AUTOREG environmental variable. ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) prefix = Attribute("prefix", "Sets the CCND_PREFIX environmental variable. ", - flags = Flags.ExecReadOnly) + flags = Flags.Design) cls._register_attribute(debug) cls._register_attribute(port) @@ -136,7 +136,7 @@ class LinuxCCND(LinuxApplication): def path(self): return "PATH=$PATH:${BIN}/%s/" % self.version - def deploy(self): + def do_deploy(self): if not self.node or self.node.state < ResourceState.READY: self.debug("---- RESCHEDULING DEPLOY ---- node state %s " % self.node.state ) @@ -170,68 +170,47 @@ class LinuxCCND(LinuxApplication): self.set("env", self._environment) command = self.get("command") - env = self.get("env") self.info("Deploying command '%s' " % command) - # create home dir for application - self.node.mkdir(self.run_home) + self.do_discover() + self.do_provision() - # upload sources - self.upload_sources() + self.set_ready() - # upload code - self.upload_code() + def upload_start_command(self): + command = self.get("command") + env = self.get("env") - # upload stdin - self.upload_stdin() - - # install dependencies - self.install_dependencies() - - # build - self.build() - - # Install - self.install() - - # We want to make sure the repository is running - # before the experiment starts. - # Run the command as a bash script in background, - # in the host ( but wait until the command has - # finished to continue ) - env = self.replace_paths(env) - command = self.replace_paths(command) + # We want to make sure the ccnd is running + # before the experiment starts. + # Run the command as a bash script in background, + # in the host ( but wait until the command has + # finished to continue ) + env = self.replace_paths(env) + command = self.replace_paths(command) - shfile = os.path.join(self.app_home, "start.sh") - self.node.run_and_wait(command, self.run_home, - shfile = shfile, - overwrite = False, - env = env, - raise_on_error = True) - - self.debug("----- READY ---- ") - self._ready_time = tnow() - self._state = ResourceState.READY + shfile = os.path.join(self.app_home, "start.sh") + self.node.run_and_wait(command, self.run_home, + shfile = shfile, + overwrite = False, + env = env) - def start(self): - if self._state == ResourceState.READY: + def do_start(self): + if self.state == ResourceState.READY: command = self.get("command") self.info("Starting command '%s'" % command) - self._start_time = tnow() - self._state = ResourceState.STARTED + self.set_started() else: msg = " Failed to execute command '%s'" % command self.error(msg, out, err) - self._state = ResourceState.FAILED raise RuntimeError, msg - def stop(self): + def do_stop(self): command = self.get('command') or '' - state = self.state - if state == ResourceState.STARTED: + if self.state == ResourceState.STARTED: self.info("Stopping command '%s'" % command) command = "ccndstop" @@ -252,8 +231,7 @@ class LinuxCCND(LinuxApplication): stdout = "ccndstop_stdout", stderr = "ccndstop_stderr") - self._stop_time = tnow() - self._state = ResourceState.STOPPED + self.set_stopped() @property def state(self): @@ -261,24 +239,23 @@ class LinuxCCND(LinuxApplication): state_check_delay = 0.5 if self._state == ResourceState.STARTED and \ tdiffsec(tnow(), self._last_state_check) > state_check_delay: - (out, err), proc = self._ccndstatus + (out, err), proc = self._ccndstatus() retcode = proc.poll() if retcode == 1 and err.find("No such file or directory") > -1: # ccnd is not running (socket not found) - self._state = ResourceState.FINISHED + self.set_stopped() elif retcode: # other errors ... msg = " Failed to execute command '%s'" % self.get("command") self.error(msg, out, err) - self._state = ResourceState.FAILED + self.fail() self._last_state_check = tnow() return self._state - @property def _ccndstatus(self): env = self.get('env') or "" environ = self.node.format_environment(env, inline = True) @@ -305,7 +282,7 @@ class LinuxCCND(LinuxApplication): @property def _sources(self): - return "http://www.ccnx.org/releases/ccnx-0.7.2.tar.gz" + return "http://www.ccnx.org/releases/ccnx-0.8.2.tar.gz" @property def _build(self):