kresd/cache/kr_cache_peekについて、ここに記述してください。
~/kresd/lib$ grep 'kr_cache_peek' *.c cache.c:int kr_cache_peek(struct kr_cache_txn *txn, uint8_t tag, const knot_dname_t *name, uint16_t type, cache.c:int kr_cache_peek_rr(struct kr_cache_txn *txn, knot_rrset_t *rr, uint8_t *rank, uint8_t *flags, uint32_t *timestamp) cache.c: int ret = kr_cache_peek(txn, KR_CACHE_RR, rr->owner, rr->type, &entry, timestamp); cache.c:int kr_cache_peek_rank(struct kr_cache_txn *txn, uint8_t tag, const knot_dname_t *name, uint16_t type, uint32_t timestamp) cache.c:int kr_cache_peek_rrsig(struct kr_cache_txn *txn, knot_rrset_t *rr, uint8_t *rank, uint8_t *flags, uint32_t *timestamp) cache.c: int ret = kr_cache_peek(txn, KR_CACHE_SIG, rr->owner, rr->type, &entry, timestamp); resolve.c: int ret = kr_cache_peek(txn, KR_CACHE_PKT, target, KNOT_RRTYPE_NS, &entry, ×tamp); zonecut.c: if (kr_cache_peek_rr(txn, &cached_rr, &rank, NULL, ×tamp) != 0) { zonecut.c: int ret = kr_cache_peek_rr(txn, &cached_rr, rank, NULL, &drift); zonecut.c: int ret = kr_cache_peek_rr(txn, &cached_rr, &rank, NULL, &drift);
zonecut.c 中で kr_cache_peek_rr を見ている。
- zonecutが rrcacheを利用しているということだが、これがおかしい。
- zonecutはRRSetとは別に管理する方がよい。
- そして、NXDOMAIN返答などはすでに別に管理されているのだから。
-- ToshinoriMaeno 2016-04-24 01:38:02
~/kresd/lib$ grep 'kr_cache_peek' layer/*.c
layer/pktcache.c: int ret = kr_cache_peek(txn, KR_CACHE_PKT, qname, rrtype, &entry, ×tamp); layer/pktcache.c: int cached_rank = kr_cache_peek_rank(&txn, KR_CACHE_PKT, qname, qtype, header.timestamp); layer/rrcache.c: ret = kr_cache_peek_rrsig(txn, &cache_rr, rank, flags, &drift); layer/rrcache.c: ret = kr_cache_peek_rr(txn, &cache_rr, rank, flags, &drift); layer/rrcache.c: int cached_rank = kr_cache_peek_rank(baton->txn, KR_CACHE_RR, rr->owner, rr->type, baton->timestamp);