feat: Efficient runner set looks up for the deployment controller
Enhances the deployment controller to use indexed lookups against runner sets for more scalability.
This commit is contained in:
		
							parent
							
								
									9d634d88ff
								
							
						
					
					
						commit
						31fb7cc113
					
				|  | @ -38,6 +38,8 @@ import ( | |||
| 
 | ||||
| const ( | ||||
| 	LabelKeyRunnerTemplateHash = "runner-template-hash" | ||||
| 
 | ||||
| 	runnerSetOwnerKey = ".metadata.controller" | ||||
| ) | ||||
| 
 | ||||
| // RunnerDeploymentReconciler reconciles a Runner object
 | ||||
|  | @ -66,22 +68,14 @@ func (r *RunnerDeploymentReconciler) Reconcile(req ctrl.Request) (ctrl.Result, e | |||
| 		return ctrl.Result{}, nil | ||||
| 	} | ||||
| 
 | ||||
| 	var allRunnerSets v1alpha1.RunnerSetList | ||||
| 	if err := r.List(ctx, &allRunnerSets, client.InNamespace(req.Namespace)); err != nil { | ||||
| 	var myRunnerSetList v1alpha1.RunnerSetList | ||||
| 	if err := r.List(ctx, &myRunnerSetList, client.InNamespace(req.Namespace), client.MatchingFields{runnerSetOwnerKey: req.Name}); err != nil { | ||||
| 		if !errors.IsNotFound(err) { | ||||
| 			return ctrl.Result{}, err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	var myRunnerSets []*v1alpha1.RunnerSet | ||||
| 
 | ||||
| 	for i := range allRunnerSets.Items { | ||||
| 		rs := allRunnerSets.Items[i] | ||||
| 
 | ||||
| 		if metav1.IsControlledBy(&rs, &rd) { | ||||
| 			myRunnerSets = append(myRunnerSets, &rs) | ||||
| 		} | ||||
| 	} | ||||
| 	myRunnerSets := myRunnerSetList.Items | ||||
| 
 | ||||
| 	sort.Slice(myRunnerSets, func(i, j int) bool { | ||||
| 		return myRunnerSets[i].GetCreationTimestamp().After(myRunnerSets[j].GetCreationTimestamp().Time) | ||||
|  | @ -89,10 +83,10 @@ func (r *RunnerDeploymentReconciler) Reconcile(req ctrl.Request) (ctrl.Result, e | |||
| 
 | ||||
| 	var newestSet *v1alpha1.RunnerSet | ||||
| 
 | ||||
| 	var oldSets []*v1alpha1.RunnerSet | ||||
| 	var oldSets []v1alpha1.RunnerSet | ||||
| 
 | ||||
| 	if len(myRunnerSets) > 0 { | ||||
| 		newestSet = myRunnerSets[0] | ||||
| 		newestSet = &myRunnerSets[0] | ||||
| 	} | ||||
| 
 | ||||
| 	if len(myRunnerSets) > 1 { | ||||
|  | @ -156,7 +150,7 @@ func (r *RunnerDeploymentReconciler) Reconcile(req ctrl.Request) (ctrl.Result, e | |||
| 	for i := range oldSets { | ||||
| 		rs := oldSets[i] | ||||
| 
 | ||||
| 		if err := r.Client.Delete(ctx, rs); err != nil { | ||||
| 		if err := r.Client.Delete(ctx, &rs); err != nil { | ||||
| 			log.Error(err, "Failed to delete runner resource") | ||||
| 
 | ||||
| 			return ctrl.Result{}, err | ||||
|  | @ -246,6 +240,22 @@ func (r *RunnerDeploymentReconciler) newRunnerSet(rd v1alpha1.RunnerDeployment) | |||
| func (r *RunnerDeploymentReconciler) SetupWithManager(mgr ctrl.Manager) error { | ||||
| 	r.Recorder = mgr.GetEventRecorderFor("runnerdeployment-controller") | ||||
| 
 | ||||
| 	if err := mgr.GetFieldIndexer().IndexField(&v1alpha1.RunnerSet{}, runnerSetOwnerKey, func(rawObj runtime.Object) []string { | ||||
| 		runnerSet := rawObj.(*v1alpha1.RunnerSet) | ||||
| 		owner := metav1.GetControllerOf(runnerSet) | ||||
| 		if owner == nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 
 | ||||
| 		if owner.APIVersion != v1alpha1.GroupVersion.String() || owner.Kind != "RunnerSet" { | ||||
| 			return nil | ||||
| 		} | ||||
| 
 | ||||
| 		return []string{owner.Name} | ||||
| 	}); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	return ctrl.NewControllerManagedBy(mgr). | ||||
| 		For(&v1alpha1.RunnerDeployment{}). | ||||
| 		Owns(&v1alpha1.RunnerSet{}). | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue