diff options
| -rw-r--r-- | xlators/features/marker/utils/syncdaemon/repce.py | 9 | ||||
| -rw-r--r-- | xlators/features/marker/utils/syncdaemon/resource.py | 12 | 
2 files changed, 19 insertions, 2 deletions
diff --git a/xlators/features/marker/utils/syncdaemon/repce.py b/xlators/features/marker/utils/syncdaemon/repce.py index f878d481a..aebc8b7d8 100644 --- a/xlators/features/marker/utils/syncdaemon/repce.py +++ b/xlators/features/marker/utils/syncdaemon/repce.py @@ -21,6 +21,7 @@ except ImportError:      import pickle  pickle_proto = -1 +repce_version = 1.0  def ioparse(i, o):      if isinstance(i, int): @@ -148,3 +149,11 @@ class RepceClient(object):      def __getattr__(self, meth):          return self.mprx(self, meth) + +    def __version__(self): +        d = {'proto': repce_version} +        try: +            d['object'] = self('version') +        except AttributeError: +            pass +        return d diff --git a/xlators/features/marker/utils/syncdaemon/resource.py b/xlators/features/marker/utils/syncdaemon/resource.py index 93199f518..6529155a0 100644 --- a/xlators/features/marker/utils/syncdaemon/resource.py +++ b/xlators/features/marker/utils/syncdaemon/resource.py @@ -166,6 +166,10 @@ class Server(object):          cls.lastping += 1          return cls.lastping +    @staticmethod +    def version(): +        return 1.0 +  class SlaveLocal(object): @@ -208,6 +212,10 @@ class SlaveRemote(object):      def start_fd_client(self, i, o, **opts):          self.server = RepceClient(i, o) +        rv = self.server.__version__() +        exrv = {'proto': repce.repce_version, 'object': Server.version()} +        if rv != exrv: +            raise RuntimeError("RePCe version mismatch: local %s, remote %s" % (exrv, rv))          if gconf.timeout and int(gconf.timeout) > 0:              def pinger():                  while True: @@ -350,7 +358,7 @@ class SSH(AbstractUrl, SlaveRemote):          deferred = go_daemon == 'postconn'          ret = sup(self, gconf.ssh_command.split() + gconf.ssh_ctl_args + [self.remote_addr], slave=self.inner_rsc.url, deferred=deferred)          if deferred: -            # send a ping to peer so that we can wait for +            # send a message to peer so that we can wait for              # the answer from which we know connection is              # established and we can proceed with daemonization              # (doing that too early robs the ssh passwd prompt...) @@ -359,7 +367,7 @@ class SSH(AbstractUrl, SlaveRemote):              # in daemon), we just do a an ad-hoc linear put/get.              i, o = ret              inf = os.fdopen(i) -            repce.send(o, None, 'ping') +            repce.send(o, None, '__version__')              select.select((inf,), (), ())              repce.recv(inf)              # hack hack hack: store a global reference to the file  | 
