diff options
Diffstat (limited to 'geo-replication/syncdaemon/resource.py')
-rw-r--r-- | geo-replication/syncdaemon/resource.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index 8deb5114b..41add6fb2 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -321,6 +321,18 @@ class Server(object): else: raise + @classmethod + @_pathguard + def linkto_check(cls, path): + try: + return not (Xattr.lgetxattr_buf(path, 'trusted.glusterfs.dht.linkto') == '') + except (IOError, OSError): + ex = sys.exc_info()[1] + if ex.errno in (ENOENT, ENODATA): + return False + else: + raise + @classmethod @_pathguard @@ -779,7 +791,11 @@ class SlaveRemote(object): p0.stdin.write(f) p0.stdin.write('\n') p0.stdin.close() + + # wait() for tar to terminate, collecting any errors, further + # waiting for transfer to complete p0.wait() + p0.terminate_geterr(fail_on_err = False) p1.wait() p1.terminate_geterr(fail_on_err = False) @@ -1135,10 +1151,14 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote): def gfid(cls, e): """ path based backend gfid fetch """ return super(brickserver, cls).gfid(e) + @classmethod + def linkto_check(cls, e): + return super(brickserver, cls).linkto_check(e) if gconf.slave_id: # define {,set_}xtime in slave, thus preempting # the call to remote, so that it takes data from # the local brick + slave.server.xtime = types.MethodType(lambda _self, path, uuid: brickserver.xtime(path, uuid + '.' + gconf.slave_id), slave.server) slave.server.stime = types.MethodType(lambda _self, path, uuid: brickserver.stime(path, uuid + '.' + gconf.slave_id), slave.server) slave.server.set_stime = types.MethodType(lambda _self, path, uuid, mark: brickserver.set_stime(path, uuid + '.' + gconf.slave_id, mark), slave.server) (g1, g2) = self.gmaster_instantiate_tuple(slave) |