Unverified Commit 18d0111c authored by yufeiyu's avatar yufeiyu Committed by GitHub
Browse files

Bugfix/analytics controller empty identities (#354)

* In analytics reconcile loop, if identities is empty, do not return error
* If find no mission, do not return directly so that orphan recommendations can be cleaned
Showing with 7 additions and 16 deletions
+7 -16
......@@ -98,7 +98,7 @@ func (c *Controller) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
}
}
finished := c.DoAnalytics(ctx, analytics)
finished := c.analyze(ctx, analytics)
if finished && analytics.Spec.CompletionStrategy.CompletionStrategyType == analysisv1alph1.CompletionStrategyPeriodical {
if analytics.Spec.CompletionStrategy.PeriodSeconds != nil {
......@@ -115,10 +115,10 @@ func (c *Controller) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
return ctrl.Result{RequeueAfter: time.Second * 1}, nil
}
func (c *Controller) DoAnalytics(ctx context.Context, analytics *analysisv1alph1.Analytics) bool {
func (c *Controller) analyze(ctx context.Context, analytics *analysisv1alph1.Analytics) bool {
newStatus := analytics.Status.DeepCopy()
identities, err := c.GetIdentities(ctx, analytics)
identities, err := c.getIdentities(ctx, analytics)
if err != nil {
c.Recorder.Event(analytics, corev1.EventTypeNormal, "FailedSelectResource", err.Error())
msg := fmt.Sprintf("Failed to get idenitities, Analytics %s error %v", klog.KObj(analytics), err)
......@@ -153,11 +153,6 @@ func (c *Controller) DoAnalytics(ctx context.Context, analytics *analysisv1alph1
}
}
if currMissions == nil {
klog.Infof("No missions, return.")
return true
}
var currRecommendations []*analysisv1alph1.Recommendation
labelSet := labels.Set{}
labelSet[known.AnalyticsUidLabel] = string(analytics.UID)
......@@ -204,13 +199,13 @@ func (c *Controller) DoAnalytics(ctx context.Context, analytics *analysisv1alph1
}
}
go c.ExecuteMission(ctx, &wg, analytics, identities, &currMissions[index], existingRecommendation, timeNow)
go c.executeMission(ctx, &wg, analytics, identities, &currMissions[index], existingRecommendation, timeNow)
}
wg.Wait()
finished := false
if executionIndex+concurrency == len(currMissions) {
if executionIndex+concurrency == len(currMissions) || len(currMissions) == 0 {
finished = true
}
......@@ -301,7 +296,7 @@ func (c *Controller) SetupWithManager(mgr ctrl.Manager) error {
Complete(c)
}
func (c *Controller) GetIdentities(ctx context.Context, analytics *analysisv1alph1.Analytics) (map[string]ObjectIdentity, error) {
func (c *Controller) getIdentities(ctx context.Context, analytics *analysisv1alph1.Analytics) (map[string]ObjectIdentity, error) {
identities := map[string]ObjectIdentity{}
for _, rs := range analytics.Spec.ResourceSelectors {
......@@ -382,14 +377,10 @@ func (c *Controller) GetIdentities(ctx context.Context, analytics *analysisv1alp
}
}
if len(identities) == 0 {
return nil, fmt.Errorf("no resource matched resource selector")
}
return identities, nil
}
func (c *Controller) ExecuteMission(ctx context.Context, wg *sync.WaitGroup, analytics *analysisv1alph1.Analytics, identities map[string]ObjectIdentity, mission *analysisv1alph1.RecommendationMission, existingRecommendation *analysisv1alph1.Recommendation, timeNow metav1.Time) {
func (c *Controller) executeMission(ctx context.Context, wg *sync.WaitGroup, analytics *analysisv1alph1.Analytics, identities map[string]ObjectIdentity, mission *analysisv1alph1.RecommendationMission, existingRecommendation *analysisv1alph1.Recommendation, timeNow metav1.Time) {
defer func() {
mission.LastStartTime = &timeNow
klog.Infof("Mission message: %s", mission.Message)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment