MCPcopy
hub / github.com/apecloud/kubeblocks / Reconcile

Method Reconcile

controllers/trace/current_state_handler.go:51–137  ·  view source on GitHub ↗
(tree *kubebuilderx.ObjectTree)

Source from the content-addressed store, hash-verified

49}
50
51func (c *traceCalculator) Reconcile(tree *kubebuilderx.ObjectTree) (kubebuilderx.Result, error) {
52 trace, _ := tree.GetRoot().(*tracev1.ReconciliationTrace)
53 objs := tree.List(&corev1.ConfigMap{})
54 var i18nResource *corev1.ConfigMap
55 if len(objs) > 0 {
56 i18nResource, _ = objs[0].(*corev1.ConfigMap)
57 }
58
59 root := &kbappsv1.Cluster{}
60 objectKey := client.ObjectKeyFromObject(trace)
61 if trace.Spec.TargetObject != nil {
62 objectKey = client.ObjectKey{
63 Namespace: trace.Spec.TargetObject.Namespace,
64 Name: trace.Spec.TargetObject.Name,
65 }
66 }
67 if err := c.cli.Get(c.ctx, objectKey, root); err != nil {
68 return kubebuilderx.Commit, err
69 }
70
71 // handle object changes
72 // build new object set from cache
73 newObjectMap, err := getObjectsFromCache(c.ctx, c.cli, root, getKBOwnershipRules())
74 if err != nil {
75 return kubebuilderx.Commit, err
76 }
77 // build old object set from store
78 currentState := &trace.Status.CurrentState
79 oldObjectMap, err := getObjectsFromTree(currentState.ObjectTree, c.store, c.scheme)
80 if err != nil {
81 return kubebuilderx.Commit, err
82 }
83 changes := buildChanges(oldObjectMap, newObjectMap, buildDescriptionFormatter(i18nResource, defaultLocale, trace.Spec.Locale))
84
85 // handle event changes
86 newEventMap, err := filterEvents(getEventsFromCache(c.ctx, c.cli), newObjectMap)
87 if err != nil {
88 return kubebuilderx.Commit, err
89 }
90 oldEventMap, err := filterEvents(getEventsFromStore(c.store), oldObjectMap)
91 if err != nil {
92 return kubebuilderx.Commit, err
93 }
94 eventChanges := buildChanges(oldEventMap, newEventMap, buildDescriptionFormatter(i18nResource, defaultLocale, trace.Spec.Locale))
95 changes = append(changes, eventChanges...)
96
97 if len(changes) == 0 {
98 return kubebuilderx.Continue, nil
99 }
100
101 // sort the changes by resource version.
102 sort.SliceStable(changes, func(i, j int) bool {
103 return changes[i].Revision < changes[j].Revision
104 })
105
106 // concat it to current changes
107 currentState.Changes = append(currentState.Changes, changes...)
108

Callers

nothing calls this directly

Calls 14

getObjectsFromCacheFunction · 0.85
getKBOwnershipRulesFunction · 0.85
getObjectsFromTreeFunction · 0.85
buildChangesFunction · 0.85
filterEventsFunction · 0.85
getEventsFromCacheFunction · 0.85
getEventsFromStoreFunction · 0.85
buildObjectSummariesFunction · 0.85
GetRootMethod · 0.80
ListMethod · 0.65

Tested by

no test coverage detected