From 63ff54cdced349c7beb4aa78a35b9d027310e757 Mon Sep 17 00:00:00 2001 From: Aravinda VK Date: Tue, 17 Mar 2015 12:18:30 +0530 Subject: geo-rep: Do not fail-back to xsync if Changelog is failed Unless change_detector is set to xsync, do not fallback to xsync, except during Initial Sync or Partial History. When a brick goes down, Changelog exception is raised due to which geo-rep fallback to xsync. Even after brick comes back geo-rep will not consume Changelog. BUG: 1217928 Change-Id: I1f8ea26ac7735f6ee09b3b143ee3eb66bfc9fc37 Signed-off-by: Aravinda VK Reviewed-on: http://review.gluster.org/9758 Tested-by: Gluster Build System Reviewed-by: Saravanakumar Arumugam Reviewed-by: Kotresh HR Reviewed-on: http://review.gluster.org/10496 --- geo-replication/syncdaemon/resource.py | 41 +++++++++++++--------------------- 1 file changed, 16 insertions(+), 25 deletions(-) (limited to 'geo-replication/syncdaemon/resource.py') diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index 8bb1619b532..fe86044d546 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -1339,10 +1339,9 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote): 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 = None - logging.info("Changelog register failed, fallback to xsync") + except ChangelogException as e: + logging.error("Changelog register failed, %s" % e) + sys.exit(1) g1.register() logging.info("Register time: %s" % register_time) @@ -1351,31 +1350,23 @@ class GLUSTER(AbstractUrl, SlaveLocal, SlaveRemote): # Note: if config.change_detector is xsync then # it will not use changelog history api try: - if not changelog_register_failed: - g3.crawlwrap(oneshot=True) - else: - g1.crawlwrap(oneshot=True) - except (ChangelogException, PartialHistoryAvailable, - NoPurgeTimeAvailable) as e: - if isinstance(e, ChangelogException): - logging.info('Changelog history crawl failed, fallback ' - 'to xsync: %s - %s' % (e.errno, e.strerror)) - elif isinstance(e, PartialHistoryAvailable): - logging.info('Partial history available, using xsync crawl' - ' after consuming history ' - 'till %s' % str(e)) + g3.crawlwrap(oneshot=True) + except PartialHistoryAvailable as e: + logging.info('Partial history available, using xsync crawl' + ' after consuming history till %s' % str(e)) + g1.crawlwrap(oneshot=True, register_time=register_time) + except NoPurgeTimeAvailable: + logging.info('No stime available, using xsync crawl') g1.crawlwrap(oneshot=True, register_time=register_time) + except ChangelogException as e: + logging.error("Changelog History Crawl failed, %s" % e) + sys.exit(1) - # crawl loop: Try changelog crawl, if failed - # switch to FS crawl try: - if not changelog_register_failed: - g2.crawlwrap() - else: - g1.crawlwrap() + g2.crawlwrap() except ChangelogException as e: - logging.info('Changelog crawl failed, fallback to xsync') - g1.crawlwrap() + logging.error("Changelog crawl failed, %s" % e) + sys.exit(1) else: sup(self, *args) -- cgit