(oldObjectMap, newObjectMap map[model.GVKNObjKey]client.Object, descriptionFormat func(client.Object, client.Object, tracev1.ObjectChangeType, *schema.GroupVersionKind) (string, *string))
| 515 | } |
| 516 | |
| 517 | func buildChanges(oldObjectMap, newObjectMap map[model.GVKNObjKey]client.Object, |
| 518 | descriptionFormat func(client.Object, client.Object, tracev1.ObjectChangeType, *schema.GroupVersionKind) (string, *string)) []tracev1.ObjectChange { |
| 519 | // calculate createSet, deleteSet and updateSet |
| 520 | newObjectSet := sets.KeySet(newObjectMap) |
| 521 | oldObjectSet := sets.KeySet(oldObjectMap) |
| 522 | createSet := newObjectSet.Difference(oldObjectSet) |
| 523 | updateSet := newObjectSet.Intersection(oldObjectSet) |
| 524 | deleteSet := oldObjectSet.Difference(newObjectSet) |
| 525 | |
| 526 | // build new slice of reconciliation changes from last round calculation |
| 527 | var changes []tracev1.ObjectChange |
| 528 | allObjectMap := map[tracev1.ObjectChangeType]sets.Set[model.GVKNObjKey]{ |
| 529 | tracev1.ObjectCreationType: createSet, |
| 530 | tracev1.ObjectUpdateType: updateSet, |
| 531 | tracev1.ObjectDeletionType: deleteSet, |
| 532 | } |
| 533 | // Why not use for-range on allObjectMap: |
| 534 | // Order is important here. A for-range on a map can't guarantee the built changes' order. |
| 535 | for _, changeType := range []tracev1.ObjectChangeType{tracev1.ObjectCreationType, tracev1.ObjectUpdateType, tracev1.ObjectDeletionType} { |
| 536 | changeSet := allObjectMap[changeType] |
| 537 | for key := range changeSet { |
| 538 | var oldObj, newObj client.Object |
| 539 | if oldObjectMap != nil { |
| 540 | oldObj = oldObjectMap[key] |
| 541 | } |
| 542 | if newObjectMap != nil { |
| 543 | newObj = newObjectMap[key] |
| 544 | } |
| 545 | obj := newObj |
| 546 | if changeType == tracev1.ObjectDeletionType { |
| 547 | obj = oldObj |
| 548 | } |
| 549 | if changeType == tracev1.ObjectUpdateType && |
| 550 | (oldObj == nil || newObj == nil || oldObj.GetResourceVersion() == newObj.GetResourceVersion()) { |
| 551 | continue |
| 552 | } |
| 553 | isEvent := isEvent(&key.GroupVersionKind) |
| 554 | if isEvent && changeType == tracev1.ObjectDeletionType { |
| 555 | continue |
| 556 | } |
| 557 | var ( |
| 558 | ref *corev1.ObjectReference |
| 559 | eventAttributes *tracev1.EventAttributes |
| 560 | ) |
| 561 | if isEvent { |
| 562 | changeType = tracev1.EventType |
| 563 | evt, _ := obj.(*corev1.Event) |
| 564 | ref = &evt.InvolvedObject |
| 565 | eventAttributes = &tracev1.EventAttributes{ |
| 566 | Name: evt.Name, |
| 567 | Type: evt.Type, |
| 568 | Reason: evt.Reason, |
| 569 | } |
| 570 | } else { |
| 571 | ref = objectRefToReference(key, obj.GetUID(), obj.GetResourceVersion()) |
| 572 | } |
| 573 | description, localDescription := descriptionFormat(oldObj, newObj, changeType, &key.GroupVersionKind) |
| 574 | change := tracev1.ObjectChange{ |
no test coverage detected
searching dependent graphs…