44 "fmt"
55 "log"
66 "strconv"
7+ "strings"
78
89 "github.com/kubernetes-sigs/kubebuilder/pkg/controller"
910 "github.com/kubernetes-sigs/kubebuilder/pkg/controller/types"
@@ -27,7 +28,7 @@ import (
2728const controllerAgentName = "kubereplay-harvester-controller"
2829
2930func (bc * HarvesterController ) reconcileDeployment (green * appsv1beta.Deployment , blue * appsv1beta.Deployment , blueReplicas int32 , greenReplicas int32 ) {
30- log .Printf ("reconciling deployment %s v1to %d/%d" , green .Name , blueReplicas , greenReplicas )
31+ log .Printf ("reconciling deployment %s to %d/%d" , green .Name , blueReplicas , greenReplicas )
3132 if * blue .Spec .Replicas != blueReplicas {
3233 log .Printf ("blue replica needs reconcilation %d != %d" , * blue .Spec .Replicas , blueReplicas )
3334 deploy , err := bc .kubernetesclient .ExtensionsV1beta1 ().Deployments (blue .Namespace ).Get (blue .Name , metav1.GetOptions {})
@@ -57,6 +58,27 @@ func (bc *HarvesterController) reconcileDeployment(green *appsv1beta.Deployment,
5758
5859}
5960
61+ func arrayToMap (deployments []* appsv1beta.Deployment ) map [string ]* appsv1beta.Deployment {
62+ res := make (map [string ]* appsv1beta.Deployment )
63+ for _ , d := range deployments {
64+ res [d .Name ] = d
65+ }
66+ return res
67+ }
68+
69+ func findOrphans (deployments map [string ]* appsv1beta.Deployment ) []string {
70+ var orphans []string
71+ for _ , d := range deployments {
72+ if strings .HasSuffix (d .Name , "-gor" ) {
73+ _ , ok := deployments [strings .TrimSuffix (d .Name , "-gor" )]
74+ if ! ok {
75+ orphans = append (orphans , d .Name )
76+ }
77+ }
78+ }
79+ return orphans
80+ }
81+
6082func (bc * HarvesterController ) Reconcile (k types.ReconcileKey ) error {
6183 log .Printf ("running reconcile Harvester for %s" , k .Name )
6284 h , err := bc .Get (k .Namespace , k .Name )
@@ -71,6 +93,18 @@ func (bc *HarvesterController) Reconcile(k types.ReconcileKey) error {
7193 if err != nil {
7294 return err
7395 }
96+ deploysMap := arrayToMap (deploys )
97+ orphans := findOrphans (deploysMap )
98+ propagationPolicy := metav1 .DeletePropagationBackground
99+ for _ , orph := range orphans {
100+ err = bc .kubernetesclient .ExtensionsV1beta1 ().Deployments (k .Namespace ).Delete (
101+ orph , & metav1.DeleteOptions {PropagationPolicy : & propagationPolicy })
102+ if err != nil {
103+ log .Printf ("failed to delete shadow deployment %s: %v" , orph , err )
104+ }
105+
106+ }
107+
74108 var forceReconcile bool
75109 if h .Spec .SegmentSize != h .Status .SegmentSize {
76110 forceReconcile = true
@@ -133,7 +167,6 @@ func (bc *HarvesterController) Reconcile(k types.ReconcileKey) error {
133167 }
134168
135169 log .Printf ("Finished processing harvester..." )
136-
137170 return nil
138171}
139172
0 commit comments