From 7563d97be456c8921fdcc6a52605d4344431b208 Mon Sep 17 00:00:00 2001 From: Kenny Lee Sin Cheong Date: Fri, 7 Sep 2018 09:55:09 -0400 Subject: [PATCH 1/4] Fix: Should not break from ipresolver thread --- util/ipresolver/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/ipresolver/__init__.py b/util/ipresolver/__init__.py index 97cb3acec..ce71f8ac3 100644 --- a/util/ipresolver/__init__.py +++ b/util/ipresolver/__init__.py @@ -210,7 +210,7 @@ class _UpdateIPRange(Thread): except: logger.exception('Failed trying to update aws ip range') time.sleep(_FAILED_UPDATE_RETRY_SECS) - break + continue sync_token = aws_ip_range_json['syncToken'] all_amazon, regions = IPResolver._parse_amazon_ranges(aws_ip_range_json) From 7743cc44fa62430b8b2e3f1efcef427d2ce922fb Mon Sep 17 00:00:00 2001 From: Kenny Lee Sin Cheong Date: Fri, 7 Sep 2018 13:26:49 -0400 Subject: [PATCH 2/4] Handle exceptions when trying to start resolver thread --- util/ipresolver/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/util/ipresolver/__init__.py b/util/ipresolver/__init__.py index ce71f8ac3..c55ca2d11 100644 --- a/util/ipresolver/__init__.py +++ b/util/ipresolver/__init__.py @@ -130,7 +130,10 @@ class IPResolver(IPResolverInterface): def _get_location_function(self): if not self.app.config.get('TESTING', False) and not self._worker.is_alive(): - self._worker.start() + try: + self._worker.start() + except: + logger.exception('Got exception try to start ip resolver thread') try: cache = CACHE sync_token = cache.get('sync_token', None) From 105a7c0ea67a935274e0565aeb93833287757446 Mon Sep 17 00:00:00 2001 From: Kenny Lee Sin Cheong Date: Fri, 7 Sep 2018 13:40:20 -0400 Subject: [PATCH 3/4] Worker started flag --- util/ipresolver/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/util/ipresolver/__init__.py b/util/ipresolver/__init__.py index c55ca2d11..77d97a9cb 100644 --- a/util/ipresolver/__init__.py +++ b/util/ipresolver/__init__.py @@ -84,6 +84,7 @@ class IPResolver(IPResolverInterface): self.app = app self.geoip_db = geoip2.database.Reader('util/ipresolver/GeoLite2-Country.mmdb') self._worker = _UpdateIPRange(_UPDATE_INTERVAL) + self._worker_started = False @ttl_cache(maxsize=100, ttl=600) def is_ip_possible_threat(self, ip_address): @@ -129,11 +130,14 @@ class IPResolver(IPResolverInterface): return location_function(ip_address) def _get_location_function(self): - if not self.app.config.get('TESTING', False) and not self._worker.is_alive(): + if not self.app.config.get('TESTING', False) and not self._worker.is_alive() and \ + not self._worker_started: try: self._worker.start() + self._worker_started = True except: logger.exception('Got exception try to start ip resolver thread') + try: cache = CACHE sync_token = cache.get('sync_token', None) From 4834c281cb9671bda85a386f81495cd321da9032 Mon Sep 17 00:00:00 2001 From: Kenny Lee Sin Cheong Date: Fri, 7 Sep 2018 13:50:56 -0400 Subject: [PATCH 4/4] nit: styling --- util/ipresolver/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/ipresolver/__init__.py b/util/ipresolver/__init__.py index 77d97a9cb..40a2b109d 100644 --- a/util/ipresolver/__init__.py +++ b/util/ipresolver/__init__.py @@ -130,8 +130,8 @@ class IPResolver(IPResolverInterface): return location_function(ip_address) def _get_location_function(self): - if not self.app.config.get('TESTING', False) and not self._worker.is_alive() and \ - not self._worker_started: + if (not self.app.config.get('TESTING', False) and not self._worker_started and + not self._worker.is_alive()): try: self._worker.start() self._worker_started = True