From: Marek VavruĊĦa Date: Wed, 13 May 2015 10:16:37 +0000 (+0200) Subject: Revert "lib/layer: answer both m12n/full names from cache" X-Git-Tag: v1.0.0-beta1~170 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4deb6e13aa18a93d0456b13571f2261267b710c3;p=thirdparty%2Fknot-resolver.git Revert "lib/layer: answer both m12n/full names from cache" This reverts commit 3d1ee64186c8f29c98df143b992660dfd95d4805. --- diff --git a/lib/layer/iterate.c b/lib/layer/iterate.c index 963cb47a7..11cd46638 100644 --- a/lib/layer/iterate.c +++ b/lib/layer/iterate.c @@ -50,7 +50,7 @@ static const knot_dname_t *minimized_qname(struct kr_query *query, uint16_t *qty { /* Minimization disabled. */ const knot_dname_t *qname = query->sname; - if (query->flags & (QUERY_NO_MINIMIZE|QUERY_CACHED)) { + if (query->flags & QUERY_NO_MINIMIZE) { return qname; } diff --git a/lib/layer/pktcache.c b/lib/layer/pktcache.c index 35522c8ff..050aec156 100644 --- a/lib/layer/pktcache.c +++ b/lib/layer/pktcache.c @@ -54,9 +54,10 @@ static void adjust_ttl(knot_rrset_t *rr, uint32_t drift) } } -static int loot_cache_set(namedb_txn_t *txn, knot_pkt_t *pkt, uint8_t tag, const knot_dname_t *qname, - uint16_t rrtype, uint32_t timestamp) +static int loot_cache(namedb_txn_t *txn, knot_pkt_t *pkt, uint8_t tag, uint32_t timestamp) { + const knot_dname_t *qname = knot_pkt_qname(pkt); + uint16_t rrtype = knot_pkt_qtype(pkt); struct kr_cache_entry *entry; entry = kr_cache_peek(txn, tag, qname, rrtype, ×tamp); if (!entry) { /* Not in the cache */ @@ -90,24 +91,6 @@ static int loot_cache_set(namedb_txn_t *txn, knot_pkt_t *pkt, uint8_t tag, const return ret; } -static int loot_cache(namedb_txn_t *txn, knot_pkt_t *pkt, struct kr_query *qry, uint8_t tag) -{ - uint32_t timestamp = qry->timestamp.tv_sec; - /* Try direct match first */ - const knot_dname_t *qname = qry->sname; - uint16_t rrtype = qry->stype; - int ret = loot_cache_set(txn, pkt, tag, qname, rrtype, timestamp); - if (ret == kr_error(ENOENT)) { - /* Try minimized name second */ - qname = knot_pkt_qname(pkt); - rrtype = knot_pkt_qtype(pkt); - if (!knot_dname_is_equal(qname, qry->sname)) { - ret = loot_cache_set(txn, pkt, tag, qname, rrtype, timestamp); - } - } - return ret; -} - static int peek(knot_layer_t *ctx, knot_pkt_t *pkt) { struct kr_request *req = ctx->data; @@ -126,7 +109,8 @@ static int peek(knot_layer_t *ctx, knot_pkt_t *pkt) if (kr_cache_txn_begin(cache, &txn, NAMEDB_RDONLY) != 0) { return ctx->state; } - if (loot_cache(&txn, pkt, qry, get_tag(req->answer)) != 0) { + uint32_t timestamp = qry->timestamp.tv_sec; + if (loot_cache(&txn, pkt, get_tag(req->answer), timestamp) != 0) { kr_cache_txn_abort(&txn); return ctx->state; } diff --git a/lib/layer/rrcache.c b/lib/layer/rrcache.c index 8edc48d9f..2b23742ae 100644 --- a/lib/layer/rrcache.c +++ b/lib/layer/rrcache.c @@ -53,9 +53,11 @@ static int loot_rr(namedb_txn_t *txn, knot_pkt_t *pkt, const knot_dname_t *name, return kr_ok(); } -static int loot_cache_set(namedb_txn_t *txn, knot_pkt_t *pkt, const knot_dname_t *qname, - uint16_t rrclass, uint16_t rrtype, uint32_t timestamp) +static int loot_cache(namedb_txn_t *txn, knot_pkt_t *pkt, uint32_t timestamp) { + const knot_dname_t *qname = knot_pkt_qname(pkt); + uint16_t rrclass = knot_pkt_qclass(pkt); + uint16_t rrtype = knot_pkt_qtype(pkt); int ret = loot_rr(txn, pkt, qname, rrtype, rrclass, timestamp); if (ret == kr_error(ENOENT) && rrtype != KNOT_RRTYPE_CNAME) { /* Chase CNAME if no direct hit */ ret = loot_rr(txn, pkt, qname, KNOT_RRTYPE_CNAME, rrclass, timestamp); @@ -63,25 +65,6 @@ static int loot_cache_set(namedb_txn_t *txn, knot_pkt_t *pkt, const knot_dname_t return ret; } -static int loot_cache(namedb_txn_t *txn, knot_pkt_t *pkt, struct kr_query *qry) -{ - uint32_t timestamp = qry->timestamp.tv_sec; - /* Try direct match first */ - const knot_dname_t *qname = qry->sname; - uint16_t rrclass = qry->sclass; - uint16_t rrtype = qry->stype; - int ret = loot_cache_set(txn, pkt, qname, rrclass, rrtype, timestamp); - if (ret == kr_error(ENOENT)) { - /* Try minimized name second */ - qname = knot_pkt_qname(pkt); - rrtype = knot_pkt_qtype(pkt); - if (!knot_dname_is_equal(qname, qry->sname)) { - ret = loot_cache_set(txn, pkt, qname, rrclass, rrtype, timestamp); - } - } - return ret; -} - static int peek(knot_layer_t *ctx, knot_pkt_t *pkt) { struct kr_request *req = ctx->data; @@ -101,7 +84,8 @@ static int peek(knot_layer_t *ctx, knot_pkt_t *pkt) * it may either be a CNAME chain or direct answer. * Only one step of the chain is resolved at a time. */ - int ret = loot_cache(&txn, pkt, qry); + uint32_t timestamp = qry->timestamp.tv_sec; + int ret = loot_cache(&txn, pkt, timestamp); kr_cache_txn_abort(&txn); if (ret == 0) { DEBUG_MSG("=> satisfied from cache\n");