Skip to content

Commit

Permalink
feat: retry on DNS queries.
Browse files Browse the repository at this point in the history
  • Loading branch information
ldez committed Jun 3, 2020
1 parent 0349e40 commit c44e405
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions challenge/dns01/nameserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
"sync"
"time"

"github.com/cenkalti/backoff/v4"
"github.com/go-acme/lego/v3/log"
"github.com/miekg/dns"
)

Expand Down Expand Up @@ -229,15 +231,31 @@ func dnsQuery(fqdn string, rtype uint16, nameservers []string, recursive bool) (
m := createDNSMsg(fqdn, rtype, recursive)

var in *dns.Msg
var err error
var errG error

for _, ns := range nameservers {
in, err = sendDNSQuery(m, ns)
if err == nil && len(in.Answer) > 0 {
bo := backoff.NewExponentialBackOff()
bo.Multiplier = 1.2
bo.InitialInterval = dnsTimeout
bo.MaxInterval = 2 * bo.InitialInterval
bo.MaxElapsedTime = 6 * bo.InitialInterval

operation := func() error {
var err error
in, err = sendDNSQuery(m, ns)
return err
}

notify := func(err error, d time.Duration) {
log.Infof("dnsQuery retry %v: fqdn=%s, ns=%s: %v", d, fqdn, ns, err)
}

errG = backoff.RetryNotify(operation, bo, notify)
if errG == nil && len(in.Answer) > 0 {
break
}
}
return in, err
return in, errG
}

func createDNSMsg(fqdn string, rtype uint16, recursive bool) *dns.Msg {
Expand Down

0 comments on commit c44e405

Please sign in to comment.