summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKotresh HR <khiremat@redhat.com>2015-09-21 14:51:13 +0530
committerVenky Shankar <vshankar@redhat.com>2015-11-27 03:54:51 -0800
commit8b3061887319d38eb3644e5c4ec5a2b226de6723 (patch)
tree72a10196dfaea1b6724c10df291553fcc56d1cc3
parent7de27f1445ffa7b60a5d8092681267531f50395e (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>
-rw-r--r--geo-replication/syncdaemon/master.py8
-rw-r--r--tests/geo-rep.rc10
-rw-r--r--tests/geo-rep/georep-basic-dr-rsync.t27
-rw-r--r--tests/geo-rep/georep-basic-dr-tarssh.t23
4 files changed, 41 insertions, 27 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:
diff --git a/tests/geo-rep.rc b/tests/geo-rep.rc
index 208069c6918..e811f9a5b76 100644
--- a/tests/geo-rep.rc
+++ b/tests/geo-rep.rc
@@ -58,6 +58,16 @@ function create_data()
# Rename - Dir
mv ${master_mnt}/${prefix}_d3 ${master_mnt}/${prefix}_d4
+
+ # chown
+ touch ${master_mnt}/${prefix}_chown_f1
+ chown 1000:1000 ${master_mnt}/${prefix}_chown_f1
+}
+
+function chown_file_ok()
+{
+ local file_owner=$(stat --format "%u:%g" "$1" 2>/dev/null)
+ if test "X$file_owner" != "X1000:1000"; then return 1;fi
}
function regular_file_ok()
diff --git a/tests/geo-rep/georep-basic-dr-rsync.t b/tests/geo-rep/georep-basic-dr-rsync.t
index bcb31d90c9e..220b4713c69 100644
--- a/tests/geo-rep/georep-basic-dr-rsync.t
+++ b/tests/geo-rep/georep-basic-dr-rsync.t
@@ -75,11 +75,12 @@ TEST hardlink_file_ok ${slave_mnt}/hybrid_f1 ${slave_mnt}/hybrid_hl1 #25
TEST unlink_ok ${slave_mnt}/hybrid_f2
TEST unlink_ok ${slave_mnt}/hybrid_d2
TEST data_ok ${slave_mnt}/hybrid_f1 "HelloWorld!"
+TEST chown_file_ok ${slave_mnt}/hybrid_chown_f1
#Check History Crawl.
-TEST $GEOREP_CLI $master $slave stop
-TEST create_data "history" #30
+TEST $GEOREP_CLI $master $slave stop #30
+TEST create_data "history"
TEST $GEOREP_CLI $master $slave start
sleep 10
EXPECT 2 check_status_num_rows "Active"
@@ -89,37 +90,39 @@ EXPECT 2 check_status_num_rows "Passive"
#data_tests "history"
sleep 15
-TEST regular_file_ok ${slave_mnt}/history_f1
-TEST directory_ok ${slave_mnt}/history_d1 #35
+TEST regular_file_ok ${slave_mnt}/history_f1 #35
+TEST directory_ok ${slave_mnt}/history_d1
TEST rename_ok ${slave_mnt}/history_f3 ${slave_mnt}/history_f4
TEST rename_ok ${slave_mnt}/history_d3 ${slave_mnt}/history_d4
TEST symlink_ok history_f1 ${slave_mnt}/history_sl1
-TEST hardlink_file_ok ${slave_mnt}/history_f1 ${slave_mnt}/history_hl1
-TEST unlink_ok ${slave_mnt}/history_f2 #40
+TEST hardlink_file_ok ${slave_mnt}/history_f1 ${slave_mnt}/history_hl1 #40
+TEST unlink_ok ${slave_mnt}/history_f2
TEST unlink_ok ${slave_mnt}/history_d2
TEST data_ok ${slave_mnt}/history_f1 "HelloWorld!"
+TEST chown_file_ok ${slave_mnt}/history_chown_f1
#Check History Crawl.
-TEST create_data "changelog"
+TEST create_data "changelog" #45
sleep 15
TEST check_status "Changelog Crawl"
#data_tests "changelog"
sleep 15
-TEST regular_file_ok ${slave_mnt}/changelog_f1 #45
+TEST regular_file_ok ${slave_mnt}/changelog_f1
TEST directory_ok ${slave_mnt}/changelog_d1
TEST rename_ok ${slave_mnt}/changelog_f3 ${slave_mnt}/changelog_f4
-TEST rename_ok ${slave_mnt}/changelog_d3 ${slave_mnt}/changelog_d4
+TEST rename_ok ${slave_mnt}/changelog_d3 ${slave_mnt}/changelog_d4 #50
TEST symlink_ok changelog_f1 ${slave_mnt}/changelog_sl1
-TEST hardlink_file_ok ${slave_mnt}/changelog_f1 ${slave_mnt}/changelog_hl1 #50
+TEST hardlink_file_ok ${slave_mnt}/changelog_f1 ${slave_mnt}/changelog_hl1
TEST unlink_ok ${slave_mnt}/changelog_f2
TEST unlink_ok ${slave_mnt}/changelog_d2
-TEST data_ok ${slave_mnt}/changelog_f1 "HelloWorld!"
+TEST data_ok ${slave_mnt}/changelog_f1 "HelloWorld!" #55
+TEST chown_file_ok ${slave_mnt}/changelog_chown_f1
#Stop Geo-rep
TEST $GEOREP_CLI $master $slave stop
#Delete Geo-rep
-TEST $GEOREP_CLI $master $slave delete #55
+TEST $GEOREP_CLI $master $slave delete
cleanup;
diff --git a/tests/geo-rep/georep-basic-dr-tarssh.t b/tests/geo-rep/georep-basic-dr-tarssh.t
index 2985b2e5de0..cf661d08782 100644
--- a/tests/geo-rep/georep-basic-dr-tarssh.t
+++ b/tests/geo-rep/georep-basic-dr-tarssh.t
@@ -80,46 +80,49 @@ TEST hardlink_file_ok ${slave_mnt}/hybrid_f1 ${slave_mnt}/hybrid_hl1
TEST unlink_ok ${slave_mnt}/hybrid_f2
TEST unlink_ok ${slave_mnt}/hybrid_d2
TEST data_ok ${slave_mnt}/hybrid_f1 "HelloWorld!"
+TEST chown_file_ok ${slave_mnt}/hybrid_chown_f1 #30
#Check History Crawl.
-TEST $GEOREP_CLI $master $slave stop #30
+TEST $GEOREP_CLI $master $slave stop
TEST create_data "history"
TEST $GEOREP_CLI $master $slave start
sleep 10
EXPECT 2 check_status_num_rows "Active"
-EXPECT 2 check_status_num_rows "Passive"
+EXPECT 2 check_status_num_rows "Passive" #35
#data_tests "history"
sleep 15
-TEST regular_file_ok ${slave_mnt}/history_f1 #35
+TEST regular_file_ok ${slave_mnt}/history_f1
TEST directory_ok ${slave_mnt}/history_d1
TEST rename_ok ${slave_mnt}/history_f3 ${slave_mnt}/history_f4
TEST rename_ok ${slave_mnt}/history_d3 ${slave_mnt}/history_d4
-TEST symlink_ok history_f1 ${slave_mnt}/history_sl1
-TEST hardlink_file_ok ${slave_mnt}/history_f1 ${slave_mnt}/history_hl1 #40
+TEST symlink_ok history_f1 ${slave_mnt}/history_sl1 #40
+TEST hardlink_file_ok ${slave_mnt}/history_f1 ${slave_mnt}/history_hl1
TEST unlink_ok ${slave_mnt}/history_f2
TEST unlink_ok ${slave_mnt}/history_d2
TEST data_ok ${slave_mnt}/history_f1 "HelloWorld!"
+TEST chown_file_ok ${slave_mnt}/history_chown_f1 #45
#Check History Crawl.
TEST create_data "changelog"
sleep 15
-TEST check_status "Changelog Crawl" #45
+TEST check_status "Changelog Crawl"
#data_tests "changelog"
sleep 15
TEST regular_file_ok ${slave_mnt}/changelog_f1
TEST directory_ok ${slave_mnt}/changelog_d1
-TEST rename_ok ${slave_mnt}/changelog_f3 ${slave_mnt}/changelog_f4
+TEST rename_ok ${slave_mnt}/changelog_f3 ${slave_mnt}/changelog_f4 #50
TEST rename_ok ${slave_mnt}/changelog_d3 ${slave_mnt}/changelog_d4
-TEST symlink_ok changelog_f1 ${slave_mnt}/changelog_sl1 #50
+TEST symlink_ok changelog_f1 ${slave_mnt}/changelog_sl1
TEST hardlink_file_ok ${slave_mnt}/changelog_f1 ${slave_mnt}/changelog_hl1
TEST unlink_ok ${slave_mnt}/changelog_f2
-TEST unlink_ok ${slave_mnt}/changelog_d2
+TEST unlink_ok ${slave_mnt}/changelog_d2 #55
TEST data_ok ${slave_mnt}/changelog_f1 "HelloWorld!"
+TEST chown_file_ok ${slave_mnt}/changelog_chown_f1
#Stop Geo-rep
-TEST $GEOREP_CLI $master $slave stop #55
+TEST $GEOREP_CLI $master $slave stop
#Delete Geo-rep
TEST $GEOREP_CLI $master $slave delete