From d0a3b4307e40b70d73faf4baed9fa0c930682894 Mon Sep 17 00:00:00 2001 From: Aravinda VK Date: Fri, 8 Aug 2014 15:06:11 +0530 Subject: geo-rep: Fixing issue with xsync upper limit While identifying the file/dir to sync, xtime of the file was compared with xsync_upper_limit as `xtime < xsync_upper_limit` After the sync, xtime of parent directory is updated as stime. With the upper limit condition, stime is updated as MIN(xtime_parent, xsync_upper_limit) With this files will get missed if `xtime_of_file == xsync_upper_limit` With this patch xtime_of_file is compared as xtime_of_file <= xsync_upper_limit BUG: 1128093 Change-Id: I5022ce67ba503ed4621531a649a16fc06b2229d9 Signed-off-by: Aravinda VK Reviewed-on: http://review.gluster.org/8439 Tested-by: Gluster Build System Reviewed-by: Kotresh HR Reviewed-by: Vijay Bellur --- geo-replication/syncdaemon/resource.py | 36 +++++++++++++++------------------- 1 file changed, 16 insertions(+), 20 deletions(-) (limited to 'geo-replication/syncdaemon/resource.py') diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index 09310c1f1aa..2a887daab15 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -1293,22 +1293,27 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote): try: workdir = g2.setup_working_dir() - # register with the changelog library - # 9 == log level (DEBUG) - # 5 == connection retries - changelog_agent.register(gconf.local_path, - workdir, gconf.changelog_log_file, - g2.CHANGELOG_LOG_LEVEL, - g2.CHANGELOG_CONN_RETRIES) + # Register only when change_detector is not set to + # xsync, else agent will generate changelog files + # in .processing directory of working dir + if gconf.change_detector != 'xsync': + # register with the changelog library + # 9 == log level (DEBUG) + # 5 == connection retries + changelog_agent.register(gconf.local_path, + workdir, gconf.changelog_log_file, + g2.CHANGELOG_LOG_LEVEL, + g2.CHANGELOG_CONN_RETRIES) + register_time = int(time.time()) g2.register(register_time, changelog_agent) g3.register(register_time, changelog_agent) except ChangelogException: changelog_register_failed = True - register_time = int(time.time()) + register_time = None logging.info("Changelog register failed, fallback to xsync") - g1.register(register_time) + g1.register() logging.info("Register time: %s" % register_time) # oneshot: Try to use changelog history api, if not # available switch to FS crawl @@ -1328,17 +1333,8 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote): logging.info('Partial history available, using xsync crawl' ' after consuming history ' 'till %s' % str(e)) - g1.crawlwrap(oneshot=True, no_stime_update=True) - - # Reset xsync upper limit. g2, g3 are changelog and history - # instances, but if change_detector is set to xsync then - # g1, g2, g3 will be xsync instances. - g1.xsync_upper_limit = None - if getattr(g2, "xsync_upper_limit", None) is not None: - g2.xsync_upper_limit = None - - if getattr(g3, "xsync_upper_limit", None) is not None: - g3.xsync_upper_limit = None + g1.crawlwrap(oneshot=True, no_stime_update=True, + register_time=register_time) # crawl loop: Try changelog crawl, if failed # switch to FS crawl -- cgit