in internal/execution/executor.go [204:247]
func (e *Executor) updateComposition(ctx context.Context, env *Env, oldComp *apiv1.Composition, syn *apiv1.Synthesizer, refs []*apiv1.ResourceSliceRef, revs []apiv1.InputRevisions, rl *krmv1.ResourceList) error {
logger := logr.FromContextOrDiscard(ctx)
return retry.RetryOnConflict(retry.DefaultBackoff, func() error {
comp := &apiv1.Composition{}
err := e.Reader.Get(ctx, client.ObjectKeyFromObject(oldComp), comp)
if err != nil {
return err
}
now := metav1.Now()
comp.Status.InFlightSynthesis.Synthesized = &now
comp.Status.InFlightSynthesis.ResourceSlices = refs
comp.Status.InFlightSynthesis.ObservedSynthesizerGeneration = syn.Generation
comp.Status.InFlightSynthesis.InputRevisions = revs
comp.Status.InFlightSynthesis.Results = nil
for _, result := range rl.Results {
comp.Status.InFlightSynthesis.Results = append(comp.Status.InFlightSynthesis.Results, apiv1.Result{
Message: result.Message,
Severity: result.Severity,
Tags: result.Tags,
})
}
if reason, skip := skipSynthesis(comp, syn, env); skip {
logger.V(0).Info("synthesis is no longer relevant - discarding its output", "reason", reason)
return nil
}
// Swap pending->current->previous syntheses
if findResultError(rl) == nil {
comp.Status.PreviousSynthesis = comp.Status.CurrentSynthesis
comp.Status.CurrentSynthesis = comp.Status.InFlightSynthesis
comp.Status.InFlightSynthesis = nil
}
err = e.Writer.Status().Update(ctx, comp)
if err != nil {
return err
}
logger.V(0).Info("composition status has been updated following successful synthesis")
return nil
})
}