1
- // Copyright 2014 CoreOS, Inc.
1
+ // Copyright 2016 The fleet Authors
2
2
//
3
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
4
// you may not use this file except in compliance with the License.
@@ -16,9 +16,10 @@ package engine
16
16
17
17
import (
18
18
"errors"
19
- "strings"
20
19
"time"
21
20
21
+ etcdErr "github.com/coreos/etcd/error"
22
+
22
23
"github.com/coreos/fleet/log"
23
24
"github.com/coreos/fleet/machine"
24
25
"github.com/coreos/fleet/pkg/lease"
@@ -145,22 +146,23 @@ func rpcAcquireLeadership(reg registry.Registry, lManager lease.Manager, machID
145
146
146
147
func rpcRenewLeadership (lManager lease.Manager , l lease.Lease , ver int , ttl time.Duration ) lease.Lease {
147
148
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 )
156
164
return nil
157
165
}
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
164
166
}
165
167
166
168
log .Debugf ("Engine leadership renewed" )
0 commit comments