1- // Copyright 2014 CoreOS, Inc.
1+ // Copyright 2016 The fleet Authors
22//
33// Licensed under the Apache License, Version 2.0 (the "License");
44// you may not use this file except in compliance with the License.
@@ -16,9 +16,10 @@ package engine
1616
1717import (
1818 "errors"
19- "strings"
2019 "time"
2120
21+ etcdErr "github.com/coreos/etcd/error"
22+
2223 "github.com/coreos/fleet/log"
2324 "github.com/coreos/fleet/machine"
2425 "github.com/coreos/fleet/pkg/lease"
@@ -145,22 +146,23 @@ func rpcAcquireLeadership(reg registry.Registry, lManager lease.Manager, machID
145146
146147func rpcRenewLeadership (lManager lease.Manager , l lease.Lease , ver int , ttl time.Duration ) lease.Lease {
147148 err := l .Renew (ttl )
148- if err != nil && strings .Contains (err .Error (), "Key not found" ) {
149- log .Errorf ("Retry renew etcd operation that failed due to %v" , err )
150- l , err = lManager .AcquireLease (engineLeaseName , l .MachineID (), ver , ttl )
151- if err != nil {
152- log .Errorf ("Engine leadership re-acquisition failed: %v" , err )
153- return nil
154- } else if l == nil {
155- log .Infof ("Unable to re-acquire engine leadership" )
149+ if err != nil {
150+ if eerr , ok := err .(* etcdErr.Error ); ok && eerr .ErrorCode == etcdErr .EcodeKeyNotFound {
151+ log .Errorf ("Retry renew etcd operation that failed due to %v" , err )
152+ l , err = lManager .AcquireLease (engineLeaseName , l .MachineID (), ver , ttl )
153+ if err != nil {
154+ log .Errorf ("Engine leadership re-acquisition failed: %v" , err )
155+ return nil
156+ } else if l == nil {
157+ log .Infof ("Unable to re-acquire engine leadership" )
158+ return nil
159+ }
160+ log .Infof ("Engine leadership re-acquired" )
161+ return l
162+ } else {
163+ log .Errorf ("Engine leadership lost, renewal failed: %v" , err )
156164 return nil
157165 }
158- log .Infof ("Engine leadership re-acquired" )
159- return l
160-
161- } else if err != nil {
162- log .Errorf ("Engine leadership lost, renewal failed: %v" , err )
163- return nil
164166 }
165167
166168 log .Debugf ("Engine leadership renewed" )
0 commit comments