Commit a700dd4d authored by Vitaly Lipatov's avatar Vitaly Lipatov

gateway: retry stream commands idempotently

parent 39eecf67
...@@ -140,7 +140,7 @@ class AutoBanManager: ...@@ -140,7 +140,7 @@ class AutoBanManager:
reset_counter: Сбросить счётчик нарушений reset_counter: Сбросить счётчик нарушений
""" """
if not self.enabled: if not self.enabled:
return return True
try: try:
# Удаляем из расписания и постоянных # Удаляем из расписания и постоянных
...@@ -151,9 +151,11 @@ class AutoBanManager: ...@@ -151,9 +151,11 @@ class AutoBanManager:
if reset_counter: if reset_counter:
pipeline.delete(f"{self.META_PREFIX}{ip}") pipeline.delete(f"{self.META_PREFIX}{ip}")
pipeline.execute() pipeline.execute()
return True
except Exception as e: except Exception as e:
log.error(f"AutoBanManager.on_unban error: {e}") log.error(f"AutoBanManager.on_unban error: {e}")
return False
def get_expired_bans(self): def get_expired_bans(self):
""" """
......
...@@ -574,8 +574,9 @@ def apply_unban(ip): ...@@ -574,8 +574,9 @@ def apply_unban(ip):
return False return False
queue_conntrack_cleanup(ip) queue_conntrack_cleanup(ip)
if auto_mgr.enabled: if auto_mgr.enabled and not auto_mgr.on_unban(ip):
auto_mgr.on_unban(ip) log_redis_error("Unable to update AutoBan state for unban " + ip)
return False
return True return True
...@@ -632,9 +633,9 @@ def process_message_inner(message): ...@@ -632,9 +633,9 @@ def process_message_inner(message):
log.flush() log.flush()
return True return True
if isinstance(ipo, ipaddress.IPv6Address): if isinstance(ipo, ipaddress.IPv6Address):
ban = ['ipset', '-A', ipset_eterban_1_ipv6, ip] ban = ['ipset', 'add', ipset_eterban_1_ipv6, ip, '-exist']
else: else:
ban = ['ipset', '-A', ipset_eterban_1, ip] ban = ['ipset', 'add', ipset_eterban_1, ip, '-exist']
print (ban) print (ban)
print (message) print (message)
if run_command(ban) != 0: if run_command(ban) != 0:
...@@ -669,7 +670,9 @@ def process_message_inner(message): ...@@ -669,7 +670,9 @@ def process_message_inner(message):
source = match.group(2).strip() source = match.group(2).strip()
reason = match.group(3) if match.group(3) else 'auto' reason = match.group(3) if match.group(3) else 'auto'
meta = auto_mgr.on_ban(ip, source=source, reason=reason) meta = auto_mgr.on_ban(ip, source=source, reason=reason)
if meta: if not meta:
log_redis_error("Unable to persist AutoBan metadata for " + ip)
return False
ban_duration = meta.get('unban_time', 0) - int(time.time()) ban_duration = meta.get('unban_time', 0) - int(time.time())
offense = meta.get('offense_count', 1) offense = meta.get('offense_count', 1)
if ban_duration > 0: if ban_duration > 0:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment