Merge pull request #23734 from sky-uk/fix-update-for-expired-events

Automatic merge from submit-queue

Fix expired event logic to use 404 instead of 500

It seems this logic was never updated once apiserver started returning 404s for expired (missing) events.

This change corrects it to use a 404 so events will get resent correctly if they were expired in etcd.

Fixes #23637.
This commit is contained in:
k8s-merge-robot 2016-04-16 12:46:07 -07:00
commit 167e4d03cc
2 changed files with 41 additions and 4 deletions

View File

@ -31,6 +31,7 @@ import (
"k8s.io/kubernetes/pkg/watch"
"github.com/golang/glog"
"net/http"
)
const maxTriesPerEvent = 12
@ -153,12 +154,11 @@ func recordToSink(sink EventSink, event *api.Event, eventCorrelator *EventCorrel
func isKeyNotFoundError(err error) bool {
statusErr, _ := err.(*errors.StatusError)
// At the moment the server is returning 500 instead of a more specific
// error. When changing this remember that it should be backward compatible
// with old api servers that may be still returning 500.
if statusErr != nil && statusErr.Status().Code == 500 {
if statusErr != nil && statusErr.Status().Code == http.StatusNotFound {
return true
}
return false
}

View File

@ -27,10 +27,12 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/errors"
_ "k8s.io/kubernetes/pkg/api/install" // To register api.Pod used in tests below
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/client/restclient"
k8sruntime "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util"
"k8s.io/kubernetes/pkg/util/strategicpatch"
"net/http"
)
type testEventSink struct {
@ -437,6 +439,41 @@ func TestWriteEventError(t *testing.T) {
}
}
func TestUpdateExpiredEvent(t *testing.T) {
eventCorrelator := NewEventCorrelator(util.RealClock{})
randGen := rand.New(rand.NewSource(time.Now().UnixNano()))
var createdEvent *api.Event
sink := &testEventSink{
OnPatch: func(*api.Event, []byte) (*api.Event, error) {
return nil, &errors.StatusError{
ErrStatus: unversioned.Status{
Code: http.StatusNotFound,
Reason: unversioned.StatusReasonNotFound,
}}
},
OnCreate: func(event *api.Event) (*api.Event, error) {
createdEvent = event
return event, nil
},
}
ev := &api.Event{}
ev.ResourceVersion = "updated-resource-version"
ev.Count = 2
recordToSink(sink, ev, eventCorrelator, randGen, 0)
if createdEvent == nil {
t.Error("Event did not get created after patch failed")
return
}
if createdEvent.ResourceVersion != "" {
t.Errorf("Event did not have its resource version cleared, was %s", createdEvent.ResourceVersion)
}
}
func TestLotsOfEvents(t *testing.T) {
recorderCalled := make(chan struct{})
loggerCalled := make(chan struct{})