don't stop informer delivery on error

This commit is contained in:
David Eads 2018-01-18 13:07:18 -05:00
parent 23226c24d4
commit 2fa93da6d5
7 changed files with 49 additions and 12 deletions

View File

@ -1630,6 +1630,10 @@
"ImportPath": "k8s.io/client-go/util/integer", "ImportPath": "k8s.io/client-go/util/integer",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}, },
{
"ImportPath": "k8s.io/client-go/util/retry",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{ {
"ImportPath": "k8s.io/kube-openapi/pkg/builder", "ImportPath": "k8s.io/kube-openapi/pkg/builder",
"Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3" "Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3"

View File

@ -1762,6 +1762,10 @@
"ImportPath": "k8s.io/client-go/util/integer", "ImportPath": "k8s.io/client-go/util/integer",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}, },
{
"ImportPath": "k8s.io/client-go/util/retry",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{ {
"ImportPath": "k8s.io/kube-openapi/pkg/builder", "ImportPath": "k8s.io/kube-openapi/pkg/builder",
"Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3" "Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3"

View File

@ -83,6 +83,7 @@ go_library(
"//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library",
"//vendor/k8s.io/client-go/tools/pager:go_default_library", "//vendor/k8s.io/client-go/tools/pager:go_default_library",
"//vendor/k8s.io/client-go/util/buffer:go_default_library", "//vendor/k8s.io/client-go/util/buffer:go_default_library",
"//vendor/k8s.io/client-go/util/retry:go_default_library",
], ],
) )

View File

@ -26,6 +26,7 @@ import (
utilruntime "k8s.io/apimachinery/pkg/util/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/util/buffer" "k8s.io/client-go/util/buffer"
"k8s.io/client-go/util/retry"
"github.com/golang/glog" "github.com/golang/glog"
) )
@ -540,8 +541,14 @@ func (p *processorListener) pop() {
} }
func (p *processorListener) run() { func (p *processorListener) run() {
defer utilruntime.HandleCrash() // this call blocks until the channel is closed. When a panic happens during the notification
// we will catch it, **the offending item will be skipped!**, and after a short delay (one second)
// the next notification will be attempted. This is usually better than the alternative of never
// delivering again.
stopCh := make(chan struct{})
wait.Until(func() {
// this gives us a few quick retries before a long pause and then a few more quick retries
err := wait.ExponentialBackoff(retry.DefaultRetry, func() (bool, error) {
for next := range p.nextCh { for next := range p.nextCh {
switch notification := next.(type) { switch notification := next.(type) {
case updateNotification: case updateNotification:
@ -554,6 +561,15 @@ func (p *processorListener) run() {
utilruntime.HandleError(fmt.Errorf("unrecognized notification: %#v", next)) utilruntime.HandleError(fmt.Errorf("unrecognized notification: %#v", next))
} }
} }
// the only way to get here is if the p.nextCh is empty and closed
return true, nil
})
// the only way to get here is if the p.nextCh is empty and closed
if err == nil {
close(stopCh)
}
}, 1*time.Minute, stopCh)
} }
// shouldResync deterimines if the listener needs a resync. If the listener's resyncPeriod is 0, // shouldResync deterimines if the listener needs a resync. If the listener's resyncPeriod is 0,

View File

@ -1614,6 +1614,10 @@
"ImportPath": "k8s.io/client-go/util/integer", "ImportPath": "k8s.io/client-go/util/integer",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}, },
{
"ImportPath": "k8s.io/client-go/util/retry",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{ {
"ImportPath": "k8s.io/client-go/util/workqueue", "ImportPath": "k8s.io/client-go/util/workqueue",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

View File

@ -1606,6 +1606,10 @@
"ImportPath": "k8s.io/client-go/util/integer", "ImportPath": "k8s.io/client-go/util/integer",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}, },
{
"ImportPath": "k8s.io/client-go/util/retry",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{ {
"ImportPath": "k8s.io/kube-openapi/pkg/builder", "ImportPath": "k8s.io/kube-openapi/pkg/builder",
"Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3" "Rev": "a07b7bbb58e7fdc5144f8d7046331d29fc9ad3b3"

View File

@ -890,6 +890,10 @@
"ImportPath": "k8s.io/client-go/util/integer", "ImportPath": "k8s.io/client-go/util/integer",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}, },
{
"ImportPath": "k8s.io/client-go/util/retry",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{ {
"ImportPath": "k8s.io/client-go/util/workqueue", "ImportPath": "k8s.io/client-go/util/workqueue",
"Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"