{"record":{"id":"626f62f1f1647852","repo":"TechnitiumSoftware/DnsServer","slug":"cannot-delete-records-in-zone","errorCode":null,"errorMessage":"Cannot delete records in {} zone.","messagePattern":"Cannot delete records in (.+?) zone\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/Zones/SecondarySubDomainZone.cs","lineNumber":63,"sourceCode":"\n        public override void SetRecords(DnsResourceRecordType type, IReadOnlyList<DnsResourceRecord> records)\n        {\n            throw new InvalidOperationException(\"Cannot set records in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        public override bool AddRecord(DnsResourceRecord record)\n        {\n            throw new InvalidOperationException(\"Cannot add record in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        public override bool DeleteRecord(DnsResourceRecordType type, DnsResourceRecordData record)\n        {\n            throw new InvalidOperationException(\"Cannot delete record in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        public override bool DeleteRecords(DnsResourceRecordType type)\n        {\n            throw new InvalidOperationException(\"Cannot delete records in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        public override void UpdateRecord(DnsResourceRecord oldRecord, DnsResourceRecord newRecord)\n        {\n            throw new InvalidOperationException(\"Cannot update record in \" + _secondaryZone.GetZoneTypeName() + \" zone.\");\n        }\n\n        #endregion\n    }\n}\n","sourceCodeStart":45,"sourceCodeEnd":74,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/Zones/SecondarySubDomainZone.cs#L45-L74","documentation":"Thrown unconditionally by SecondarySubDomainZone.DeleteRecords (RRset). Read-only secondary sub-domain zones reject local RRset deletion with InvalidOperationException. Mirrors errors 595-597 but for the bulk-by-type overload.","triggerScenarios":"Calling subZone.DeleteRecords(type) on a SecondarySubDomainZone.","commonSituations":"Bulk-clear routines sweeping all zones; refactoring 'remove all records of type X' logic without a writability guard.","solutions":["Skip DeleteRecords for SecondarySubDomainZone instances.","Use a primary sub-domain zone where RRset deletion is required.","Centralize mutations behind an IsReadOnly check."],"exampleFix":"// before\nzone.DeleteRecords(type);\n\n// after\nif (zone is SecondarySubDomainZone)\n    return; // read-only\nzone.DeleteRecords(type);","handlingStrategy":"type-guard","validationCode":"if (zone is SecondarySubDomainZone)\n    return;\nzone.DeleteRecords(type);","typeGuard":"static bool IsWritable(AuthZone zone) => zone is not SecondarySubDomainZone;","tryCatchPattern":"null","preventionTips":["Guard bulk-clear helpers with the same writability check.","Convert the zone to primary if RRset deletion is required."],"tags":["dns","secondary-subdomain-zone","read-only","immutable","zone-type","delete"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}