diff options
-rw-r--r-- | geo-replication/syncdaemon/resource.py | 23 | ||||
-rw-r--r-- | tests/00-geo-rep/georep-basic-dr-rsync.t | 1 | ||||
-rw-r--r-- | tests/geo-rep.rc | 12 |
3 files changed, 27 insertions, 9 deletions
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index a2d0b16899a..c290d86880e 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -625,15 +625,20 @@ class Server(object): # exist with different gfid. if not matching_disk_gfid(gfid, entry): if e['stat'] and not stat.S_ISDIR(e['stat']['mode']): - if stat.S_ISLNK(e['stat']['mode']) and \ - e['link'] is not None: - st1 = lstat(en) - if isinstance(st1, int): - (pg, bname) = entry2pb(en) - blob = entry_pack_symlink(cls, gfid, bname, - e['link'], e['stat']) - elif not matching_disk_gfid(gfid, en): - collect_failure(e, EEXIST, uid, gid, True) + if stat.S_ISLNK(e['stat']['mode']): + # src is not present, so don't sync symlink as + # we don't know target. It's ok to ignore. If + # it's unliked, it's fine. If it's renamed to + # something else, it will be synced then. + if e['link'] is not None: + st1 = lstat(en) + if isinstance(st1, int): + (pg, bname) = entry2pb(en) + blob = entry_pack_symlink(cls, gfid, bname, + e['link'], + e['stat']) + elif not matching_disk_gfid(gfid, en): + collect_failure(e, EEXIST, uid, gid, True) else: slink = os.path.join(pfx, gfid) st = lstat(slink) diff --git a/tests/00-geo-rep/georep-basic-dr-rsync.t b/tests/00-geo-rep/georep-basic-dr-rsync.t index 062ca91760c..919c9d924ad 100644 --- a/tests/00-geo-rep/georep-basic-dr-rsync.t +++ b/tests/00-geo-rep/georep-basic-dr-rsync.t @@ -113,6 +113,7 @@ EXPECT_WITHIN $GEO_REP_TIMEOUT 0 chown_file_ok ${slave_mnt}/hybrid_chown_f1 #Check History Crawl. TEST $GEOREP_CLI $master $slave stop TEST create_data "history" +TEST create_rename_symlink_case TEST $GEOREP_CLI $master $slave start EXPECT_WITHIN $GEO_REP_TIMEOUT 2 check_status_num_rows "Active" EXPECT_WITHIN $GEO_REP_TIMEOUT 2 check_status_num_rows "Passive" diff --git a/tests/geo-rep.rc b/tests/geo-rep.rc index 396b4c4a3e5..d72312956b3 100644 --- a/tests/geo-rep.rc +++ b/tests/geo-rep.rc @@ -19,6 +19,18 @@ function check_common_secret_file() echo $? } +function create_rename_symlink_case() +{ + mkdir ${mastermnt}/MUL_REN_SYMLINK + cd ${mastermnt}/MUL_REN_SYMLINK + mkdir sym_dir1 + ln -s "sym_dir1" sym1 + mv sym1 sym2 + mv sym2 sym3 + mv sym3 sym4 + cd - +} + function create_data() { prefix=$1 |