recycle pod can't get the event since the channel been closed

This commit is contained in:
wenlxie 2017-03-09 20:57:15 +08:00
parent 2828db8f89
commit 33385214bc

View File

@ -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
} }
} }
}() }()