diff options
| author | Venky Shankar <vshankar@redhat.com> | 2013-12-12 17:03:09 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2014-02-06 01:54:52 -0800 | 
| commit | aa7b0c640818df25b4f0297b1931ff52a77121bf (patch) | |
| tree | 17e5240932e5aae2edd4cb165761069d3d2d0cc2 | |
| parent | cbf6a264bd124c6b193709ad0e09c260c7d1845b (diff) | |
gsyncd / geo-rep: ignore DHTs sticky bit file during crawl
Change-Id: Ide927759c6a3d5301475eac9f6e785aa901d426e
BUG: 1036539
Signed-off-by: Venky Shankar <vshankar@redhat.com>
Reviewed-on: http://review.gluster.org/6792
Reviewed-by: Kotresh HR <khiremat@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
| -rw-r--r-- | geo-replication/syncdaemon/master.py | 10 | ||||
| -rw-r--r-- | geo-replication/syncdaemon/resource.py | 15 | 
2 files changed, 25 insertions, 0 deletions
diff --git a/geo-replication/syncdaemon/master.py b/geo-replication/syncdaemon/master.py index a7a46e37764..c17e6a2ff38 100644 --- a/geo-replication/syncdaemon/master.py +++ b/geo-replication/syncdaemon/master.py @@ -1184,6 +1184,13 @@ class GMasterXsyncMixin(GMasterChangelogMixin):              if stime and stime[-1]:                  self.sync_stime(stime[-1], last) +    def is_sticky(self, path, mo): +        """check for DHTs linkto sticky bit file""" +        sticky = False +        if mo & 01000: +            sticky = self.master.server.linkto_check(path) +        return sticky +      def Xcrawl(self, path='.', xtr_root=None):          """          generate a CHANGELOG file consumable by process_change. @@ -1235,6 +1242,9 @@ class GMasterXsyncMixin(GMasterChangelogMixin):              if isinstance(st, int):                  logging.warn('%s got purged in the interim ...' % e)                  continue +            if self.is_sticky(e, st.st_mode): +                logging.debug('ignoring sticky bit file %s' % e) +                continue              gfid = self.master.server.gfid(e)              if isinstance(gfid, int):                  logging.warn('skipping entry %s..' % e) diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index 05c63e88ae8..41add6fb287 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 @@ -1139,6 +1151,9 @@ 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  | 
