Skip to content
Snippets Groups Projects
Commit 39b1908a authored by ale's avatar ale
Browse files

Drop the dependency on clientutil for the ldap package

Just use backoff.Retry() straight away without a wrapper.
parent f0c10982
Branches
No related tags found
No related merge requests found
......@@ -7,11 +7,30 @@ import (
"net/url"
"time"
"git.autistici.org/ai3/go-common/clientutil"
"github.com/cenkalti/backoff"
"gopkg.in/ldap.v2"
)
// Parameters that define the exponential backoff algorithm used.
var (
ExponentialBackOffInitialInterval = 100 * time.Millisecond
ExponentialBackOffMultiplier = 1.4142
)
// newExponentialBackOff creates a backoff.ExponentialBackOff object
// with our own default values.
func newExponentialBackOff() *backoff.ExponentialBackOff {
b := backoff.NewExponentialBackOff()
b.InitialInterval = ExponentialBackOffInitialInterval
b.Multiplier = ExponentialBackOffMultiplier
// Set MaxElapsedTime to 0 because we expect the overall
// timeout to be dictated by the request Context.
b.MaxElapsedTime = 0
return b
}
// ConnectionPool provides a goroutine-safe pool of long-lived LDAP
// connections that will reconnect on errors.
type ConnectionPool struct {
......@@ -129,14 +148,14 @@ func NewConnectionPool(uri, bindDN, bindPw string, cacheSize int) (*ConnectionPo
}
func (p *ConnectionPool) doRequest(ctx context.Context, fn func(*ldap.Conn) error) error {
return clientutil.Retry(func() error {
return backoff.Retry(func() error {
conn, err := p.Get(ctx)
if err != nil {
// Here conn is nil, so we don't need to Release it.
if isTemporaryLDAPError(err) {
return clientutil.TempError(err)
return err
}
return err
return backoff.Permanent(err)
}
if deadline, ok := ctx.Deadline(); ok {
......@@ -144,13 +163,12 @@ func (p *ConnectionPool) doRequest(ctx context.Context, fn func(*ldap.Conn) erro
}
err = fn(conn)
if err != nil && isTemporaryLDAPError(err) {
p.Release(conn, err)
return clientutil.TempError(err)
}
p.Release(conn, err)
if err != nil && !isTemporaryLDAPError(err) {
err = backoff.Permanent(err)
}
return err
}, backoff.WithContext(clientutil.NewExponentialBackOff(), ctx))
}, backoff.WithContext(newExponentialBackOff(), ctx))
}
// Search performs the given search request. It will retry the request
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment