]> granicus.if.org Git - pdns/commitdiff
document SyncRes::doCacheCheck in the dot file
authorPieter Lexis <pieter.lexis@powerdns.com>
Tue, 14 Mar 2017 14:31:01 +0000 (15:31 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Tue, 4 Apr 2017 15:10:43 +0000 (17:10 +0200)
pdns/recursordist/contrib/syncres.dot
pdns/syncres.cc

index e209a7f82f7d909202aa49793d607d7ee33d3fde..4ff5d547d6f5120f1204baff149874a92a8228eb 100644 (file)
@@ -62,6 +62,32 @@ digraph {
     doResolve_doResolveAt -> doResolve_return_res [label="res >= 0"];
   }
 
+  subgraph cluster_doCacheCheck {
+    label="SyncRes::doCacheCheck(const DNSName &qname, const QType &qtype, vector<DNSRecord>&ret, unsigned int depth, int &res)";
+
+    doCacheCheck_return_false [label="return false", color=green];
+    "Did we have a positive or negative answer?" -> doCacheCheck_return_true [label=yes];
+    "Did we have a positive or negative answer?" -> doCacheCheck_return_false [label=no];
+    doCacheCheck_return_true [label="return true", color=green];
+
+    "Allocate return qname, qtype and qttl vars (RVARS) as qname, qtype" -> "Is the last label of qname negatively cached by root and is root-nx-trust enabled?";
+
+    "Is the last label of qname negatively cached by root and is root-nx-trust enabled?" -> "Set res to NXDOMAIN, set RVARS to to this label|SOA" [label=yes];
+    "Is the last label of qname negatively cached by root and is root-nx-trust enabled?" -> "Do we have a negative entry from an auth?" [label=no];
+    "Do we have a negative entry from an auth?" -> "Set RCODE (NOERROR or NXDOMAIN), set RVARS to (smaller) qname|SOA" [label=yes];
+    "Set RCODE (NOERROR or NXDOMAIN), set RVARS to (smaller) qname|SOA" -> "Add DNSSEC proof from cache";
+    "Set res to NXDOMAIN, set RVARS to to this label|SOA" -> "Do we have a positive for RVARS from an auth?";
+
+    "Do we have a negative entry from an auth?" -> "Do we have a positive for RVARS from an auth?" [label=no];
+
+    "Do we have a positive for RVARS from an auth?" -> "Did we have a positive or negative answer?" [label=no];
+    "Add DNSSEC proof from cache" -> "Do we have a positive for RVARS from an auth?";
+
+    "Do we have a positive for RVARS from an auth?" -> "Add positive answers to ret if not expired" [label=yes];
+    "Add positive answers to ret if not expired" -> "Add DNSSEC data to ret";
+    "Add DNSSEC data to ret" -> "Did we have a positive or negative answer?";
+  }
+
   subgraph cluster_getBestNSFromCache {
     label="SyncRes::getBestNSFromCache(const DNSName &qname, const QType& qtype, vector<DNSRecord>& bestns, bool* flawedNSSet, unsigned int depth, set<GetBestNSAnswer>& beenthere)\nFills the bestns vector with the 'closest' nameservers for qname\nflawedNSSet will be true if the NSSet has no glue.\nbeenthere contains the list of nameservers already visited during this recursion.";
 
index fd6368094a675353e63c153b73da0a02a0790024..e8ba86c10812256b544954e1575fa96c3b34f71e 100644 (file)
@@ -796,6 +796,7 @@ bool SyncRes::doCacheCheck(const DNSName &qname, const QType &qtype, vector<DNSR
     prefix.append(depth, ' ');
   }
 
+  // sqname and sqtype are used contain 'higher' names if we have them (e.g. powerdns.com|SOA when we find a negative entry for doesnotexists.powerdns.com|A)
   DNSName sqname(qname);
   QType sqt(qtype);
   uint32_t sttl=0;