From: Christian Hofstaedtler Date: Sat, 5 Oct 2013 13:15:24 +0000 (+0200) Subject: ws: cleanup how we look up domains X-Git-Tag: rec-3.6.0-rc1~416^2~5 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3d89fc2872cfe7aad1e14541e1570c6a2344b010;p=pdns ws: cleanup how we look up domains previously we would hit the DB twice, for no real reason. --- diff --git a/pdns/ws.cc b/pdns/ws.cc index 91dd43388..0d848a784 100644 --- a/pdns/ws.cc +++ b/pdns/ws.cc @@ -279,10 +279,8 @@ static int intFromJson(const Value& val) { static string getZone(const string& zonename) { UeberBackend B; - SOAData sd; DomainInfo di; - sd.db = (DNSBackend*)-1; - if(!B.getSOA(zonename, sd) || !sd.db || !B.getDomainInfo(zonename, di)) { + if(!B.getDomainInfo(zonename, di)) { map err; err["error"] = "Could not find domain '"+zonename+"'"; return returnJSONObject(err); @@ -310,8 +308,8 @@ static string getZone(const string& zonename) { DNSResourceRecord rr; Value records; records.SetArray(); - sd.db->list(zonename, sd.domain_id); - while(sd.db->get(rr)) { + di.backend->list(zonename, di.id); + while(di.backend->get(rr)) { if (!rr.qtype.getCode()) continue; // skip empty non-terminals @@ -335,32 +333,28 @@ static string getZone(const string& zonename) { static string createOrUpdateZone(const string& zonename, bool onlyCreate, varmap_t& varmap) { UeberBackend B; - SOAData sd; DomainInfo di; - sd.db = (DNSBackend*)-1; - bool exists = (B.getSOA(zonename, sd) && sd.db && B.getDomainInfo(zonename, di)); - if (exists && onlyCreate) { - map err; - err["error"] = "Domain '"+zonename+"' already exists"; - return returnJSONObject(err); - } - if (!exists && !B.createDomain(zonename, &sd.db)) { + bool exists = B.getDomainInfo(zonename, di); + if(exists && onlyCreate) { map err; - err["error"] = "Creating domain '"+zonename+"' failed"; + err["error"] = "Domain '"+zonename+"' already exists"; return returnJSONObject(err); } - if(!B.getDomainInfo(zonename, di) || !di.backend) { - map err; - err["error"] = "Modifying domain '"+zonename+"' failed: lookup of domain_id failed"; - return returnJSONObject(err); - } + if(!exists) { + if(!B.createDomain(zonename, &di.backend)) { + map err; + err["error"] = "Creating domain '"+zonename+"' failed"; + return returnJSONObject(err); + } - di.backend->setKind(zonename, DomainInfo::stringToKind(varmap["kind"])); - di.backend->setMaster(zonename, varmap["master"]); + if(!B.getDomainInfo(zonename, di)) { + map err; + err["error"] = "Creating domain '"+zonename+"' failed: lookup of domain ID failed"; + return returnJSONObject(err); + } - if (!exists) { // create SOA record so zone "really" exists DNSResourceRecord soa; soa.qname = zonename; @@ -371,11 +365,14 @@ static string createOrUpdateZone(const string& zonename, bool onlyCreate, varmap soa.ttl = ::arg().asNum( "default-ttl" ); soa.priority = 0; - sd.db->startTransaction(zonename, di.id); - sd.db->feedRecord(soa); - sd.db->commitTransaction(); + di.backend->startTransaction(zonename, di.id); + di.backend->feedRecord(soa); + di.backend->commitTransaction(); } + di.backend->setKind(zonename, DomainInfo::stringToKind(varmap["kind"])); + di.backend->setMaster(zonename, varmap["master"]); + return getZone(zonename); } @@ -579,10 +576,8 @@ static string jsonDispatch(const string& method, const string& post, varmap_t& v } else if (method == "DELETE") { // delete UeberBackend B; - SOAData sd; DomainInfo di; - sd.db = (DNSBackend*)-1; - if(!B.getDomainInfo(zonename, di) || !di.backend) { + if(!B.getDomainInfo(zonename, di)) { map err; err["error"] = "Deleting domain '"+zonename+"' failed: domain does not exist"; return returnJSONObject(err);