diff --git a/zonedb.rkt b/zonedb.rkt index 58f5be4..7d7f329 100644 --- a/zonedb.rkt +++ b/zonedb.rkt @@ -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 CompiledZone -> (values CompiledZone Timers) (define (incorporate-complete-answer ans db)