99
1010 appsv1 "k8s.io/api/apps/v1"
1111 corev1 "k8s.io/api/core/v1"
12+ apierrors "k8s.io/apimachinery/pkg/api/errors"
1213 "k8s.io/apimachinery/pkg/api/meta"
1314 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1415 "k8s.io/apimachinery/pkg/runtime"
@@ -129,13 +130,27 @@ func (r *Reconciler) waitForClusterResources(ctx context.Context, database *reso
129130 Namespace : database .Spec .StorageClusterRef .Namespace ,
130131 }, storage )
131132 if err != nil {
133+ if apierrors .IsNotFound (err ) {
134+ r .Recorder .Event (
135+ database ,
136+ corev1 .EventTypeWarning ,
137+ "Pending" ,
138+ fmt .Sprintf (
139+ "Storage (%s/%s) not found." ,
140+ database .Spec .StorageClusterRef .Name ,
141+ database .Spec .StorageClusterRef .Namespace ,
142+ ),
143+ )
144+ return Stop , ctrl.Result {RequeueAfter : StorageAwaitRequeueDelay }, nil
145+ }
132146 r .Recorder .Event (
133147 database ,
134148 corev1 .EventTypeWarning ,
135149 "Pending" ,
136150 fmt .Sprintf (
137- "Failed to get Storage resource %s, error: %s" ,
151+ "Failed to get Storage (%s, %s) resource , error: %s" ,
138152 database .Spec .StorageClusterRef .Name ,
153+ database .Spec .StorageClusterRef .Namespace ,
139154 err ,
140155 ),
141156 )
@@ -148,17 +163,19 @@ func (r *Reconciler) waitForClusterResources(ctx context.Context, database *reso
148163 corev1 .EventTypeWarning ,
149164 "Pending" ,
150165 fmt .Sprintf (
151- "Referenced Storage resource %s is not initialized" ,
166+ "Referenced storage cluster (%s, %s) is not initialized" ,
152167 database .Spec .StorageClusterRef .Name ,
168+ database .Spec .StorageClusterRef .Namespace ,
153169 ),
154170 )
155171 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
156172 Type : DatabasePreparedCondition ,
157173 Status : metav1 .ConditionFalse ,
158174 Reason : ReasonInProgress ,
159175 Message : fmt .Sprintf (
160- "Referenced Storage resource %s is not initialized" ,
176+ "Referenced storage cluster (%s, %s) is not initialized" ,
161177 database .Spec .StorageClusterRef .Name ,
178+ database .Spec .StorageClusterRef .Namespace ,
162179 ),
163180 })
164181 return r .updateStatus (ctx , database , StorageAwaitRequeueDelay )
@@ -167,7 +184,7 @@ func (r *Reconciler) waitForClusterResources(ctx context.Context, database *reso
167184 database .Storage = storage
168185
169186 r .Log .Info ("complete step waitForClusterResources" )
170- return Continue , ctrl.Result {}, nil
187+ return Continue , ctrl.Result {Requeue : false }, nil
171188}
172189
173190func (r * Reconciler ) waitForNodeSetsToProvisioned (
@@ -187,33 +204,40 @@ func (r *Reconciler) waitForNodeSetsToProvisioned(
187204 return r .updateStatus (ctx , database , StatusUpdateRequeueDelay )
188205 }
189206
190- var nodeSetName string
191- var nodeSetKind string
192- var nodeSetObject client.Object
193- var nodeSetConditions []metav1.Condition
194207 for _ , nodeSetSpec := range database .Spec .NodeSets {
195- nodeSetName = database .Name + "-" + nodeSetSpec .Name
196- nodeSetKind = DatabaseNodeSetKind
197- nodeSetObject = & v1alpha1.DatabaseNodeSet {}
198-
208+ var nodeSetObject client.Object
209+ var nodeSetKind string
199210 if nodeSetSpec .Remote != nil {
200- nodeSetKind = RemoteDatabaseNodeSetKind
201211 nodeSetObject = & v1alpha1.RemoteDatabaseNodeSet {}
212+ nodeSetKind = RemoteDatabaseNodeSetKind
213+ } else {
214+ nodeSetObject = & v1alpha1.DatabaseNodeSet {}
215+ nodeSetKind = DatabaseNodeSetKind
202216 }
203217
218+ nodeSetName := database .Name + "-" + nodeSetSpec .Name
204219 if err := r .Get (ctx , types.NamespacedName {
205220 Name : nodeSetName ,
206221 Namespace : database .Namespace ,
207222 }, nodeSetObject ); err != nil {
223+ if apierrors .IsNotFound (err ) {
224+ r .Recorder .Event (
225+ database ,
226+ corev1 .EventTypeWarning ,
227+ "ProvisioningFailed" ,
228+ fmt .Sprintf ("%s with name %s was not found: %s" , nodeSetKind , nodeSetName , err ),
229+ )
230+ }
208231 r .Recorder .Event (
209232 database ,
210233 corev1 .EventTypeWarning ,
211- "ControllerError " ,
234+ "ProvisioningFailed " ,
212235 fmt .Sprintf ("Failed to get %s with name %s: %s" , nodeSetKind , nodeSetName , err ),
213236 )
214237 return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
215238 }
216239
240+ var nodeSetConditions []metav1.Condition
217241 if nodeSetSpec .Remote != nil {
218242 nodeSetConditions = nodeSetObject .(* v1alpha1.RemoteDatabaseNodeSet ).Status .Conditions
219243 } else {
@@ -257,7 +281,7 @@ func (r *Reconciler) waitForNodeSetsToProvisioned(
257281 }
258282
259283 r .Log .Info ("complete step waitForNodeSetsToProvisioned" )
260- return Continue , ctrl.Result {}, nil
284+ return Continue , ctrl.Result {Requeue : false }, nil
261285}
262286
263287func (r * Reconciler ) waitForStatefulSetToScale (
@@ -287,11 +311,20 @@ func (r *Reconciler) waitForStatefulSetToScale(
287311 Namespace : database .Namespace ,
288312 }, found )
289313 if err != nil {
314+ if apierrors .IsNotFound (err ) {
315+ r .Recorder .Event (
316+ database ,
317+ corev1 .EventTypeWarning ,
318+ "ProvisioningFailed" ,
319+ fmt .Sprintf ("StatefulSet with name %s was not found: %s" , database .Name , err ),
320+ )
321+ return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, nil
322+ }
290323 r .Recorder .Event (
291324 database ,
292325 corev1 .EventTypeWarning ,
293- "ControllerError " ,
294- fmt .Sprintf ("Failed to get StatefulSet : %s" , err ),
326+ "ProvisioningFailed " ,
327+ fmt .Sprintf ("Failed to get StatefulSets : %s" , err ),
295328 )
296329 return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
297330 }
@@ -317,7 +350,7 @@ func (r *Reconciler) waitForStatefulSetToScale(
317350 r .Recorder .Event (
318351 database ,
319352 corev1 .EventTypeWarning ,
320- "ControllerError " ,
353+ "ProvisioningFailed " ,
321354 fmt .Sprintf ("Failed to list cluster pods: %s" , err ),
322355 )
323356 return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
@@ -334,14 +367,14 @@ func (r *Reconciler) waitForStatefulSetToScale(
334367 r .Recorder .Event (
335368 database ,
336369 corev1 .EventTypeNormal ,
337- "Provisioning" ,
338- fmt .Sprintf ("Waiting for number of running nodes to match expected: %d != %d" , runningPods , database .Spec .Nodes ),
370+ string ( DatabaseProvisioning ) ,
371+ fmt .Sprintf ("Waiting for number of running dynamic pods to match expected: %d != %d" , runningPods , database .Spec .Nodes ),
339372 )
340373 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
341374 Type : DatabaseProvisionedCondition ,
342375 Status : metav1 .ConditionFalse ,
343376 Reason : ReasonInProgress ,
344- Message : fmt .Sprintf ("Number of running nodes does not match expected: %d != %d" , runningPods , database .Spec .Nodes ),
377+ Message : fmt .Sprintf ("Number of running dynamic pods does not match expected: %d != %d" , runningPods , database .Spec .Nodes ),
345378 })
346379 return r .updateStatus (ctx , database , DefaultRequeueDelay )
347380 }
@@ -400,7 +433,7 @@ func (r *Reconciler) handleResourcesSync(
400433 database ,
401434 corev1 .EventTypeWarning ,
402435 "ProvisioningFailed" ,
403- fmt .Sprintf ("Failed to build resource : %s" , err ),
436+ fmt .Sprintf ("Failed building resources : %s" , err ),
404437 )
405438 return err
406439 }
@@ -410,7 +443,7 @@ func (r *Reconciler) handleResourcesSync(
410443 database ,
411444 corev1 .EventTypeWarning ,
412445 "ProvisioningFailed" ,
413- fmt .Sprintf ("Failed to set controller reference: %s" , err ),
446+ fmt .Sprintf ("Error setting controller reference for resource : %s" , err ),
414447 )
415448 return err
416449 }
@@ -534,7 +567,7 @@ func (r *Reconciler) syncNodeSetSpecInline(
534567 r .Recorder .Event (
535568 database ,
536569 corev1 .EventTypeWarning ,
537- "ControllerError " ,
570+ "ProvisioningFailed " ,
538571 fmt .Sprintf ("Failed to list DatabaseNodeSets: %s" , err ),
539572 )
540573 return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
@@ -557,7 +590,7 @@ func (r *Reconciler) syncNodeSetSpecInline(
557590 r .Recorder .Event (
558591 database ,
559592 corev1 .EventTypeWarning ,
560- "ControllerError " ,
593+ "ProvisioningFailed " ,
561594 fmt .Sprintf ("Failed to delete DatabaseNodeSet: %s" , err ),
562595 )
563596 return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
@@ -584,7 +617,7 @@ func (r *Reconciler) syncNodeSetSpecInline(
584617 r .Recorder .Event (
585618 database ,
586619 corev1 .EventTypeWarning ,
587- "ControllerError " ,
620+ "ProvisioningFailed " ,
588621 fmt .Sprintf ("Failed to list RemoteDatabaseNodeSets: %s" , err ),
589622 )
590623 return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
@@ -608,7 +641,7 @@ func (r *Reconciler) syncNodeSetSpecInline(
608641 r .Recorder .Event (
609642 database ,
610643 corev1 .EventTypeWarning ,
611- "ControllerError " ,
644+ "ProvisioningFailed " ,
612645 fmt .Sprintf ("Failed to delete RemoteDatabaseNodeSet: %s" , err ),
613646 )
614647 return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
@@ -718,15 +751,18 @@ func (r *Reconciler) handleTenantCreation(
718751) (bool , ctrl.Result , error ) {
719752 r .Log .Info ("running step handleTenantCreation" )
720753
721- if meta .IsStatusConditionTrue (database .Status .Conditions , DatabaseInitializedCondition ) {
722- r .Log .Info ("complete step handleTenantCreation" )
723- return Continue , ctrl.Result {}, nil
724- }
754+ if ! meta .IsStatusConditionTrue (database .Status .Conditions , DatabaseInitializedCondition ) {
755+ stop , result , err := r .setInitPipelineStatus (ctx , database )
756+ if stop {
757+ return stop , result , err
758+ }
725759
726- stop , result , err := r .setInitPipelineStatus (ctx , database )
727- if stop {
728- return stop , result , err
760+ stop , result , err = r .initializeTenant (ctx , database )
761+ if stop {
762+ return stop , result , err
763+ }
729764 }
730765
731- return r .initializeTenant (ctx , database )
766+ r .Log .Info ("complete step handleTenantCreation" )
767+ return Continue , ctrl.Result {}, nil
732768}
0 commit comments