Only delete key from redis in-memory cache if present (#35126)

Fixes #35120 : the redis cache plugin keeps key/value
entries in an in-memory cache to avoid hitting the
redis database each time.

The problem is that a cache entry is only set when
a value is get or set but it is always deleted when
trying to delete a value.

When the --flush-cache ansible-playbook option is used,
the redis cache plugin is first asked to remove every
entry corresponding to every hostname present in the inventory.
As no value as been set/get so far, it then tries to delete
an unexisting value from the cache and hence crashes with
a KeyError exception.
This commit is contained in:
Yann Rouillard 2018-10-03 23:06:44 +08:00 committed by Brian Coca
parent 1589424c3e
commit ee3dfef016

View file

@ -116,7 +116,8 @@ class CacheModule(BaseCacheModule):
return (self._db.zrank(self._keys_set, key) is not None) return (self._db.zrank(self._keys_set, key) is not None)
def delete(self, key): def delete(self, key):
del self._cache[key] if key in self._cache:
del self._cache[key]
self._db.delete(self._make_key(key)) self._db.delete(self._make_key(key))
self._db.zrem(self._keys_set, key) self._db.zrem(self._keys_set, key)