Fixing up host pattern caching to avoid bugs

* Always cache and return unique list objects, so that if the list
  is changed later it does not impact the cached results
* Take additional parameters and the type of the pattern into account
  when building the hash string
pull/13106/merge
James Cammarata 9 years ago
parent e8f83dcba3
commit c753ae6e22

@ -166,9 +166,14 @@ class Inventory(object):
"""
# Check if pattern already computed
pattern_hash = str(pattern)
if isinstance(pattern, list):
pattern_hash = u":".join(pattern)
else:
pattern_hash = pattern
pattern_hash += u":%s" % ignore_limits_and_restrictions
if pattern_hash in HOSTS_PATTERNS_CACHE:
return HOSTS_PATTERNS_CACHE[pattern_hash]
return HOSTS_PATTERNS_CACHE[pattern_hash][:]
patterns = Inventory.split_host_pattern(pattern)
hosts = self._evaluate_patterns(patterns)
@ -184,7 +189,7 @@ class Inventory(object):
if self._restriction is not None:
hosts = [ h for h in hosts if h in self._restriction ]
HOSTS_PATTERNS_CACHE[pattern_hash] = hosts
HOSTS_PATTERNS_CACHE[pattern_hash] = hosts[:]
return hosts
@classmethod

Loading…
Cancel
Save