Skip to content

Commit 9733337

Browse files
committed
dnsx/cacher: server, relay, proxy from cached summary if missing
1 parent 54d9366 commit 9733337

1 file changed

Lines changed: 13 additions & 9 deletions

File tree

intra/dnsx/cacher.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ func (t *ctransport) hangoverCheckpoint() {
349349
}
350350
}
351351

352-
func (t *ctransport) fetch(network string, q *dns.Msg, summary *x.DNSSummary, cb *cache, key string) (*dns.Msg, error) {
352+
func (t *ctransport) fetch(network string, q *dns.Msg, smmout *x.DNSSummary, cb *cache, key string) (*dns.Msg, error) {
353353
sendRequest := func(smm2 *x.DNSSummary) (*dns.Msg, error) {
354354
reqsent := false
355355

@@ -420,11 +420,11 @@ func (t *ctransport) fetch(network string, q *dns.Msg, summary *x.DNSSummary, cb
420420
trok := t.hangover.Within(httl)
421421

422422
if v, isfresh := cb.freshCopy(key); trok && v != nil {
423-
var cachedsummary *x.DNSSummary
423+
var cachedsmm *x.DNSSummary
424424
hasans := v.ans != nil
425425

426426
log.D("cache: hit(k: %s / stale? %t / ans? %t): %s", key, !isfresh, hasans, v)
427-
r, cachedsummary, err := asResponse(q, v, isfresh) // return cached response, may be stale
427+
r, cachedsmm, err := asResponse(q, v, isfresh) // return cached response, may be stale
428428
if err != nil {
429429
log.W("cache: hit(k: %s) %s, but err? %v", key, v, err)
430430
if err == errCacheResponseMismatch {
@@ -435,7 +435,7 @@ func (t *ctransport) fetch(network string, q *dns.Msg, summary *x.DNSSummary, cb
435435
cb.mu.Unlock()
436436
}
437437
// fallthrough to sendRequest
438-
} else if cachedsummary != nil {
438+
} else if cachedsmm != nil {
439439
if !isfresh { // not fresh, fetch in the background
440440
testpanic := settings.PanicAtRandom.Load() && rand10pc()
441441
g := core.Gx
@@ -446,20 +446,20 @@ func (t *ctransport) fetch(network string, q *dns.Msg, summary *x.DNSSummary, cb
446446
if testpanic {
447447
panic("dns: cache: fetch: sendRequest: rand10pc")
448448
}
449-
_, _ = sendRequest(copySummary(summary)) // summary may be cached
449+
_, _ = sendRequest(copySummary(smmout)) // summary may be cached
450450
})
451451
}
452452
// change summary fields to reflect cached response, except for latency
453-
fillSummary(cachedsummary, summary)
454-
summary.Latency = 0 // don't use cached latency
455-
summary.Cached = true
453+
fillSummary(cachedsmm, smmout)
454+
smmout.Latency = 0 // don't use cached latency
455+
smmout.Cached = true
456456
return r, nil
457457
} // else: fallthrough to sendRequest
458458
} else {
459459
log.D("cache: miss(k: %s): cached? %t, hangover? %t, stale? %t", key, v != nil, !trok, !isfresh)
460460
}
461461

462-
return sendRequest(summary) // summary is filled by underlying transport
462+
return sendRequest(smmout) // summary is filled by underlying transport
463463
}
464464

465465
func (t *ctransport) Query(network string, q *dns.Msg, smm *x.DNSSummary) (*dns.Msg, error) {
@@ -552,6 +552,10 @@ func fillSummary(s *x.DNSSummary, out *x.DNSSummary) {
552552
out.Server = s.Server
553553
out.PID = s.PID
554554
out.RPID = s.RPID
555+
} else if len(out.Server) <= 0 {
556+
out.Server = s.Server
557+
out.PID = s.PID
558+
out.RPID = s.RPID
555559
}
556560
if out.Latency <= 0 {
557561
out.Latency = s.Latency

0 commit comments

Comments
 (0)