[Pdns-users] pdns recursor - unthreaded vs threaded operation

Daniel L. Miller dmiller at amfes.com
Thu Jan 5 03:31:26 UTC 2012


On 12/29/2011 12:55 AM, Fabio Sangiovanni wrote:
> Hello list,
>
> I'm a newbie of pdns and I'm setting up a recursor-only installation as local dns cache for a high load smtp server.
> I'm using the lua scripting feature as a way to track down MX queries. In particular, the preresolve() function relies on luasql to execute queries on a (local) mysql database.
> This is my problem: if I enable more than one thread in recursor.conf I get the lua script loaded more than once, and ultimately concurrent queries to the db that could mess up the stored data, depending on the execution order of select and update queries by the various threads.
> I'd like to avoid circumventing these race conditions through complicated lua coding, and instead I'd prefer to keep things as simple as possible and limit the number of pdns threads to just 1 ("threads=1" setting in recursor.conf).
> I know that the lua feature is not meant to be used this way, but this could really help me solving a big problem :)
>
Since I'm just hosting a tiny little site I'm probably missing something 
- but can you please explain what you're trying to accomplish?  If 
you're just logging MX queries as they occur - what's the race condition 
that you see occurring?  Are you totaling requests by client IP - in 
which case I don't see a concern, or by the target address?  If by the 
target address, could you not use a stored procedure that basically 
executes "lock table ; update bigtable set queries = queries + 1 where 
mxip = parameter ; unlock table" (I don't use mysql so I don't know 
mysql-specific syntax - nor how that would impact performance).

Alternatively, have your lua script only add records to a temporary 
table - so there would be potentially multiple entries for a given 
target address.  Then have a cron job periodically grab the temporary 
table, add the values to the primary totals table, and delete the 
temporary values.

-- 
Daniel



More information about the Pdns-users mailing list