On 05/23/2013 09:52 AM, Chris Ross wrote:

> So, there isn't a variant of fastCheck that simply _will_
> call the slow acl mechanism, without having to deal with the async mechanisms
> apparently in play with nonBlockingCheck()?

That would be technically impossible without a lot of code changes and a
bad idea even if you do not mind code changes.

Consider a DNS lookup as an example of a slow ACL. A DNS lookup may take
a few seconds or, in case of packet loss, a minute or two. Current code
implements lookup in a non-blocking way: a DNS query is sent and Squid
continues to serve other traffic until it notices a response.

Even if you rewrite the DNS code to block and wait for that response (so
that a blocking fastCheck() call works with DNS queries), do you really
want Squid to wait for a few minutes in fastCheck() while not serving
any other transactions? No, you do not.

That is why there are two kinds of ACLs and two kinds of ACL checks.
Note that if Squid was allocating a dedicated thread for every
transaction, that would not have been necessary -- the thread could
block for a few minutes while other threads were running. This
complexity comes from the need to combine "long" queries such as DNS
lookups with handling of thousands of transactions per second within one
monolithic process.


HTH,

Alex.

Reply via email to