diff --git a/doc/design/db_rules b/doc/design/db_rules new file mode 100644 index 0000000000..e8a461611b --- /dev/null +++ b/doc/design/db_rules @@ -0,0 +1,76 @@ + +Here is a more formal statement of the important database design +rules. Each rule is given a 5 character mnemonic for referral +convenience. + + +Reference Safety [DBREF] + + 1) Any node reference retrieved from the database shall remain + valid until discarded by the caller. + + 2) Any rdataset retrieved from the database shall remain valid, + with its rdata contents unaltered, until it has been discarded + by the caller. + + +Basic Versioning [DBVER] + + The rdata contents of a committed version do not change. + + +Database Future Version [DBFUV] + + 1) Zone databases may have at most one open future version. + + 2) When committed, the future version becomes the current version. + + 3) Until it is committed, the future version changes may be + rolled back. + + +Node Lookups [DBNLU] + + XXX + + +Zone Node Lookups [DBZNL] + + A node zone lookup returns the requested node, if it exists, in the + version specified, or DNS_R_NONEXISTENT otherwise. + + +Zone Rdataset Lookups [DBZRL] + + A zone lookup returns the requested data, if any, in the + version specified, or DNS_R_NONEXISTENT otherwise. + + +Cache Node Lookups [DBCNL] + + 1) A node lookup shall return a handle to the desired node, + if it exists. + + 2) If there is a negative caching entry for the desired node, + DNS_R_NONEXISTENT shall be returned. + + 3) If the desired node does not exist, and there is not a + negative caching entry, DNS_R_UNKNOWN shall be returned. + + +Cache Rdataset Lookups [DBCRL] + + 1) A cache lookup returns the most recently written data + (if any). + + 2) If there is a negative caching entry for the desired data, + DNS_R_NONEXISTENT shall be returned. + + 3) If the requested data does not exist, and there is not a + negative caching entry, DNS_R_UNKNOWN shall be returned. + + +Cache Updates [DBCUP] + + Concurrent attempts to update the same rdataset type of a given + node must appear to execute in some order. \ No newline at end of file