@@ -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
@@ -235,3 +209,32 @@ func (cm *controllerManager) start(stop <-chan struct{}) {
235
209
236
210
cm .started = true
237
211
}
212
+
213
+ func (cm * controllerManager ) startLeaderElection (stop <- chan struct {}) (err error ) {
214
+ l , err := leaderelection .NewLeaderElector (leaderelection.LeaderElectionConfig {
215
+ Lock : cm .resourceLock ,
216
+ // Values taken from: https://github.com/kubernetes/apiserver/blob/master/pkg/apis/config/v1alpha1/defaults.go
217
+ // TODO(joelspeed): These timings should be configurable
218
+ LeaseDuration : 15 * time .Second ,
219
+ RenewDeadline : 10 * time .Second ,
220
+ RetryPeriod : 2 * time .Second ,
221
+ Callbacks : leaderelection.LeaderCallbacks {
222
+ OnStartedLeading : func (_ <- chan struct {}) {
223
+ cm .start (stop )
224
+ },
225
+ OnStoppedLeading : func () {
226
+ // Most implementations of leader election log.Fatal() here.
227
+ // Since Start is wrapped in log.Fatal when called, we can just return
228
+ // an error here which will cause the program to exit.
229
+ cm .errChan <- fmt .Errorf ("leader election lost" )
230
+ },
231
+ },
232
+ })
233
+ if err != nil {
234
+ return err
235
+ }
236
+
237
+ // Start the leader elector process
238
+ go l .Run ()
239
+ return nil
240
+ }
0 commit comments