Cope with edge-case where a stale RRSET wasn't being freshened

This commit is contained in:
Tony Garnock-Jones 2012-02-19 16:52:45 -05:00
parent d33e251dd7
commit 659cb13738
1 changed files with 8 additions and 3 deletions

View File

@ -79,9 +79,14 @@
(define resource (struct-copy rr resource0 [ttl 0]))
(define name (rr-name resource))
(define old-expirymap (hash-ref db name hash))
(if (hash-has-key? old-expirymap resource) ;; don't update TTLs if entry exists
db
(hash-set db name (hash-set old-expirymap resource expiry))))
(define old-expiry (hash-ref old-expirymap resource 0))
(cond
[(infinite-lifetime? old-expiry) ;; don't update TTL: the existing record should live forever
db]
[(or (infinite-lifetime? expiry) (> expiry old-expiry)) ;; update TTL
(hash-set db name (hash-set old-expirymap resource expiry))]
[else ;; old record finite-lifetime but expiring after the new expiry: leave it alone
db]))
;; Maybe<CompleteAnswer> CompiledZone -> (values CompiledZone Timers)
(define (incorporate-complete-answer ans db)