From 31efe81b13d6761cf153e71f7ac150751b2d4090 Mon Sep 17 00:00:00 2001 From: Csaba Henk Date: Mon, 7 Feb 2011 01:32:57 +0000 Subject: syncdaemon: add "setattr" server method, needed to synchronize metadata of links/dirs Signed-off-by: Csaba Henk Signed-off-by: Anand V. Avati BUG: 2318 (gsyncd.py :chmod on directory not working) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2318 --- xlators/features/marker/utils/syncdaemon/master.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'xlators/features/marker/utils/syncdaemon/master.py') diff --git a/xlators/features/marker/utils/syncdaemon/master.py b/xlators/features/marker/utils/syncdaemon/master.py index a2f9f718eb4..1abd0325268 100644 --- a/xlators/features/marker/utils/syncdaemon/master.py +++ b/xlators/features/marker/utils/syncdaemon/master.py @@ -67,7 +67,7 @@ class GMaster(object): self.jobtab[path] = [] self.jobtab[path].append((label, a, lambda : job(*a, **kw))) - def wait(self, path, mark): + def wait(self, path, *args): jobs = self.jobtab.pop(path, []) succeed = True for j in jobs: @@ -75,10 +75,12 @@ class GMaster(object): if not ret: succeed = False if succeed: - self.sendmark(path, mark) + self.sendmark(path, *args) return succeed - def sendmark(self, path, mark): + def sendmark(self, path, mark, adct=None): + if adct: + self.slave.server.setattr(path, adct) self.slave.server.set_xtime(path, self.uuid, mark) def crawl(self, path='.', xtl=None): @@ -141,12 +143,15 @@ class GMaster(object): else: raise for e, xte in chld: - mo = indulgently(e, lambda e: os.lstat(e).st_mode) - if mo == False: + st = indulgently(e, lambda e: os.lstat(e)) + if st == False: continue + mo = st.st_mode + adct = {'own': (st.st_uid, st.st_gid)} if stat.S_ISLNK(mo): - self.slave.server.symlink(os.readlink(e), e) - self.sendmark(e, xte) + if indulgently(e, lambda e: self.slave.server.symlink(os.readlink(e), e)) == False: + continue + self.sendmark(e, xte, adct) elif stat.S_ISREG(mo): logging.debug("syncing %s ..." % e) pb = self.syncer.add(e) @@ -159,7 +164,8 @@ class GMaster(object): logging.error("failed to sync " + e) self.add_job(path, 'reg', regjob, e, xte, pb) elif stat.S_ISDIR(mo): - if indulgently(e, lambda e: (self.add_job(path, 'cwait', self.wait, e, xte), + adct['mode'] = mo + if indulgently(e, lambda e: (self.add_job(path, 'cwait', self.wait, e, xte, adct), self.crawl(e, xte), True)[-1], blame=e) == False: continue -- cgit