Merge pull request #73076 from yastij/refactor-events

refactor util functions for event recording

Kubernetes-commit: 193f659a1cd454b93cbe1e7b1f13b77c21783461
This commit is contained in:
Kubernetes Publisher 2019-01-18 16:14:25 -08:00
commit 68a55fba7c
2 changed files with 48 additions and 24 deletions

View File

@ -21,7 +21,7 @@ import (
"math/rand" "math/rand"
"time" "time"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
@ -29,10 +29,8 @@ import (
utilruntime "k8s.io/apimachinery/pkg/util/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
"k8s.io/client-go/tools/record/util"
ref "k8s.io/client-go/tools/reference" ref "k8s.io/client-go/tools/reference"
"net/http"
"k8s.io/klog" "k8s.io/klog"
) )
@ -157,16 +155,6 @@ func recordToSink(sink EventSink, event *v1.Event, eventCorrelator *EventCorrela
} }
} }
func isKeyNotFoundError(err error) bool {
statusErr, _ := err.(*errors.StatusError)
if statusErr != nil && statusErr.Status().Code == http.StatusNotFound {
return true
}
return false
}
// recordEvent attempts to write event to a sink. It returns true if the event // recordEvent attempts to write event to a sink. It returns true if the event
// was successfully recorded or discarded, false if it should be retried. // was successfully recorded or discarded, false if it should be retried.
// If updateExistingEvent is false, it creates a new event, otherwise it updates // If updateExistingEvent is false, it creates a new event, otherwise it updates
@ -178,7 +166,7 @@ func recordEvent(sink EventSink, event *v1.Event, patch []byte, updateExistingEv
newEvent, err = sink.Patch(event, patch) newEvent, err = sink.Patch(event, patch)
} }
// Update can fail because the event may have been removed and it no longer exists. // Update can fail because the event may have been removed and it no longer exists.
if !updateExistingEvent || (updateExistingEvent && isKeyNotFoundError(err)) { if !updateExistingEvent || (updateExistingEvent && util.IsKeyNotFoundError(err)) {
// Making sure that ResourceVersion is empty on creation // Making sure that ResourceVersion is empty on creation
event.ResourceVersion = "" event.ResourceVersion = ""
newEvent, err = sink.Create(event) newEvent, err = sink.Create(event)
@ -260,7 +248,7 @@ func (recorder *recorderImpl) generateEvent(object runtime.Object, annotations m
return return
} }
if !validateEventType(eventtype) { if !util.ValidateEventType(eventtype) {
klog.Errorf("Unsupported event type: '%v'", eventtype) klog.Errorf("Unsupported event type: '%v'", eventtype)
return return
} }
@ -275,14 +263,6 @@ func (recorder *recorderImpl) generateEvent(object runtime.Object, annotations m
}() }()
} }
func validateEventType(eventtype string) bool {
switch eventtype {
case v1.EventTypeNormal, v1.EventTypeWarning:
return true
}
return false
}
func (recorder *recorderImpl) Event(object runtime.Object, eventtype, reason, message string) { func (recorder *recorderImpl) Event(object runtime.Object, eventtype, reason, message string) {
recorder.generateEvent(object, nil, metav1.Now(), eventtype, reason, message) recorder.generateEvent(object, nil, metav1.Now(), eventtype, reason, message)
} }

44
tools/record/util/util.go Normal file
View File

@ -0,0 +1,44 @@
/*
Copyright 2019 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package util
import (
"net/http"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
)
// ValidateEventType checks that eventtype is an expected type of event
func ValidateEventType(eventtype string) bool {
switch eventtype {
case v1.EventTypeNormal, v1.EventTypeWarning:
return true
}
return false
}
// IsKeyNotFoundError is utility function that checks if an error is not found error
func IsKeyNotFoundError(err error) bool {
statusErr, _ := err.(*errors.StatusError)
if statusErr != nil && statusErr.Status().Code == http.StatusNotFound {
return true
}
return false
}