mirror of https://git.keinpfusch.net/loweel/zabov
if the DNS response Rcode contains an error the cache expires after just 10 seconds.
this should limit the cache in case of temporary upstream DNS errors.
This commit is contained in:
parent
2fe0b7b0c2
commit
e2a625a92e
21
02.cache.go
21
02.cache.go
|
@ -13,7 +13,7 @@ import (
|
||||||
|
|
||||||
type cacheItem struct {
|
type cacheItem struct {
|
||||||
Query []byte
|
Query []byte
|
||||||
Date time.Time
|
ExpireDate time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
//DomainCache stores a domain name inside the cache
|
//DomainCache stores a domain name inside the cache
|
||||||
|
@ -28,7 +28,17 @@ func DomainCache(s string, resp *dns.Msg) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Problems packing the response: ", err.Error())
|
fmt.Println("Problems packing the response: ", err.Error())
|
||||||
}
|
}
|
||||||
domain2cache.Date = time.Now()
|
if resp.Rcode == dns.RcodeSuccess{
|
||||||
|
// on success stores response normally
|
||||||
|
domain2cache.ExpireDate = time.Now().Add((time.Duration(ZabovCacheTTL) * time.Hour))
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
// on failure stores response for a very short time
|
||||||
|
if ZabovDebug {
|
||||||
|
fmt.Println("DomainCache(): DNS error Rcode: ", resp.Rcode, s, "cache time reduced to 10 seconds...")
|
||||||
|
}
|
||||||
|
domain2cache.ExpireDate = time.Now().Add((time.Duration(10) * time.Second))
|
||||||
|
}
|
||||||
|
|
||||||
err = enc.Encode(domain2cache)
|
err = enc.Encode(domain2cache)
|
||||||
|
|
||||||
|
@ -65,7 +75,7 @@ func GetDomainFromCache(s string) *dns.Msg {
|
||||||
|
|
||||||
conf, errDB = MyZabovCDB.Get([]byte(s), nil)
|
conf, errDB = MyZabovCDB.Get([]byte(s), nil)
|
||||||
if errDB != nil {
|
if errDB != nil {
|
||||||
fmt.Println("Cant READ DB :" , errDB.Error() )
|
fmt.Println("Cant READ DB:" , errDB.Error() )
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +87,10 @@ func GetDomainFromCache(s string) *dns.Msg {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if time.Since(record.Date) > (time.Duration(ZabovCacheTTL) * time.Hour) {
|
if time.Now().After(record.ExpireDate) {
|
||||||
|
if ZabovDebug {
|
||||||
|
fmt.Println("GetDomainFromCache(): entry expired:", s)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue