func newTestServer(t *testing.T, c bool) *server { Port += 10 StrPort = strconv.Itoa(Port) s := new(server) client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) client.SyncCluster() // TODO(miek): why don't I use NewServer?? s.group = new(sync.WaitGroup) s.client = client s.scache = cache.New(100, 0) s.rcache = cache.New(100, 0) if c { s.rcache = cache.New(100, 60) // 100 items, 60s ttl } s.config = new(Config) s.config.Domain = "skydns.test." s.config.DomainLabels = 2 s.config.DnsAddr = "127.0.0.1:" + StrPort s.config.Nameservers = []string{"8.8.4.4:53"} setDefaults(s.config) s.config.Local = "104.server1.development.region1.skydns.test." s.config.Priority = 10 s.config.RCacheTtl = RCacheTtl s.config.Ttl = 3600 s.config.Ndots = 2 s.config.log = log.New("skydns", false, log.NullSink()) s.dnsUDPclient = &dns.Client{Net: "udp", ReadTimeout: 2 * s.config.ReadTimeout, WriteTimeout: 2 * s.config.ReadTimeout, SingleInflight: true} s.dnsTCPclient = &dns.Client{Net: "tcp", ReadTimeout: 2 * s.config.ReadTimeout, WriteTimeout: 2 * s.config.ReadTimeout, SingleInflight: true} go s.Run() return s }
// NewServer returns a new SkyDNS server. func NewServer(config *Config, client *etcd.Client) *server { return &server{client: client, config: config, group: new(sync.WaitGroup), scache: cache.New(config.SCache, 0), rcache: cache.New(config.RCache, config.RCacheTtl), dnsUDPclient: &dns.Client{Net: "udp", ReadTimeout: 2 * config.ReadTimeout, WriteTimeout: 2 * config.ReadTimeout, SingleInflight: true}, dnsTCPclient: &dns.Client{Net: "tcp", ReadTimeout: 2 * config.ReadTimeout, WriteTimeout: 2 * config.ReadTimeout, SingleInflight: true}, } }
// New returns a new SkyDNS server. func New(backend Backend, config *Config) *server { tcpNetwork, udpNetwork := bindNetworks(config.BindNetwork) return &server{ backend: backend, config: config, group: new(sync.WaitGroup), scache: cache.New(config.SCache, 0), rcache: cache.New(config.RCache, config.RCacheTtl), dnsUDPclient: &dns.Client{Net: udpNetwork, ReadTimeout: 2 * config.ReadTimeout, WriteTimeout: 2 * config.ReadTimeout, SingleInflight: true}, dnsTCPclient: &dns.Client{Net: tcpNetwork, ReadTimeout: 2 * config.ReadTimeout, WriteTimeout: 2 * config.ReadTimeout, SingleInflight: true}, } }
func main() { parseFlags() if *showVersion { fmt.Printf("%s\n", VERSION) os.Exit(0) } log.Infof("Starting rancher-dns %s", VERSION) err := loadAnswers() if err != nil { log.Fatal("Cannot startup without a valid Answers file") } watchSignals() watchHttp() seed := time.Now().UTC().UnixNano() log.Debug("Set random seed to ", seed) rand.Seed(seed) udpServer := &dns.Server{Addr: *listen, Net: "udp"} tcpServer := &dns.Server{Addr: *listen, Net: "tcp"} globalCache = cache.New(int(*cacheCapacity), int(*defaultTtl)) clientSpecificCaches = make(map[string]*cache.Cache) dns.HandleFunc(".", route) go func() { log.Fatal(udpServer.ListenAndServe()) }() log.Info("Listening on ", *listen) log.Fatal(tcpServer.ListenAndServe()) }
// New returns a new SkyDNS server. func New(backend Backend, config *Config) *server { if config.Verbose { log.Print("set go-etcd logger output to os.Stdout") etcd.SetLogger(log.New(os.Stdout, "go-etcd: ", log.LstdFlags)) } return &server{ backend: backend, config: config, group: new(sync.WaitGroup), scache: cache.New(config.SCache, 0), rcache: cache.New(config.RCache, config.RCacheTtl), dnsUDPclient: &dns.Client{Net: "udp", ReadTimeout: 2 * config.ReadTimeout, WriteTimeout: 2 * config.ReadTimeout, SingleInflight: true}, dnsTCPclient: &dns.Client{Net: "tcp", ReadTimeout: 2 * config.ReadTimeout, WriteTimeout: 2 * config.ReadTimeout, SingleInflight: true}, } }
func newTestServer(t *testing.T, c bool) *server { Port += 10 StrPort = strconv.Itoa(Port) s := new(server) client := etcd.NewClient([]string{"http://127.0.0.1:4001"}) // TODO(miek): why don't I use NewServer?? s.group = new(sync.WaitGroup) s.scache = cache.New(100, 0) s.rcache = cache.New(100, 0) if c { s.rcache = cache.New(100, 60) // 100 items, 60s ttl } s.config = new(Config) s.config.Domain = "skydns.test." s.config.DnsAddr = "127.0.0.1:" + StrPort s.config.Nameservers = []string{"8.8.4.4:53"} SetDefaults(s.config) s.config.Local = "104.server1.development.region1.skydns.test." s.config.Priority = 10 s.config.RCacheTtl = RCacheTtl s.config.Ttl = 3600 s.config.Ndots = 2 prometheusPort = "12300" prometheusSubsystem = "test" prometheusNamespace = "test" if !metricsDone { metricsDone = true Metrics() } s.dnsUDPclient = &dns.Client{Net: "udp", ReadTimeout: 2 * s.config.ReadTimeout, WriteTimeout: 2 * s.config.ReadTimeout, SingleInflight: true} s.dnsTCPclient = &dns.Client{Net: "tcp", ReadTimeout: 2 * s.config.ReadTimeout, WriteTimeout: 2 * s.config.ReadTimeout, SingleInflight: true} s.backend = backendetcd.NewBackend(client, &backendetcd.Config{ Ttl: s.config.Ttl, Priority: s.config.Priority, }) go s.Run() // Yeah, yeah, should do a proper fix. time.Sleep(500 * time.Millisecond) return s }
func newTestServer(t *testing.T, c bool) *server { Port += 10 StrPort = strconv.Itoa(Port) s := new(server) client, _ := etcd.New(etcd.Config{ Endpoints: []string{"http://127.0.0.1:2379/"}, Transport: etcd.DefaultTransport, }) kapi := etcd.NewKeysAPI(client) // TODO(miek): why don't I use NewServer?? s.group = new(sync.WaitGroup) s.scache = cache.New(100, 0) s.rcache = cache.New(100, 0) if c { s.rcache = cache.New(100, 60) // 100 items, 60s ttl } s.config = new(Config) s.config.Domain = "skydns.test." s.config.DnsAddr = "127.0.0.1:" + StrPort s.config.Nameservers = []string{"8.8.4.4:53"} SetDefaults(s.config) s.config.Local = "104.server1.development.region1.skydns.test." s.config.Priority = 10 s.config.RCacheTtl = RCacheTtl s.config.Ttl = 3600 s.config.Ndots = 2 s.dnsUDPclient = &dns.Client{Net: "udp", ReadTimeout: 2 * s.config.ReadTimeout, WriteTimeout: 2 * s.config.ReadTimeout, SingleInflight: true} s.dnsTCPclient = &dns.Client{Net: "tcp", ReadTimeout: 2 * s.config.ReadTimeout, WriteTimeout: 2 * s.config.ReadTimeout, SingleInflight: true} s.backend = backendetcd.NewBackend(kapi, ctx, &backendetcd.Config{ Ttl: s.config.Ttl, Priority: s.config.Priority, }) go s.Run() time.Sleep(500 * time.Millisecond) // Yeah, yeah, should do a proper fix return s }