]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Only commit & purge cache when we have changed
authorRuben d'Arco <cyclops@prof-x.net>
Mon, 22 Jul 2013 16:17:03 +0000 (18:17 +0200)
committerRuben d'Arco <cyclops@prof-x.net>
Mon, 22 Jul 2013 16:17:03 +0000 (18:17 +0200)
pdns/rfc2136handler.cc

index fb843782be579244f113be437331d15c850bbb96..0cd4979aaece6d5f6d319cf89090094aa880029e 100644 (file)
@@ -862,19 +862,25 @@ int PacketHandler::processUpdate(DNSPacket *p) {
       changedRecords++;
     }
 
-    if (!di.backend->commitTransaction()) {
-      L<<Logger::Error<<msgPrefix<<"Failed to commit updates!"<<endl;
-      return RCode::ServFail;
-    }
+    if (changedRecords) {
+      if (!di.backend->commitTransaction()) {
+       L<<Logger::Error<<msgPrefix<<"Failed to commit updates!"<<endl;
+        return RCode::ServFail;
+      }
 
-    S.deposit("rfc2136-changes", changedRecords);
+      S.deposit("rfc2136-changes", changedRecords);
 
-    // Purge the records!
-    string zone(di.zone);
-    zone.append("$");
-    PC.purge(zone);
+      // Purge the records!
+      string zone(di.zone);
+      zone.append("$");
+      PC.purge(zone);
 
-    L<<Logger::Info<<msgPrefix<<"Update completed, "<<changedRecords<<" changed records commited."<<endl;
+      L<<Logger::Info<<msgPrefix<<"Update completed, "<<changedRecords<<" changed records commited."<<endl;
+    } else {
+      //No change, no commit, we perform abort() because some backends might like this more.
+      L<<Logger::Info<<msgPrefix<<"Update completed, 0 changes, rolling back."<<endl;
+      di.backend->abortTransaction();
+    }
     return RCode::NoError; //rfc 2136 3.4.2.5
   }
   catch (SSqlException &e) {