From: Claudio-Daniel Freire Date: Mon, 18 Jul 2011 11:28:41 +0000 (+0200) Subject: Proxying and marshalling fixes X-Git-Tag: nepi-3.0.0~375 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=cb044f8fd4cbf91f31ca8be0935a822f7c00ea1e;p=nepi.git Proxying and marshalling fixes --- diff --git a/src/nepi/testbeds/planetlab/interfaces.py b/src/nepi/testbeds/planetlab/interfaces.py index 57c37369..d23e73d8 100644 --- a/src/nepi/testbeds/planetlab/interfaces.py +++ b/src/nepi/testbeds/planetlab/interfaces.py @@ -211,7 +211,7 @@ class TunIface(object): if (self.address or self.netprefix or self.netmask) is not None: raise RuntimeError, "Cannot add more than one address to %s interfaces" % (self._KIND,) if broadcast: - raise ValueError, "%s interfaces cannot broadcast in PlanetLab" % (self._KIND,) + raise ValueError, "%s interfaces cannot broadcast in PlanetLab (%s)" % (self._KIND,broadcast) self.address = address self.netprefix = netprefix diff --git a/src/nepi/testbeds/planetlab/node.py b/src/nepi/testbeds/planetlab/node.py index f04c811e..2557ea9d 100644 --- a/src/nepi/testbeds/planetlab/node.py +++ b/src/nepi/testbeds/planetlab/node.py @@ -475,6 +475,8 @@ class Node(object): raise RuntimeError, "Route %s cannot be bound to any virtual interface " \ "- PL can only handle rules over virtual interfaces. Candidates are: %s" % (route,devs) + print >>sys.stderr, "Setting up routes for", self.hostname + (out,err),proc = server.popen_ssh_command( "( sudo -S bash -c 'cat /vsys/vroute.out >&2' & ) ; sudo -S bash -c 'cat > /vsys/vroute.in' ; sleep 0.1" % dict( home = server.shell_escape(self.home_path)), diff --git a/src/nepi/util/proxy.py b/src/nepi/util/proxy.py index c89f1d88..2bb52ec6 100644 --- a/src/nepi/util/proxy.py +++ b/src/nepi/util/proxy.py @@ -547,17 +547,17 @@ class TestbedControllerServer(BaseServer): self._testbed.defer_add_trace(guid, trace_id) @Marshalling.handles(ADD_ADDRESS) - @Marshalling.args(int, str, int, str) + @Marshalling.args(int, str, int, Marshalling.pickled_data) @Marshalling.retvoid def defer_add_address(self, guid, address, netprefix, broadcast): self._testbed.defer_add_address(guid, address, netprefix, broadcast) @Marshalling.handles(ADD_ROUTE) - @Marshalling.args(int, str, int, str) + @Marshalling.args(int, str, int, str, int) @Marshalling.retvoid - def defer_add_route(self, guid, destination, netprefix, nexthop): - self._testbed.defer_add_route(guid, destination, netprefix, nexthop) + def defer_add_route(self, guid, destination, netprefix, nexthop, metric): + self._testbed.defer_add_route(guid, destination, netprefix, nexthop, metric) @Marshalling.handles(DO_SETUP) @Marshalling.args() diff --git a/src/nepi/util/server.py b/src/nepi/util/server.py index 36b5705a..8fe87064 100644 --- a/src/nepi/util/server.py +++ b/src/nepi/util/server.py @@ -405,6 +405,11 @@ class Client(object): def _read_reply(self): data = self._process.stdout.readline() encoded = data.rstrip() + if not encoded: + # empty == eof == dead process, poll it to un-zombify + self._process.poll() + + raise RuntimeError, "Forwarder died while awaiting reply: %s" % (self._process.stderr.read(),) return base64.b64decode(encoded) def read_reply(self, which=None, transform=None):