On 26/5/2011 3:44 μμ, fredrik danerklint wrote:

Nick,

To answer all of your questions, please take a look at the source file
'communicator.cc'. At the end of that file there is a function called
"void CommunicatorClass::mainloop(void)" that checks slave and master every
other 'slave-cycle-interval' seconds (parameter taken from the pdns.conf
file). I assume that this function is running in a seperate thread.

This is how PowerDNS knows when to send a update to other nameservers.


Actually, I am afraid things do not work like that. The 'slave-cycle-interval' parameter is only used by slaves and only when they (the slaves) are in undetermined state, i.e. at launch. "Once a domain has been checked, it will not be checked before its SOA refresh timer has expired."

What I was asking is how the *Master* knows that the serial in the SOA of one of its zones has changed. If you have not implemented some solution, Master will never know that a serial (in its own backend!) has been changed, unless you manually let it know. The PowerDNS documentation states: "Some backends may be able to detect zone changes, others may choose to let the operator indicate which zones have changed and which haven’t. Consult the documentation for your backend to see how it processes changes in zones." The usual logical solution is the use of triggers (if your backend supports them).

Of course, for the Master it doesn't really matter to know that a serial has changed, because it directly refreshes its data (which is retrieved from the database). [ I don't know what happens with cached data, if they are used - LDAP backend doesn't use cached data; the LDAP server takes care of that. ] But the Master will not be able to Notify slaves... They will wait until their refresh interval (specified in the SOA) expires and only then they will ask the Master if serial has changed.

So, in fact you don't have what pdns calls Master operation, unless the backend on the Master provides a mechanism to detect serial changes and send Notify messages to slaves. If it doesn't, you must manually or semi-manually send Notify messages, as I am also now doing with LDAP backend, using a cron job to detect externally (i.e. not within the backend) serial changes and to send, when such changes are detected, Notify messages to slaves.

But I guess, when you don't have triggers, you could embed in the backend the above procedure. You could define a time parameter (perhaps changeable in the config) which would cycle domains (zones), automatically, as part of the backend process and detect serial changes. As I have explained earlier (in other threads), this works fine for a moderate number of zones. If the number of zones is high, however, it doesn't scale well.

Nick.

_______________________________________________
Pdns-users mailing list
[email protected]
http://mailman.powerdns.com/mailman/listinfo/pdns-users

Reply via email to