(tree *tracev1.ObjectTreeNode, store ObjectRevisionStore, scheme *runtime.Scheme)
| 637 | } |
| 638 | |
| 639 | func getObjectsFromTree(tree *tracev1.ObjectTreeNode, store ObjectRevisionStore, scheme *runtime.Scheme) (map[model.GVKNObjKey]client.Object, error) { |
| 640 | if tree == nil { |
| 641 | return nil, nil |
| 642 | } |
| 643 | objectRef := objectReferenceToRef(&tree.Primary) |
| 644 | revision := parseRevision(tree.Primary.ResourceVersion) |
| 645 | obj, err := store.Get(objectRef, revision) |
| 646 | if err != nil && !apierrors.IsNotFound(err) { |
| 647 | return nil, err |
| 648 | } |
| 649 | objectMap := make(map[model.GVKNObjKey]client.Object) |
| 650 | // cache loss after controller restarted, mock one |
| 651 | if obj == nil { |
| 652 | ro, err := scheme.New(objectRef.GroupVersionKind) |
| 653 | if err != nil { |
| 654 | return nil, err |
| 655 | } |
| 656 | obj, _ = ro.(client.Object) |
| 657 | obj.SetNamespace(tree.Primary.Namespace) |
| 658 | obj.SetName(tree.Primary.Name) |
| 659 | obj.SetResourceVersion(tree.Primary.ResourceVersion) |
| 660 | obj.SetUID(tree.Primary.UID) |
| 661 | } |
| 662 | objectMap[*objectRef] = obj |
| 663 | |
| 664 | for _, treeNode := range tree.Secondaries { |
| 665 | secondaryMap, err := getObjectsFromTree(treeNode, store, scheme) |
| 666 | if err != nil { |
| 667 | return nil, err |
| 668 | } |
| 669 | for key, object := range secondaryMap { |
| 670 | objectMap[key] = object |
| 671 | } |
| 672 | } |
| 673 | return objectMap, nil |
| 674 | } |
| 675 | |
| 676 | func getObjectTreeWithRevision(primary client.Object, ownershipRules []OwnershipRule, store ObjectRevisionStore, revision int64, scheme *runtime.Scheme) (*tracev1.ObjectTreeNode, error) { |
| 677 | // find matched rules |
no test coverage detected
searching dependent graphs…