diff options
author | Kotresh HR <khiremat@redhat.com> | 2015-09-21 14:51:13 +0530 |
---|---|---|
committer | Venky Shankar <vshankar@redhat.com> | 2015-11-27 03:54:51 -0800 |
commit | 8b3061887319d38eb3644e5c4ec5a2b226de6723 (patch) | |
tree | 72a10196dfaea1b6724c10df291553fcc56d1cc3 /geo-replication | |
parent | 7de27f1445ffa7b60a5d8092681267531f50395e (diff) |
geo-rep: Fix syncing chown in xsync crawl
GEO-REP INTEROP WITH SHARD FEATURE
Problem:
The sequence of entry creation and chown in master
is recorded as creation of entry with resulted
user:group in xsync changelog. During sync, entry
creation is always split into two ops, MKNOD and
SETATTR. Hence the issue is not being hit otherwise
it would have failed with EPERM if parent is owned
by different user. But with shard translator being
enabled on slave, doing entry creation with MKNOD and
SETATTR is not allowed, SETATTR fails as it accesses
inode structure which is not linked.
Solution:
The sequence of entry creation and chown in master
should be recorded as MKNOD and SETATTR separately always
and do entry creation with single op in gfid-access
xlator. The gfid-access patch will be sent separately.
BUG: 1284453
Change-Id: Ia577aa5270cb96b86830885d6c4c01fb0133eeed
Signed-off-by: Kotresh HR <khiremat@redhat.com>
Reviewed-on: http://review.gluster.org/12205
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Aravinda VK <avishwan@redhat.com>
Reviewed-on: http://review.gluster.org/12729
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Milind Changire <mchangir@redhat.com>
Reviewed-by: Venky Shankar <vshankar@redhat.com>
Diffstat (limited to 'geo-replication')
-rw-r--r-- | geo-replication/syncdaemon/master.py | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/geo-replication/syncdaemon/master.py b/geo-replication/syncdaemon/master.py index be8449bec8c..7b8dc9dc821 100644 --- a/geo-replication/syncdaemon/master.py +++ b/geo-replication/syncdaemon/master.py @@ -1390,9 +1390,8 @@ class GMasterXsyncMixin(GMasterChangelogMixin): self.sync_done(self.stimes, False) self.stimes = [] if stat.S_ISDIR(mo): - self.write_entry_change("E", [gfid, 'MKDIR', str(mo), str( - st.st_uid), str(st.st_gid), escape(os.path.join(pargfid, - bname))]) + self.write_entry_change("E", [gfid, 'MKDIR', str(mo), + str(0), str(0), escape(os.path.join(pargfid, bname))]) self.write_entry_change("M", [gfid, "SETATTR", str(st.st_uid), str(st.st_gid), str(st.st_mode), str(st.st_atime), @@ -1422,8 +1421,7 @@ class GMasterXsyncMixin(GMasterChangelogMixin): if nlink == 1: self.write_entry_change("E", [gfid, 'MKNOD', str(mo), - str(st.st_uid), - str(st.st_gid), + str(0), str(0), escape(os.path.join( pargfid, bname))]) else: |