bool GSQLBackend::deleteDomain(const DNSName &domain)
{
+ if (!d_inTransaction) {
+ throw PDNSException("deleteDomain called outside of transaction");
+ }
+
DomainInfo di;
if (!getDomainInfo(domain, di)) {
return false;
return EXIT_FAILURE;
}
- if(di.backend->deleteDomain(zone))
- return EXIT_SUCCESS;
+ di.backend->startTransaction(zone, -1);
+ try {
+ if(di.backend->deleteDomain(zone)) {
+ di.backend->commitTransaction();
+ return EXIT_SUCCESS;
+ }
+ } catch (...) {
+ di.backend->abortTransaction();
+ throw;
+ }
+
+ di.backend->abortTransaction();
cerr<<"Failed to delete domain '"<<zone<<"'"<<endl;;
return EXIT_FAILURE;
}
else if(req->method == "DELETE") {
// delete domain
- if(!di.backend->deleteDomain(zonename))
- throw ApiException("Deleting domain '"+zonename.toString()+"' failed: backend delete failed/unsupported");
+
+ di.backend->startTransaction(zonename, -1);
+ try {
+ if(!di.backend->deleteDomain(zonename))
+ throw ApiException("Deleting domain '"+zonename.toString()+"' failed: backend delete failed/unsupported");
+
+ di.backend->commitTransaction();
+ } catch (...) {
+ di.backend->abortTransaction();
+ throw;
+ }
// clear caches
DNSSECKeeper::clearCaches(zonename);