On Mon, 7 Mar 2005, Jeremy Harris wrote:
> Note that the cache seems to get invalidated due to
> a database connection drop between routing and transport,
Correct. They run in different processes, and several transports may run
simultaneously. I did not want to get involved in dealing with one
connection (or open file for some lookups) being used by multiple
processes.
> Wishlists:
>
> - tell me I'm wrong!
Sorry, no can do. The "right" way to improve the situation is to
implement what has been suggested several times, namely a daemon that
"front ends" a number of databases and caches lookup values for multiple
processes.
> - non-data-returning lookups to be ignored by the
> cache, rather than causing a full invalidate
But that might mean that data in the cache (the data you've just updated
with your INSERT) is incorrect.
> - Explicit, dynamically-created variables settable
> and usable in routers and transports.
> $address_data isn't quite enough, $acl_[cm][0-9]
> get carried over from their final ACL values
> and there's no way to change them.
> In fact, nameable variables in ACLs too. I'm
> running out with a mere twenty :)
I think if we are to go down that road, there should be a radical
re-design of how it all works. People seem to want routing to be more of
a programming language than a set of semi-static values. Or perhaps
something like the queryprogram router could be implemented, using some
kind of interpreted language that doesn't require a separate process to
run in.... hmm .... we sort of have that already if you run a filter
file for each address .... but without all the power of the routers. But
one shouldn't invent yet more programming languages. A queryperl router?
Anyway, this all sounds like "Exim 5" to me, and I'm planning to retire
before then. :-)
--
Philip Hazel University of Cambridge Computing Service,
ph10@??? Cambridge, England. Phone: +44 1223 334714.
Get the Exim 4 book: http://www.uit.co.uk/exim-book