Small optimization to the external ACL caching behaviour. With bigger than
itself effects.


Admin configure ttl=0 and/or negative_ttl=0 to prevent Squid storing the
ACL lookup results. The problem is that results still get cached and
re-used for the grace= period. IMO this grace period should only occur for
results which are allowed to be re-used.

The attached patch changes the external ACL caching slightly to actually
not store the results when their matching TTL is zero.


Side effects of this (on systems with ttl <= 0 or negative_ttl <= 0) are:

 less memory usage

 expected non-caching works

 FAST category ACL tests not able to be used on non-cached results

 less processing cycles on result hash insertion
  * traded for potential cycles on hash lookups

Amos
=== modified file 'src/external_acl.cc'
--- src/external_acl.cc	2010-12-14 14:01:14 +0000
+++ src/external_acl.cc	2011-01-24 23:19:34 +0000
@@ -1113,6 +1113,11 @@
 static external_acl_entry *
 external_acl_cache_add(external_acl * def, const char *key, ExternalACLEntryData const & data)
 {
+    // do not bother caching this result if TTL is going to expire it immediately
+    if ((def->ttl <= 0 && data.result == 1) || (def->negative_ttl <= 0 && data.result != 1)) {
+        return NULL;
+    }
+
     ExternalACLEntry *entry = static_cast<ExternalACLEntry *>(hash_lookup(def->cache, key));
     debugs(82, 2, "external_acl_cache_add: Adding '" << key << "' = " << data.result);
 

Reply via email to