mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
recycle pod can't get the event since the channel been closed
This commit is contained in:
parent
2828db8f89
commit
33385214bc
@ -97,7 +97,10 @@ func internalRecycleVolumeByWatchingPodUntilCompletion(pvName string, pod *v1.Po
|
|||||||
// Now only the old pod or the new pod run. Watch it until it finishes
|
// Now only the old pod or the new pod run. Watch it until it finishes
|
||||||
// and send all events on the pod to the PV
|
// and send all events on the pod to the PV
|
||||||
for {
|
for {
|
||||||
event := <-podCh
|
event, ok := <-podCh
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("recycler pod %q watch channel had been closed", pod.Name)
|
||||||
|
}
|
||||||
switch event.Object.(type) {
|
switch event.Object.(type) {
|
||||||
case *v1.Pod:
|
case *v1.Pod:
|
||||||
// POD changed
|
// POD changed
|
||||||
@ -199,13 +202,14 @@ func (c *realRecyclerClient) WatchPod(name, namespace string, stopChannel chan s
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
eventCh := make(chan watch.Event, 0)
|
eventCh := make(chan watch.Event, 30)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
defer eventWatch.Stop()
|
defer eventWatch.Stop()
|
||||||
defer podWatch.Stop()
|
defer podWatch.Stop()
|
||||||
defer close(eventCh)
|
defer close(eventCh)
|
||||||
|
var podWatchChannelClosed bool
|
||||||
|
var eventWatchChannelClosed bool
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case _ = <-stopChannel:
|
case _ = <-stopChannel:
|
||||||
@ -213,15 +217,19 @@ func (c *realRecyclerClient) WatchPod(name, namespace string, stopChannel chan s
|
|||||||
|
|
||||||
case podEvent, ok := <-podWatch.ResultChan():
|
case podEvent, ok := <-podWatch.ResultChan():
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
podWatchChannelClosed = true
|
||||||
|
} else {
|
||||||
|
eventCh <- podEvent
|
||||||
}
|
}
|
||||||
eventCh <- podEvent
|
|
||||||
|
|
||||||
case eventEvent, ok := <-eventWatch.ResultChan():
|
case eventEvent, ok := <-eventWatch.ResultChan():
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
eventWatchChannelClosed = true
|
||||||
|
} else {
|
||||||
|
eventCh <- eventEvent
|
||||||
}
|
}
|
||||||
eventCh <- eventEvent
|
}
|
||||||
|
if podWatchChannelClosed && eventWatchChannelClosed {
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
Loading…
Reference in New Issue
Block a user