Bug fix: #30 NewRealisClient method returning <nil> error when zookeeper leader not found
This commit is contained in:
parent
14483e13a5
commit
719a121ed5
2 changed files with 19 additions and 16 deletions
|
@ -168,9 +168,12 @@ func NewRealisClient(options ...option) (Realis, error) {
|
||||||
//Cluster or URL?
|
//Cluster or URL?
|
||||||
if config.cluster != nil {
|
if config.cluster != nil {
|
||||||
url, err = LeaderFromZK(*config.cluster)
|
url, err = LeaderFromZK(*config.cluster)
|
||||||
|
|
||||||
|
// If ZK is configured, throw an error if the leader is unable to be determined
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("LeaderFromZK error: %+v\n ", err)
|
return nil, errors.Wrap(err, "LeaderFromZK error")
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("schedURLFromZK: ", url)
|
fmt.Println("schedURLFromZK: ", url)
|
||||||
} else if config.url != "" {
|
} else if config.url != "" {
|
||||||
fmt.Println("Scheduler URL: ", config.url)
|
fmt.Println("Scheduler URL: ", config.url)
|
||||||
|
|
30
zk.go
30
zk.go
|
@ -41,32 +41,32 @@ type NoopLogger struct{}
|
||||||
func (NoopLogger) Printf(format string, a ...interface{}) {
|
func (NoopLogger) Printf(format string, a ...interface{}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loads leader from ZK endpoint.
|
// Retrieves current Aurora leader from ZK.
|
||||||
func LeaderFromZK(cluster Cluster) (string, error) {
|
func LeaderFromZK(cluster Cluster) (string, error) {
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
var zkurl string
|
var zkurl string
|
||||||
|
|
||||||
duration := defaultBackoff.Duration
|
duration := defaultBackoff.Duration
|
||||||
for i := 0; i < defaultBackoff.Steps; i++ {
|
for step := 0; step < defaultBackoff.Steps; step++ {
|
||||||
if i != 0 {
|
|
||||||
adjusted := duration
|
// Attempt to find leader
|
||||||
if defaultBackoff.Jitter > 0.0 {
|
zkurl, err = leaderFromZK(cluster)
|
||||||
adjusted = Jitter(duration, defaultBackoff.Jitter)
|
if err == nil {
|
||||||
}
|
|
||||||
fmt.Println(" sleeping for: ", adjusted)
|
|
||||||
time.Sleep(adjusted)
|
|
||||||
duration = time.Duration(float64(duration) * defaultBackoff.Factor)
|
|
||||||
}
|
|
||||||
if zkurl, err = leaderFromZK(cluster); err == nil {
|
|
||||||
return zkurl, err
|
return zkurl, err
|
||||||
}
|
}
|
||||||
if err != nil {
|
|
||||||
fmt.Println("error in LeaderFromZK: ", err)
|
// Backoff if we failed to determine leader
|
||||||
|
adjusted := duration
|
||||||
|
if defaultBackoff.Jitter > 0.0 {
|
||||||
|
adjusted = Jitter(duration, defaultBackoff.Jitter)
|
||||||
}
|
}
|
||||||
|
fmt.Printf("Error determining Aurora leader: %v; retrying in %v\n", err, adjusted)
|
||||||
|
time.Sleep(adjusted)
|
||||||
|
duration = time.Duration(float64(duration) * defaultBackoff.Factor)
|
||||||
}
|
}
|
||||||
|
|
||||||
return "", err
|
return "", errors.Wrapf(err, "Failed to determine leader after %v attempts", defaultBackoff.Steps)
|
||||||
}
|
}
|
||||||
|
|
||||||
func leaderFromZK(cluster Cluster) (string, error) {
|
func leaderFromZK(cluster Cluster) (string, error) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue