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. Change-Id: I93e554bf9342397a7660503f5128e9709f8a0cd8 BUG: 1265148 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>
This commit is contained in:
parent
a37eb17911
commit
dc8d65381b
@ -1401,9 +1401,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),
|
||||
@ -1433,8 +1432,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:
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user