Feature: more robust updater DNS resolution

- Parallel resolver to resolve multiple hosts
- Repeat resolver to repeat resolution for a single host
- Additional parameters for fault toleration
- Do not update servers if e.g. > 10% DNS resolutions failed
- resolver package in updater package
This commit is contained in:
Quentin McGaw
2021-05-06 18:48:14 +00:00
parent 167a0b0b29
commit d5ef3de64c
18 changed files with 625 additions and 340 deletions

View File

@@ -9,6 +9,7 @@ import (
"github.com/qdm12/gluetun/internal/configuration"
"github.com/qdm12/gluetun/internal/models"
"github.com/qdm12/gluetun/internal/updater/resolver"
"github.com/qdm12/golibs/logging"
)
@@ -24,11 +25,11 @@ type updater struct {
servers models.AllServers
// Functions for tests
logger logging.Logger
timeNow func() time.Time
println func(s string)
lookupIP lookupIPFunc
client *http.Client
logger logging.Logger
timeNow func() time.Time
println func(s string)
presolver resolver.Parallel
client *http.Client
}
func New(settings configuration.Updater, httpClient *http.Client,
@@ -36,15 +37,14 @@ func New(settings configuration.Updater, httpClient *http.Client,
if len(settings.DNSAddress) == 0 {
settings.DNSAddress = "1.1.1.1"
}
resolver := newResolver(settings.DNSAddress)
return &updater{
logger: logger,
timeNow: time.Now,
println: func(s string) { fmt.Println(s) },
lookupIP: newLookupIP(resolver),
client: httpClient,
options: settings,
servers: currentServers,
logger: logger,
timeNow: time.Now,
println: func(s string) { fmt.Println(s) },
presolver: resolver.NewParallelResolver(settings.DNSAddress),
client: httpClient,
options: settings,
servers: currentServers,
}
}