From 556fb7e453a338738638cb02d1d823f1ac0fe974 Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Thu, 3 Oct 2019 15:14:01 +0200 Subject: [PATCH] optimization - avoid expensive deletes during refresh --- inventory_provider/tasks/worker.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index 1ac375df..35ad30ce 100644 --- a/inventory_provider/tasks/worker.py +++ b/inventory_provider/tasks/worker.py @@ -277,15 +277,18 @@ def _refresh_peers(hostname, key_base, peers): logger.debug( 'removing cached %s for %r' % (key_base, hostname)) r = get_next_redis(InventoryTask.config) - for k in r.scan_iter(key_base + ':*'): - # potential race condition: another proc could have - # delete this element between the time we read the - # keys and the next statement ... check for None below - value = r.get(k.decode('utf-8')) - if value: - value = json.loads(value.decode('utf-8')) - if value['router'] == hostname: - r.delete(k) + # WARNING (optimization): this is an expensive query if + # the redis connection is slow, and we currently only + # call this method during a full refresh + # for k in r.scan_iter(key_base + ':*'): + # # potential race condition: another proc could have + # # delete this element between the time we read the + # # keys and the next statement ... check for None below + # value = r.get(k.decode('utf-8')) + # if value: + # value = json.loads(value.decode('utf-8')) + # if value['router'] == hostname: + # r.delete(k) rp = r.pipeline() for peer in peers: -- GitLab