Skip to content

Commit 4de142b

Browse files
Merge pull request #4196 from pmtk/recover-and-repanic
USHIFT-4519: Recover and re-panic certain subcomponents
2 parents 8af8fd0 + 0f9692a commit 4de142b

File tree

6 files changed

+76
-6
lines changed

6 files changed

+76
-6
lines changed

pkg/controllers/kube-apiserver.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,8 +389,21 @@ func (s *KubeAPIServer) Run(ctx context.Context, ready chan<- struct{}, stopped
389389
"--openshift-config", fd.Name(),
390390
"-v", strconv.Itoa(s.verbosity),
391391
})
392+
393+
panicChannel := make(chan any, 1)
392394
go func() {
395+
defer func() {
396+
if r := recover(); r != nil {
397+
panicChannel <- r
398+
}
399+
}()
393400
errorChannel <- cmd.ExecuteContext(ctx)
394401
}()
395-
return <-errorChannel
402+
403+
select {
404+
case err := <-errorChannel:
405+
return err
406+
case perr := <-panicChannel:
407+
panic(perr)
408+
}
396409
}

pkg/controllers/kube-controller-manager.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,14 +138,27 @@ func (s *KubeControllerManager) Run(ctx context.Context, ready chan<- struct{},
138138
// which expects to be called at most once in a process.
139139
cmd := kubecm.NewControllerManagerCommand()
140140
cmd.SetArgs(s.args)
141+
142+
panicChannel := make(chan any, 1)
141143
go func() {
144+
defer func() {
145+
if r := recover(); r != nil {
146+
panicChannel <- r
147+
}
148+
}()
142149
errorChannel <- cmd.ExecuteContext(ctx)
143150
}()
144151

145152
if err := s.applyFn(); err != nil {
146153
return fmt.Errorf("failed to apply openshift namespaces: %w", err)
147154
}
148-
return <-errorChannel
155+
156+
select {
157+
case err := <-errorChannel:
158+
return err
159+
case perr := <-panicChannel:
160+
panic(perr)
161+
}
149162
}
150163

151164
func mergeAndConvertToArgs(overrides *kubecontrolplanev1.KubeControllerManagerConfig) ([]string, error) {

pkg/controllers/kube-scheduler.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,20 @@ func (s *KubeScheduler) Run(ctx context.Context, ready chan<- struct{}, stopped
9696
return err
9797
}
9898

99+
panicChannel := make(chan any, 1)
99100
go func() {
101+
defer func() {
102+
if r := recover(); r != nil {
103+
panicChannel <- r
104+
}
105+
}()
100106
errorChannel <- kubescheduler.Run(ctx, cc, sched)
101107
}()
102108

103-
return <-errorChannel
109+
select {
110+
case err := <-errorChannel:
111+
return err
112+
case perr := <-panicChannel:
113+
panic(perr)
114+
}
104115
}

pkg/controllers/kube-storage-version-migrator.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,22 @@ func (s *KubeStorageVersionMigrator) Run(ctx context.Context, ready chan<- struc
7373
close(ready)
7474
}()
7575

76+
panicChannel := make(chan any, 1)
7677
go func() {
78+
defer func() {
79+
if r := recover(); r != nil {
80+
panicChannel <- r
81+
}
82+
}()
7783
errorChannel <- s.runMigrator(ctx)
7884
}()
7985

80-
return <-errorChannel
86+
select {
87+
case err := <-errorChannel:
88+
return err
89+
case perr := <-panicChannel:
90+
panic(perr)
91+
}
8192
}
8293

8394
func (s *KubeStorageVersionMigrator) runMigrator(ctx context.Context) error {

pkg/controllers/openshift-route-controller-manager.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,20 @@ func (s *OCPRouteControllerManager) Run(ctx context.Context, ready chan<- struct
187187
close(ready)
188188
}()
189189

190+
panicChannel := make(chan any, 1)
190191
go func() {
192+
defer func() {
193+
if r := recover(); r != nil {
194+
panicChannel <- r
195+
}
196+
}()
191197
errc <- s.run(ctx)
192198
}()
193199

194-
return <-errc
200+
select {
201+
case err := <-errc:
202+
return err
203+
case perr := <-panicChannel:
204+
panic(perr)
205+
}
195206
}

pkg/node/kubelet.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,22 @@ func (s *KubeletServer) Run(ctx context.Context, ready chan<- struct{}, stopped
192192
close(ready)
193193
}()
194194

195+
panicChannel := make(chan any, 1)
195196
go func() {
197+
defer func() {
198+
if r := recover(); r != nil {
199+
panicChannel <- r
200+
}
201+
}()
196202
errc <- kubelet.Run(ctx, kubeletServer, kubeletDeps, utilfeature.DefaultFeatureGate)
197203
}()
198204

199-
return <-errc
205+
select {
206+
case err := <-errc:
207+
return err
208+
case perr := <-panicChannel:
209+
panic(perr)
210+
}
200211
}
201212

202213
func loadConfigFile(name string) (*kubeletconfig.KubeletConfiguration, error) {

0 commit comments

Comments
 (0)