mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 16:24:19 -04:00
core: remove dns.ServeMux (#576)
We don't need to use the muxer in Go DNS s we only have one entry point per server - and mux ourselves in ServeDNS. Also make ServeDNS take a context, and make that the canonical way to call all middleware.
This commit is contained in:
@@ -26,7 +26,6 @@ import (
|
|||||||
// graceful termination (POSIX only).
|
// graceful termination (POSIX only).
|
||||||
type Server struct {
|
type Server struct {
|
||||||
Addr string // Address we listen on
|
Addr string // Address we listen on
|
||||||
mux *dns.ServeMux
|
|
||||||
|
|
||||||
server [2]*dns.Server // 0 is a net.Listener, 1 is a net.PacketConn (a *UDPConn) in our case.
|
server [2]*dns.Server // 0 is a net.Listener, 1 is a net.PacketConn (a *UDPConn) in our case.
|
||||||
m sync.Mutex // protects the servers
|
m sync.Mutex // protects the servers
|
||||||
@@ -44,9 +43,6 @@ func NewServer(addr string, group []*Config) (*Server, error) {
|
|||||||
zones: make(map[string]*Config),
|
zones: make(map[string]*Config),
|
||||||
connTimeout: 5 * time.Second, // TODO(miek): was configurable
|
connTimeout: 5 * time.Second, // TODO(miek): was configurable
|
||||||
}
|
}
|
||||||
mux := dns.NewServeMux()
|
|
||||||
mux.Handle(".", s) // wildcard handler, everything will go through here
|
|
||||||
s.mux = mux
|
|
||||||
|
|
||||||
// We have to bound our wg with one increment
|
// We have to bound our wg with one increment
|
||||||
// to prevent a "race condition" that is hard-coded
|
// to prevent a "race condition" that is hard-coded
|
||||||
@@ -75,7 +71,10 @@ func NewServer(addr string, group []*Config) (*Server, error) {
|
|||||||
// This implements caddy.TCPServer interface.
|
// This implements caddy.TCPServer interface.
|
||||||
func (s *Server) Serve(l net.Listener) error {
|
func (s *Server) Serve(l net.Listener) error {
|
||||||
s.m.Lock()
|
s.m.Lock()
|
||||||
s.server[tcp] = &dns.Server{Listener: l, Net: "tcp", Handler: s.mux}
|
s.server[tcp] = &dns.Server{Listener: l, Net: "tcp", Handler: dns.HandlerFunc(func(w dns.ResponseWriter, r *dns.Msg) {
|
||||||
|
ctx := context.Background()
|
||||||
|
s.ServeDNS(ctx, w, r)
|
||||||
|
})}
|
||||||
s.m.Unlock()
|
s.m.Unlock()
|
||||||
|
|
||||||
return s.server[tcp].ActivateAndServe()
|
return s.server[tcp].ActivateAndServe()
|
||||||
@@ -85,7 +84,10 @@ func (s *Server) Serve(l net.Listener) error {
|
|||||||
// This implements caddy.UDPServer interface.
|
// This implements caddy.UDPServer interface.
|
||||||
func (s *Server) ServePacket(p net.PacketConn) error {
|
func (s *Server) ServePacket(p net.PacketConn) error {
|
||||||
s.m.Lock()
|
s.m.Lock()
|
||||||
s.server[udp] = &dns.Server{PacketConn: p, Net: "udp", Handler: s.mux}
|
s.server[udp] = &dns.Server{PacketConn: p, Net: "udp", Handler: dns.HandlerFunc(func(w dns.ResponseWriter, r *dns.Msg) {
|
||||||
|
ctx := context.Background()
|
||||||
|
s.ServeDNS(ctx, w, r)
|
||||||
|
})}
|
||||||
s.m.Unlock()
|
s.m.Unlock()
|
||||||
|
|
||||||
return s.server[udp].ActivateAndServe()
|
return s.server[udp].ActivateAndServe()
|
||||||
@@ -154,13 +156,7 @@ func (s *Server) Address() string { return s.Addr }
|
|||||||
// is bound to. It acts as a multiplexer for the requests zonename as
|
// is bound to. It acts as a multiplexer for the requests zonename as
|
||||||
// defined in the request so that the correct zone
|
// defined in the request so that the correct zone
|
||||||
// (configuration and middleware stack) will handle the request.
|
// (configuration and middleware stack) will handle the request.
|
||||||
func (s *Server) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
|
func (s *Server) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) {
|
||||||
s.ServeDNSWithContext(context.Background(), w, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ServeDNSWithContext may be used as an entrypoint for requests that
|
|
||||||
// come from transports that may include a Context (such as gRPC)
|
|
||||||
func (s *Server) ServeDNSWithContext(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) {
|
|
||||||
defer func() {
|
defer func() {
|
||||||
// In case the user doesn't enable error middleware, we still
|
// In case the user doesn't enable error middleware, we still
|
||||||
// need to make sure that we stay alive up here
|
// need to make sure that we stay alive up here
|
||||||
|
|||||||
Reference in New Issue
Block a user