#define STALE_TTL(header, qpdb) \
(NXDOMAIN(header) ? 0 : qpdb->common.serve_stale_ttl)
-#define ACTIVE(header, now) \
- (((header)->ttl > (now)) || ((header)->ttl == (now) && ZEROTTL(header)))
+#define ACTIVE(header, now) \
+ (((header)->expire > (now)) || \
+ ((header)->expire == (now) && ZEROTTL(header)))
#define EXPIREDOK(iterator) \
(((iterator)->common.options & DNS_DB_EXPIREDOK) != 0)
}
static void
-setttl(dns_slabheader_t *header, dns_ttl_t newttl) {
- dns_ttl_t oldttl = header->ttl;
+setttl(dns_slabheader_t *header, isc_stdtime_t newts) {
+ isc_stdtime_t oldts = header->expire;
- header->ttl = newttl;
+ header->expire = newts;
if (header->db == NULL || !dns_db_iscache(header->db)) {
return;
/*
* This is a cache. Adjust the heaps if necessary.
*/
- if (header->heap == NULL || header->heap_index == 0 || newttl == oldttl)
- {
+ if (header->heap == NULL || header->heap_index == 0 || newts == oldts) {
return;
}
- if (newttl < oldttl) {
+ if (newts < oldts) {
isc_heap_increased(header->heap, header->heap_index);
} else {
isc_heap_decreased(header->heap, header->heap_index);
}
- if (newttl == 0) {
+ if (newts == 0) {
isc_heap_delete(header->heap, header->heap_index);
}
}
* Mark header stale or ancient if the RRset is no longer active.
*/
if (!ACTIVE(header, now)) {
- dns_ttl_t stale_ttl = header->ttl + STALE_TTL(header, qpdb);
+ dns_ttl_t stale_ttl = header->expire + STALE_TTL(header, qpdb);
/*
* If this data is in the stale window keep it and if
* DNS_DBFIND_STALEOK is not set we tell the caller to
rdataset->rdclass = qpdb->common.rdclass;
rdataset->type = DNS_TYPEPAIR_TYPE(header->type);
rdataset->covers = DNS_TYPEPAIR_COVERS(header->type);
- rdataset->ttl = header->ttl - now;
+ rdataset->ttl = header->expire - now;
rdataset->trust = header->trust;
rdataset->resign = 0;
}
if (stale && !ancient) {
- dns_ttl_t stale_ttl = header->ttl + STALE_TTL(header, qpdb);
+ dns_ttl_t stale_ttl = header->expire + STALE_TTL(header, qpdb);
if (stale_ttl > now) {
rdataset->ttl = stale_ttl - now;
} else {
isc_rwlocktype_t *nlocktypep, isc_rwlock_t *nlock,
qpc_search_t *search, dns_slabheader_t **header_prev) {
if (!ACTIVE(header, search->now)) {
- dns_ttl_t stale = header->ttl + STALE_TTL(header, search->qpdb);
+ dns_ttl_t stale = header->expire +
+ STALE_TTL(header, search->qpdb);
/*
* If this data is in the stale window keep it and if
* DNS_DBFIND_STALEOK is not set we tell the caller to
* it as ancient, and the node as dirty, so it will get
* cleaned up later.
*/
- if ((header->ttl < search->now - QPDB_VIRTUAL) &&
+ if ((header->expire < search->now - QPDB_VIRTUAL) &&
(*nlocktypep == isc_rwlocktype_write ||
NODE_TRYUPGRADE(nlock, nlocktypep) == ISC_R_SUCCESS))
{
for (header = qpnode->data; header != NULL; header = header_next) {
header_next = header->next;
if (!ACTIVE(header, now)) {
- if ((header->ttl + STALE_TTL(header, qpdb) <
+ if ((header->expire + STALE_TTL(header, qpdb) <
now - QPDB_VIRTUAL) &&
(nlocktype == isc_rwlocktype_write ||
NODE_TRYUPGRADE(nlock, &nlocktype) ==
dns_slabheader_t *h1 = v1;
dns_slabheader_t *h2 = v2;
- return h1->ttl < h2->ttl;
+ return h1->expire < h2->expire;
}
/*%
* Honour the new ttl if it is less than the
* older one.
*/
- if (header->ttl > newheader->ttl) {
- setttl(header, newheader->ttl);
+ if (header->expire > newheader->expire) {
+ setttl(header, newheader->expire);
}
if (header->last_used != now) {
ISC_LIST_UNLINK(
!header_nx && !newheader_nx &&
header->trust <= newheader->trust)
{
- if (newheader->ttl > header->ttl) {
- newheader->ttl = header->ttl;
+ if (newheader->expire > header->expire) {
+ newheader->expire = header->expire;
}
}
if (ACTIVE(header, now) &&
* Honour the new ttl if it is less than the
* older one.
*/
- if (header->ttl > newheader->ttl) {
- setttl(header, newheader->ttl);
+ if (header->expire > newheader->expire) {
+ setttl(header, newheader->expire);
}
if (header->last_used != now) {
ISC_LIST_UNLINK(
static bool
iterator_active(qpcache_t *qpdb, qpc_rditer_t *iterator,
dns_slabheader_t *header) {
- dns_ttl_t stale_ttl = header->ttl + STALE_TTL(header, qpdb);
+ dns_ttl_t stale_ttl = header->expire + STALE_TTL(header, qpdb);
/*
* Is this a "this rdataset doesn't exist" record?
return;
}
- dns_ttl_t ttl = header->ttl;
+ dns_ttl_t ttl = header->expire;
if (!cache_is_overmem) {
/* Only account for stale TTL if cache is not overmem */
rdataset->rdclass = qpdb->common.rdclass;
rdataset->type = DNS_TYPEPAIR_TYPE(header->type);
rdataset->covers = DNS_TYPEPAIR_COVERS(header->type);
- rdataset->ttl = header->ttl - now;
+ rdataset->ttl = header->expire - now;
rdataset->trust = header->trust;
if (OPTOUT(header)) {
flags |= DNS_RDATASLAB_EXACT;
}
if ((options & DNS_DBADD_EXACTTTL) != 0 &&
- newheader->ttl != header->ttl)
+ newheader->expire != header->expire)
{
result = DNS_R_NOTEXACT;
- } else if (newheader->ttl != header->ttl) {
+ } else if (newheader->expire != header->expire) {
flags |= DNS_RDATASLAB_FORCE;
}
if (result == ISC_R_SUCCESS) {
newheader = (dns_slabheader_t *)region.base;
*newheader = (dns_slabheader_t){
.type = DNS_TYPEPAIR_VALUE(rdataset->type, rdataset->covers),
- .ttl = rdataset->ttl + loadctx->now,
+ .expire = rdataset->ttl + loadctx->now,
.trust = rdataset->trust,
.node = (dns_dbnode_t *)node,
.serial = 1,
};
dns_slabheader_reset(newheader, db, (dns_dbnode_t *)node);
- newheader->ttl = rdataset->ttl;
+ newheader->expire = rdataset->ttl;
if (rdataset->ttl == 0U) {
DNS_SLABHEADER_SETATTR(newheader, DNS_SLABHEADERATTR_ZEROTTL);
}
newheader = (dns_slabheader_t *)region.base;
dns_slabheader_reset(newheader, db, (dns_dbnode_t *)node);
- newheader->ttl = rdataset->ttl;
+ newheader->expire = rdataset->ttl;
newheader->type = DNS_TYPEPAIR_VALUE(rdataset->type, rdataset->covers);
atomic_init(&newheader->attributes, 0);
newheader->serial = version->serial;
result = ISC_R_SUCCESS;
if ((options & DNS_DBSUB_EXACT) != 0) {
flags |= DNS_RDATASLAB_EXACT;
- if (newheader->ttl != header->ttl) {
+ if (newheader->expire != header->expire) {
result = DNS_R_NOTEXACT;
}
}
dns_slabheader_destroy(&newheader);
newheader = dns_slabheader_new((dns_db_t *)qpdb,
(dns_dbnode_t *)node);
- newheader->ttl = 0;
+ newheader->expire = 0;
newheader->type = topheader->type;
atomic_init(&newheader->attributes,
DNS_SLABHEADERATTR_NONEXISTENT);
newheader = dns_slabheader_new(db, (dns_dbnode_t *)node);
newheader->type = DNS_TYPEPAIR_VALUE(type, covers);
- newheader->ttl = 0;
+ newheader->expire = 0;
atomic_init(&newheader->attributes, DNS_SLABHEADERATTR_NONEXISTENT);
newheader->serial = version->serial;