diff options
author | 2018-05-01 21:04:06 +0100 | |
---|---|---|
committer | 2018-05-01 21:04:06 +0100 | |
commit | 5735292406caf7d490853cee37f12126a8b7a4dc (patch) | |
tree | 119996d193d3cbf893992ad9b9ddfbba4caf342c /request | |
parent | c48531bb35fa1bb5f9e41a00d98794ea1978f01e (diff) | |
download | coredns-5735292406caf7d490853cee37f12126a8b7a4dc.tar.gz coredns-5735292406caf7d490853cee37f12126a8b7a4dc.tar.zst coredns-5735292406caf7d490853cee37f12126a8b7a4dc.zip |
Do Compress only when need in request.Scrub (#1760)
* Remove Compress by default
Set Compress = true in Scrub only when the message doesn not fit the
advertized buffer. Doing compression is expensive, so try to avoid it.
Master vs this branch
pkg: github.com/coredns/coredns/plugin/cache
BenchmarkCacheResponse-2 50000 24774 ns/op
pkg: github.com/coredns/coredns/plugin/cache
BenchmarkCacheResponse-2 100000 21960 ns/op
* and make it compile
Diffstat (limited to 'request')
-rw-r--r-- | request/request.go | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/request/request.go b/request/request.go index ac5f509f4..c45f6e571 100644 --- a/request/request.go +++ b/request/request.go @@ -180,20 +180,25 @@ const ( ScrubAnswer ) -// Scrub scrubs the reply message so that it will fit the client's buffer. It sets -// reply.Compress to true. -// Scrub uses binary search to find a save cut off point in the additional section. +// Scrub scrubs the reply message so that it will fit the client's buffer. It will first +// check if the reply fits without compression and then *with* compression. +// Scrub will then use binary search to find a save cut off point in the additional section. // If even *without* the additional section the reply still doesn't fit we // repeat this process for the answer section. If we scrub the answer section // we set the TC bit on the reply; indicating the client should retry over TCP. // Note, the TC bit will be set regardless of protocol, even TCP message will // get the bit, the client should then retry with pigeons. func (r *Request) Scrub(reply *dns.Msg) (*dns.Msg, Result) { - reply.Compress = true - size := r.Size() + + reply.Compress = false rl := reply.Len() + if size >= rl { + return reply, ScrubIgnored + } + reply.Compress = true + rl = reply.Len() if size >= rl { return reply, ScrubIgnored } |