@@ -158,41 +158,15 @@ func (cm *controllerManager) GetRESTMapper() meta.RESTMapper {
158
158
}
159
159
160
160
func (cm * controllerManager ) Start (stop <- chan struct {}) error {
161
- if cm .resourceLock == nil {
162
- go cm .start (stop )
163
- select {
164
- case <- stop :
165
- // we are done
166
- return nil
167
- case err := <- cm .errChan :
168
- // Error starting a controller
161
+ if cm .resourceLock != nil {
162
+ err := cm .startLeaderElection (stop )
163
+ if err != nil {
169
164
return err
170
165
}
166
+ } else {
167
+ go cm .start (stop )
171
168
}
172
169
173
- l , err := leaderelection .NewLeaderElector (leaderelection.LeaderElectionConfig {
174
- Lock : cm .resourceLock ,
175
- // Values taken from: https://github.com/kubernetes/apiserver/blob/master/pkg/apis/config/v1alpha1/defaults.go
176
- // TODO(joelspeed): These timings should be configurable
177
- LeaseDuration : 15 * time .Second ,
178
- RenewDeadline : 10 * time .Second ,
179
- RetryPeriod : 2 * time .Second ,
180
- Callbacks : leaderelection.LeaderCallbacks {
181
- OnStartedLeading : cm .start ,
182
- OnStoppedLeading : func () {
183
- // Most implementations of leader election log.Fatal() here.
184
- // Since Start is wrapped in log.Fatal when called, we can just return
185
- // an error here which will cause the program to exit.
186
- cm .errChan <- fmt .Errorf ("leader election lost" )
187
- },
188
- },
189
- })
190
- if err != nil {
191
- return err
192
- }
193
-
194
- go l .Run ()
195
-
196
170
select {
197
171
case <- stop :
198
172
// We are done
@@ -243,3 +217,32 @@ func (cm *controllerManager) start(stop <-chan struct{}) {
243
217
return
244
218
}
245
219
}
220
+
221
+ func (cm * controllerManager ) startLeaderElection (stop <- chan struct {}) (err error ) {
222
+ l , err := leaderelection .NewLeaderElector (leaderelection.LeaderElectionConfig {
223
+ Lock : cm .resourceLock ,
224
+ // Values taken from: https://github.com/kubernetes/apiserver/blob/master/pkg/apis/config/v1alpha1/defaults.go
225
+ // TODO(joelspeed): These timings should be configurable
226
+ LeaseDuration : 15 * time .Second ,
227
+ RenewDeadline : 10 * time .Second ,
228
+ RetryPeriod : 2 * time .Second ,
229
+ Callbacks : leaderelection.LeaderCallbacks {
230
+ OnStartedLeading : func (_ <- chan struct {}) {
231
+ cm .start (stop )
232
+ },
233
+ OnStoppedLeading : func () {
234
+ // Most implementations of leader election log.Fatal() here.
235
+ // Since Start is wrapped in log.Fatal when called, we can just return
236
+ // an error here which will cause the program to exit.
237
+ cm .errChan <- fmt .Errorf ("leader election lost" )
238
+ },
239
+ },
240
+ })
241
+ if err != nil {
242
+ return err
243
+ }
244
+
245
+ // Start the leader elector process
246
+ go l .Run ()
247
+ return nil
248
+ }
0 commit comments