(sink EventSink, event *v1beta1.Event)
| 199 | } |
| 200 | |
| 201 | func recordEvent(sink EventSink, event *v1beta1.Event) (*v1beta1.Event, bool) { |
| 202 | var newEvent *v1beta1.Event |
| 203 | var err error |
| 204 | isEventSeries := event.Series != nil |
| 205 | if isEventSeries { |
| 206 | patch, err := createPatchBytesForSeries(event) |
| 207 | if err != nil { |
| 208 | klog.Errorf("Unable to calculate diff, no merge is possible: %v", err) |
| 209 | return nil, false |
| 210 | } |
| 211 | newEvent, err = sink.Patch(event, patch) |
| 212 | } |
| 213 | // Update can fail because the event may have been removed and it no longer exists. |
| 214 | if !isEventSeries || (isEventSeries && util.IsKeyNotFoundError(err)) { |
| 215 | // Making sure that ResourceVersion is empty on creation |
| 216 | event.ResourceVersion = "" |
| 217 | newEvent, err = sink.Create(event) |
| 218 | } |
| 219 | if err == nil { |
| 220 | return newEvent, false |
| 221 | } |
| 222 | // If we can't contact the server, then hold everything while we keep trying. |
| 223 | // Otherwise, something about the event is malformed and we should abandon it. |
| 224 | switch err.(type) { |
| 225 | case *restclient.RequestConstructionError: |
| 226 | // We will construct the request the same next time, so don't keep trying. |
| 227 | klog.Errorf("Unable to construct event '%#v': '%v' (will not retry!)", event, err) |
| 228 | return nil, false |
| 229 | case *errors.StatusError: |
| 230 | if errors.IsAlreadyExists(err) { |
| 231 | klog.V(5).Infof("Server rejected event '%#v': '%v' (will not retry!)", event, err) |
| 232 | } else { |
| 233 | klog.Errorf("Server rejected event '%#v': '%v' (will not retry!)", event, err) |
| 234 | } |
| 235 | return nil, false |
| 236 | case *errors.UnexpectedObjectError: |
| 237 | // We don't expect this; it implies the server's response didn't match a |
| 238 | // known pattern. Go ahead and retry. |
| 239 | default: |
| 240 | // This case includes actual http transport errors. Go ahead and retry. |
| 241 | } |
| 242 | klog.Errorf("Unable to write event: '%v' (may retry after sleeping)", err) |
| 243 | return nil, true |
| 244 | } |
| 245 | |
| 246 | func createPatchBytesForSeries(event *v1beta1.Event) ([]byte, error) { |
| 247 | oldEvent := event.DeepCopy() |
no test coverage detected