Changeset 1017

Show
Ignore:
Timestamp:
04/07/07 20:07:59 (2 years ago)
Author:
ahu
Message:

implement multiple master mode, plus make room in sql tables for multiple masters

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/pdns/pdns/backends/bind/bindparser.yy

    r1000 r1017  
    214214master: AWORD 
    215215        { 
    216                 s_di.master=$1; 
     216                if(!s_di.master.empty()) 
     217                  s_di.master.append(1, ' '); 
     218                s_di.master.append($1); 
    217219                free($1); 
    218220        } 
  • trunk/pdns/pdns/communicator.cc

    r1015 r1017  
    11/* 
    22    PowerDNS Versatile Database Driven Nameserver 
    3     Copyright (C) 2002-2005  PowerDNS.COM BV 
     3    Copyright (C) 2002-2007  PowerDNS.COM BV 
    44 
    55    This program is free software; you can redistribute it and/or modify 
     
    2121#include "communicator.hh" 
    2222#include <set> 
    23  
     23#include <boost/utility.hpp> 
    2424#include "dnsbackend.hh" 
    2525#include "ueberbackend.hh" 
     
    6565  try { 
    6666    Resolver resolver; 
    67     resolver.axfr(remote,domain.c_str()); 
     67    resolver.axfr(remote, domain.c_str()); 
    6868 
    6969    UeberBackend *B=dynamic_cast<UeberBackend *>(P.getBackend()); 
     
    251251    resolver.makeUDPSocket();   
    252252    d_slaveschanged=true; 
    253     uint32_t ourserial=i->serial,theirserial=0; 
    254  
    255     try { 
    256       if(d_havepriosuckrequest) { 
    257         d_havepriosuckrequest=false; 
     253    uint32_t ourserial=i->serial, theirserial=0; 
     254     
     255    if(d_havepriosuckrequest) { 
     256      d_havepriosuckrequest=false; 
     257      break; 
     258    } 
     259 
     260    vector<string> masters; 
     261    stringtok(masters, i->master, ", \t"); 
     262    for(vector<string>::const_iterator iter = masters.begin(); iter != masters.end(); ++iter) { 
     263      try { 
     264        resolver.getSoaSerial(*iter, i->zone, &theirserial); 
     265         
     266        if(theirserial<i->serial) { 
     267          L<<Logger::Error<<"Domain "<<i->zone<<" more recent than master, our serial "<<ourserial<<" > their serial "<<theirserial<<endl; 
     268          i->backend->setFresh(i->id); 
     269        } 
     270        else if(theirserial==i->serial) { 
     271          L<<Logger::Warning<<"Domain "<<i->zone<<" is fresh"<<endl; 
     272          i->backend->setFresh(i->id); 
     273        } 
     274        else { 
     275          L<<Logger::Warning<<"Domain "<<i->zone<<" is stale, master serial "<<theirserial<<", our serial "<<i->serial<<endl; 
     276          addSuckRequest(i->zone, *iter); 
     277        } 
    258278        break; 
    259279      } 
    260  
    261       resolver.getSoaSerial(i->master, i->zone, &theirserial); 
    262        
    263       if(theirserial<i->serial) { 
    264         L<<Logger::Error<<"Domain "<<i->zone<<" more recent than master, our serial "<<ourserial<<" > their serial "<<theirserial<<endl; 
    265         i->backend->setFresh(i->id); 
    266       } 
    267       else if(theirserial==i->serial) { 
    268         L<<Logger::Warning<<"Domain "<<i->zone<<" is fresh"<<endl; 
    269         i->backend->setFresh(i->id); 
    270       } 
    271       else { 
    272         L<<Logger::Warning<<"Domain "<<i->zone<<" is stale, master serial "<<theirserial<<", our serial "<<i->serial<<endl; 
    273         addSuckRequest(i->zone,i->master); 
    274       } 
    275     } 
    276     catch(ResolverException &re) { 
    277       L<<Logger::Error<<"Error trying to retrieve/refresh '"+i->zone+"': "+re.reason<<endl; 
     280      catch(ResolverException &re) { 
     281        L<<Logger::Error<<"Error trying to retrieve/refresh '"+i->zone+"': "+re.reason<<endl; 
     282        if(next(iter) != masters.end())  
     283          L<<Logger::Error<<"Trying next master for '"+i->zone+"'"<<endl; 
     284      } 
     285      catch(AhuException &re) { 
     286        L<<Logger::Error<<"Error trying to retrieve/refresh '"+i->zone+"': "+re.reason<<endl; 
     287        if(next(iter) != masters.end())  
     288          L<<Logger::Error<<"Trying next master for '"+i->zone+"'"<<endl; 
     289      } 
    278290    } 
    279291  } 
    280292 
    281  
    282  
    283293 
    284294int CommunicatorClass::doNotifications() 
  • trunk/pdns/pdns/docs/pdns.sgml

    r997 r1017  
    58095809 id              INT auto_increment, 
    58105810 name            VARCHAR(255) NOT NULL, 
    5811  master          VARCHAR(20) DEFAULT NULL, 
     5811 master          VARCHAR(128) DEFAULT NULL, 
    58125812 last_check      INT DEFAULT NULL, 
    58135813 type            VARCHAR(6) NOT NULL, 
     
    95979597 id              INT auto_increment, 
    95989598 name            VARCHAR(255) NOT NULL, 
    9599  master          VARCHAR(20) DEFAULT NULL, 
     9599 master          VARCHAR(128) DEFAULT NULL, 
    96009600 last_check      INT DEFAULT NULL, 
    96019601 type            VARCHAR(6) NOT NULL, 
     
    96599659 id              SERIAL PRIMARY KEY, 
    96609660 name            VARCHAR(255) NOT NULL, 
    9661  master          VARCHAR(20) DEFAULT NULL, 
     9661 master          VARCHAR(128) DEFAULT NULL, 
    96629662 last_check      INT DEFAULT NULL, 
    96639663 type            VARCHAR(6) NOT NULL, 
     
    97199719 id              NUMBER, 
    97209720 name            VARCHAR(255) NOT NULL, 
    9721  master          VARCHAR(20) DEFAULT NULL, 
     9721 master          VARCHAR(128) DEFAULT NULL, 
    97229722 last_check      INT DEFAULT NULL, 
    97239723 type            VARCHAR(6) NOT NULL, 
     
    1033310333 ID              number(11) NOT NULL, 
    1033410334 NAME            VARCHAR(255) NOT NULL, 
    10335  MASTER          VARCHAR(20) DEFAULT NULL, 
     10335 MASTER          VARCHAR(128) DEFAULT NULL, 
    1033610336 LAST_CHECK      INT DEFAULT NULL, 
    1033710337 TYPE            VARCHAR(6) NOT NULL, 
     
    1043610436              id                INTEGER PRIMARY KEY, 
    1043710437              name              VARCHAR(255) NOT NULL, 
    10438               master            VARCHAR(20) DEFAULT NULL, 
     10438              master            VARCHAR(128) DEFAULT NULL, 
    1043910439              last_check        INTEGER DEFAULT NULL, 
    1044010440              type              VARCHAR(6) NOT NULL,