Skip to content

Commit

Permalink
feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
EronWright committed Oct 17, 2024
1 parent c1bb90a commit 0c4e8cb
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 65 deletions.
10 changes: 5 additions & 5 deletions operator/internal/controller/auto/update_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,15 +199,15 @@ func isWorkspaceReady(ws *autov1alpha1.Workspace) bool {
return meta.IsStatusConditionTrue(ws.Status.Conditions, autov1alpha1.WorkspaceReady)
}

type workspaceReadyPredicate struct {
predicate.Funcs
}
type workspaceReadyPredicate struct{}

var _ predicate.Predicate = &workspaceReadyPredicate{}

func (workspaceReadyPredicate) Create(e event.CreateEvent) bool {
return isWorkspaceReady(e.Object.(*autov1alpha1.Workspace))
}

func (workspaceReadyPredicate) Delete(e event.DeleteEvent) bool {
func (workspaceReadyPredicate) Delete(_ event.DeleteEvent) bool {
return false
}

Expand All @@ -218,7 +218,7 @@ func (workspaceReadyPredicate) Update(e event.UpdateEvent) bool {
return !isWorkspaceReady(e.ObjectOld.(*autov1alpha1.Workspace)) && isWorkspaceReady(e.ObjectNew.(*autov1alpha1.Workspace))
}

func (workspaceReadyPredicate) Generic(e event.GenericEvent) bool {
func (workspaceReadyPredicate) Generic(_ event.GenericEvent) bool {
return false
}

Expand Down
3 changes: 2 additions & 1 deletion operator/internal/controller/auto/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,11 @@ func marshalConfigValue(item autov1alpha1.ConfigItem) *agentpb.ConfigValue {
var l = log.Log.WithName("predicate").WithName("debug")

type DebugPredicate struct {
predicate.Funcs
Controller string
}

var _ predicate.Predicate = &DebugPredicate{}

func (p *DebugPredicate) Create(e event.CreateEvent) bool {
l.V(1).Info("Create", "controller", p.Controller, "type", fmt.Sprintf("%T", e.Object), "name", e.Object.GetName(), "revision", e.Object.GetResourceVersion())
return true
Expand Down
31 changes: 16 additions & 15 deletions operator/internal/controller/auto/workspace_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -333,35 +333,36 @@ func (r *WorkspaceReconciler) SetupWithManager(mgr ctrl.Manager) error {
Complete(r)
}

type statefulSetReadyPredicate struct {
predicate.Funcs
type statefulSetReadyPredicate struct{}

var _ predicate.Predicate = &statefulSetReadyPredicate{}

func isStatefulSetReady(ss *appsv1.StatefulSet) bool {
if ss.Status.ObservedGeneration != ss.Generation || ss.Status.UpdateRevision != ss.Status.CurrentRevision {
return false
}
if ss.Status.AvailableReplicas < 1 {
return false
}
return true
}

func (statefulSetReadyPredicate) Create(e event.CreateEvent) bool {
return false
return isStatefulSetReady(e.Object.(*appsv1.StatefulSet))
}

func (statefulSetReadyPredicate) Delete(e event.DeleteEvent) bool {
func (statefulSetReadyPredicate) Delete(_ event.DeleteEvent) bool {
return false
}

func (statefulSetReadyPredicate) Update(e event.UpdateEvent) bool {
if e.ObjectOld == nil || e.ObjectNew == nil {
return false
}
ready := func(ss *appsv1.StatefulSet) bool {
if ss.Status.ObservedGeneration != ss.Generation || ss.Status.UpdateRevision != ss.Status.CurrentRevision {
return false
}
if ss.Status.AvailableReplicas < 1 {
return false
}
return true
}
return !ready(e.ObjectOld.(*appsv1.StatefulSet)) && ready(e.ObjectNew.(*appsv1.StatefulSet))
return !isStatefulSetReady(e.ObjectOld.(*appsv1.StatefulSet)) && isStatefulSetReady(e.ObjectNew.(*appsv1.StatefulSet))
}

func (statefulSetReadyPredicate) Generic(e event.GenericEvent) bool {
func (statefulSetReadyPredicate) Generic(_ event.GenericEvent) bool {
return false
}

Expand Down
12 changes: 6 additions & 6 deletions operator/internal/controller/pulumi/flux.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,15 +105,15 @@ func fluxSourceKey(gvk schema.GroupVersionKind, name string) string {
return fmt.Sprintf("%s:%s", gvk, name)
}

type fluxSourceReadyPredicate struct {
predicate.Funcs
}
type fluxSourceReadyPredicate struct{}

var _ predicate.Predicate = &fluxSourceReadyPredicate{}

func (fluxSourceReadyPredicate) Create(e event.CreateEvent) bool {
return checkFluxSourceReady(e.Object.(*unstructured.Unstructured))
}

func (fluxSourceReadyPredicate) Delete(e event.DeleteEvent) bool {
func (fluxSourceReadyPredicate) Delete(_ event.DeleteEvent) bool {
return false
}

Expand All @@ -124,6 +124,6 @@ func (fluxSourceReadyPredicate) Update(e event.UpdateEvent) bool {
return !checkFluxSourceReady(e.ObjectOld.(*unstructured.Unstructured)) && checkFluxSourceReady(e.ObjectNew.(*unstructured.Unstructured))
}

func (fluxSourceReadyPredicate) Generic(e event.GenericEvent) bool {
func (fluxSourceReadyPredicate) Generic(_ event.GenericEvent) bool {
return false
}
}
44 changes: 35 additions & 9 deletions operator/internal/controller/pulumi/stack_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func (r *StackReconciler) SetupWithManager(mgr ctrl.Manager) error {
// or the "force reconcile" annotation is used (and not marked as handled).
predicates := []predicate.Predicate{
predicate.Or(
predicate.And(predicate.GenerationChangedPredicate{}, predicate.Not(&FinalizerAddedPredicate{})),
predicate.And(predicate.GenerationChangedPredicate{}, predicate.Not(&finalizerAddedPredicate{})),
ReconcileRequestedPredicate{}),
}

Expand Down Expand Up @@ -354,15 +354,15 @@ func isWorkspaceReady(ws *autov1alpha1.Workspace) bool {
return meta.IsStatusConditionTrue(ws.Status.Conditions, autov1alpha1.WorkspaceReady)
}

type workspaceReadyPredicate struct {
predicate.Funcs
}
type workspaceReadyPredicate struct{}

var _ predicate.Predicate = &workspaceReadyPredicate{}

func (workspaceReadyPredicate) Create(e event.CreateEvent) bool {
return isWorkspaceReady(e.Object.(*autov1alpha1.Workspace))
}

func (workspaceReadyPredicate) Delete(e event.DeleteEvent) bool {
func (workspaceReadyPredicate) Delete(_ event.DeleteEvent) bool {
return false
}

Expand All @@ -373,7 +373,7 @@ func (workspaceReadyPredicate) Update(e event.UpdateEvent) bool {
return !isWorkspaceReady(e.ObjectOld.(*autov1alpha1.Workspace)) && isWorkspaceReady(e.ObjectNew.(*autov1alpha1.Workspace))
}

func (workspaceReadyPredicate) Generic(e event.GenericEvent) bool {
func (workspaceReadyPredicate) Generic(_ event.GenericEvent) bool {
return false
}

Expand All @@ -384,9 +384,9 @@ func isUpdateComplete(update *autov1alpha1.Update) bool {
return meta.IsStatusConditionTrue(update.Status.Conditions, autov1alpha1.UpdateConditionTypeComplete)
}

type updateCompletePredicate struct {
predicate.Funcs
}
type updateCompletePredicate struct{}

var _ predicate.Predicate = &updateCompletePredicate{}

func (updateCompletePredicate) Create(e event.CreateEvent) bool {
return isUpdateComplete(e.Object.(*autov1alpha1.Update))
Expand Down Expand Up @@ -1453,3 +1453,29 @@ func patchObject[T any, V any](base T, patch V) (*T, error) {

return &result, nil
}

// finalizerAddedPredicate detects when a finalizer is added to an object.
// It is used to suppress reconciliation when the stack controller adds its finalizer, which causes
// a generation change that would otherwise trigger reconciliation.
type finalizerAddedPredicate struct{}

var _ predicate.Predicate = &finalizerAddedPredicate{}

func (p *finalizerAddedPredicate) Create(_ event.CreateEvent) bool {
return false
}

func (p *finalizerAddedPredicate) Delete(_ event.DeleteEvent) bool {
return false
}

func (p *finalizerAddedPredicate) Update(e event.UpdateEvent) bool {
if e.ObjectOld == nil || e.ObjectNew == nil {
return false
}
return !controllerutil.ContainsFinalizer(e.ObjectOld, pulumiFinalizer) && controllerutil.ContainsFinalizer(e.ObjectNew, pulumiFinalizer)
}

func (p *finalizerAddedPredicate) Generic(_ event.GenericEvent) bool {
return false
}
29 changes: 0 additions & 29 deletions operator/internal/controller/pulumi/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@ package pulumi
import (
"github.com/prometheus/client_golang/prometheus"
dto "github.com/prometheus/client_model/go"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/event"
"sigs.k8s.io/controller-runtime/pkg/predicate"
)

func exactlyOneOf(these ...bool) bool {
Expand All @@ -44,29 +41,3 @@ func getGaugeValue(metric prometheus.Gauge) (float64, error) {
}
return m.Gauge.GetValue(), nil
}

// FinalizerAddedPredicate detects when a finalizer is added to an object.
// It is used to suppress reconciliation when the stack controller adds its finalizer, which causes
// a generation change that would otherwise trigger reconciliation.
type FinalizerAddedPredicate struct {
predicate.Funcs
}

func (p *FinalizerAddedPredicate) Create(e event.CreateEvent) bool {
return false
}

func (p *FinalizerAddedPredicate) Delete(e event.DeleteEvent) bool {
return false
}

func (p *FinalizerAddedPredicate) Update(e event.UpdateEvent) bool {
if e.ObjectOld == nil || e.ObjectNew == nil {
return false
}
return !controllerutil.ContainsFinalizer(e.ObjectOld, pulumiFinalizer) && controllerutil.ContainsFinalizer(e.ObjectNew, pulumiFinalizer)
}

func (p *FinalizerAddedPredicate) Generic(e event.GenericEvent) bool {
return false
}

0 comments on commit 0c4e8cb

Please sign in to comment.