Hello.

My colleague recently posted a query ("Multiple Masters causing strange issue") to pdns-users regarding some strange behaviour that we are seeing with pdns-2.9.22. We have a lot of slaved domains. For each slaved domain we are seeing attempts to transfer the domain from a long list of masters whch are not (all) configured for those domains.

As far as I can tell this is because the "DomainInfo di;" declaration is outside of the "do" loop which is executed for each zone and the di.masters list is never cleared, so domains successively get a longer and longer cumulative list of masters for the previous zones.

I've included a patch below which should demonstrate this. With the "di.masters.clear();" statement left in, for a particular domain I see the following in the logs:

Mar 25 16:07:34 v1 pdns[30457]: [OpendbxBackend] MASTER example.com: 192.168.128.106

However with "di.masters.clear();" commented out the following is observed:

Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.131.96 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127 Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.127
...
Mar 25 16:05:14 v1 pdns[30500]: [OpendbxBackend] MASTER example.com: 192.168.128.106

With "..." representing a hundred or so lines!

I think the answer is either to use a clear() on the list in each iteration of the do loop or to declare DomainInfo di;" inside the do loop so that it does not retain information from previous iterations.

This is literally the first time I have looked at the code for PowerDNS and what little C++ I have is very rusty so I do apologise if I have made any unwarranted assumptions or have misinterpreted the way that the code should work!

Cheers,

David


*** odbxprivate.cc.orig    Fri Mar 25 16:11:52 2011
--- odbxprivate.cc    Fri Mar 25 16:12:33 2011
***************
*** 207,213 ****
--- 207,217 ----
         {
             if( ( tmp = odbx_field_value( m_result, 2 ) ) != NULL )
             {
+                 di.masters.clear();
stringtok(di.masters, string( tmp, odbx_field_length( m_result, 2 )), ", \t" );
+                 if( ( tmp = odbx_field_value( m_result, 1 ) ) != NULL )
+ for(vector<string>::const_iterator iter = di.masters.begin(); iter != di.masters.end(); ++iter) + L.log( m_myname + " MASTER "+tmp+": "+*iter, Logger::Warning );
             }

             if( ( tmp = odbx_field_value( m_result, 1 ) ) != NULL )
_______________________________________________
Pdns-dev mailing list
[email protected]
http://mailman.powerdns.com/mailman/listinfo/pdns-dev

Reply via email to