mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
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:
commit
167e4d03cc
@ -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
|
||||
}
|
||||
|
||||
|
@ -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{})
|
||||
|
Loading…
Reference in New Issue
Block a user