Add a grace TTL for expired cached IPs
And some comments to make the code more readable
This commit is contained in:
parent
0dc69eacd5
commit
6032c3b79b
|
@ -30,6 +30,7 @@ const (
|
||||||
DefaultKeepAlive = 5 * time.Second
|
DefaultKeepAlive = 5 * time.Second
|
||||||
DefaultTimeout = 30 * time.Second
|
DefaultTimeout = 30 * time.Second
|
||||||
SystemResolverTTL = 24 * time.Hour
|
SystemResolverTTL = 24 * time.Hour
|
||||||
|
ExpiredCachedIPGraceTTL = 1 * time.Minute
|
||||||
)
|
)
|
||||||
|
|
||||||
type CachedIPItem struct {
|
type CachedIPItem struct {
|
||||||
|
@ -98,8 +99,7 @@ func (xTransport *XTransport) saveCachedIP(host string, ip net.IP, ttl time.Dura
|
||||||
}
|
}
|
||||||
|
|
||||||
func (xTransport *XTransport) loadCachedIP(host string) (ip net.IP, expired bool) {
|
func (xTransport *XTransport) loadCachedIP(host string) (ip net.IP, expired bool) {
|
||||||
ip = nil
|
ip, expired = nil, false
|
||||||
expired = false
|
|
||||||
xTransport.cachedIPs.RLock()
|
xTransport.cachedIPs.RLock()
|
||||||
item, ok := xTransport.cachedIPs.cache[host]
|
item, ok := xTransport.cachedIPs.cache[host]
|
||||||
xTransport.cachedIPs.RUnlock()
|
xTransport.cachedIPs.RUnlock()
|
||||||
|
@ -131,6 +131,8 @@ func (xTransport *XTransport) rebuildTransport() {
|
||||||
DialContext: func(ctx context.Context, network, addrStr string) (net.Conn, error) {
|
DialContext: func(ctx context.Context, network, addrStr string) (net.Conn, error) {
|
||||||
host, port := ExtractHostAndPort(addrStr, stamps.DefaultPort)
|
host, port := ExtractHostAndPort(addrStr, stamps.DefaultPort)
|
||||||
ipOnly := host
|
ipOnly := host
|
||||||
|
// resolveWithCache() is always called in `Fetch()` before the `Dial()`
|
||||||
|
// method is used, so that a cached entry must be present at this point.
|
||||||
cachedIP, _ := xTransport.loadCachedIP(host)
|
cachedIP, _ := xTransport.loadCachedIP(host)
|
||||||
if cachedIP == nil {
|
if cachedIP == nil {
|
||||||
if ipv4 := cachedIP.To4(); ipv4 != nil {
|
if ipv4 := cachedIP.To4(); ipv4 != nil {
|
||||||
|
@ -242,6 +244,7 @@ func (xTransport *XTransport) resolveUsingResolver(proto, host string, resolver
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return a cached entry, or resolve a name and update the cache
|
||||||
func (xTransport *XTransport) resolveWithCache(host string) (err error) {
|
func (xTransport *XTransport) resolveWithCache(host string) (err error) {
|
||||||
if xTransport.proxyDialer != nil || xTransport.httpProxyFunction != nil {
|
if xTransport.proxyDialer != nil || xTransport.httpProxyFunction != nil {
|
||||||
return
|
return
|
||||||
|
@ -278,6 +281,7 @@ func (xTransport *XTransport) resolveWithCache(host string) (err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if cachedIP != nil {
|
if cachedIP != nil {
|
||||||
foundIP = cachedIP
|
foundIP = cachedIP
|
||||||
|
ttl = ExpiredCachedIPGraceTTL
|
||||||
} else {
|
} else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue