From 3d5153c1063e833000c6de76248e086c38585b70 Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Fri, 5 Jun 2020 12:19:04 +0200 Subject: [PATCH] clear log keys in a separate thread --- inventory_provider/tasks/monitor.py | 6 +++++- inventory_provider/tasks/worker.py | 14 +++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/inventory_provider/tasks/monitor.py b/inventory_provider/tasks/monitor.py index f17869d3..7d7a9951 100644 --- a/inventory_provider/tasks/monitor.py +++ b/inventory_provider/tasks/monitor.py @@ -114,14 +114,18 @@ def run(): t['thread'].join() -def clear_joblog(r): +def clear_joblog(r, keys_read_event=None): """ :param r: connection to a redis database + :param keys_read_event: optional event to signal after all keys are read :return: """ rp = r.pipeline() for key in r.scan_iter('joblog:*'): rp.delete(key) + if keys_read_event: + assert isinstance(keys_read_event, threading.Event) # sanity + keys_read_event.set() rp.execute() diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index b3c0d748..c69c9642 100644 --- a/inventory_provider/tasks/worker.py +++ b/inventory_provider/tasks/worker.py @@ -1,6 +1,7 @@ import json import logging import os +import threading import time from redis.exceptions import RedisError @@ -554,7 +555,18 @@ def launch_refresh_cache_all(config): _erase_next_db(config) update_latch_status(config, pending=True) - monitor.clear_joblog(get_current_redis(config)) + # call monitor.clear_joblog in a thread, since + # deletion might be slow and can be done in parallel + def _clear_log_proc(wait_event): + monitor.clear_joblog(get_current_redis(config), wait_event) + + keys_captured_event = threading.Event() + threading.Thread( + target=_clear_log_proc, + args=[keys_captured_event]).start() + if not keys_captured_event.wait(timeout=60.0): + # wait a reasonable time + logging.error('timed out waiting for log keys to be read') # first batch of subtasks: refresh cached opsdb data subtasks = [ -- GitLab