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"
@@ -53,9 +54,8 @@ func (r *Reconciler) Sync(ctx context.Context, ydbCr *v1alpha1.Database) (ctrl.R
5354 return result , err
5455 }
5556
56- stop , result , err = r .handleTenantCreation (ctx , & database )
57- if stop {
58- return result , err
57+ if ! meta .IsStatusConditionTrue (database .Status .Conditions , DatabaseInitializedCondition ) {
58+ return r .handleTenantCreation (ctx , & database )
5959 }
6060
6161 if database .Spec .NodeSets != nil {
@@ -129,13 +129,27 @@ func (r *Reconciler) waitForClusterResources(ctx context.Context, database *reso
129129 Namespace : database .Spec .StorageClusterRef .Namespace ,
130130 }, storage )
131131 if err != nil {
132+ if apierrors .IsNotFound (err ) {
133+ r .Recorder .Event (
134+ database ,
135+ corev1 .EventTypeWarning ,
136+ "Pending" ,
137+ fmt .Sprintf (
138+ "Storage (%s/%s) not found." ,
139+ database .Spec .StorageClusterRef .Name ,
140+ database .Spec .StorageClusterRef .Namespace ,
141+ ),
142+ )
143+ return Stop , ctrl.Result {RequeueAfter : StorageAwaitRequeueDelay }, nil
144+ }
132145 r .Recorder .Event (
133146 database ,
134147 corev1 .EventTypeWarning ,
135148 "Pending" ,
136149 fmt .Sprintf (
137- "Failed to get Storage resource %s, error: %s" ,
150+ "Failed to get Storage (%s, %s) resource , error: %s" ,
138151 database .Spec .StorageClusterRef .Name ,
152+ database .Spec .StorageClusterRef .Namespace ,
139153 err ,
140154 ),
141155 )
@@ -148,17 +162,19 @@ func (r *Reconciler) waitForClusterResources(ctx context.Context, database *reso
148162 corev1 .EventTypeWarning ,
149163 "Pending" ,
150164 fmt .Sprintf (
151- "Referenced Storage resource %s is not initialized" ,
165+ "Referenced storage cluster (%s, %s) is not initialized" ,
152166 database .Spec .StorageClusterRef .Name ,
167+ database .Spec .StorageClusterRef .Namespace ,
153168 ),
154169 )
155170 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
156171 Type : DatabasePreparedCondition ,
157172 Status : metav1 .ConditionFalse ,
158173 Reason : ReasonInProgress ,
159174 Message : fmt .Sprintf (
160- "Referenced Storage resource %s is not initialized" ,
175+ "Referenced storage cluster (%s, %s) is not initialized" ,
161176 database .Spec .StorageClusterRef .Name ,
177+ database .Spec .StorageClusterRef .Namespace ,
162178 ),
163179 })
164180 return r .updateStatus (ctx , database , StorageAwaitRequeueDelay )
@@ -167,7 +183,7 @@ func (r *Reconciler) waitForClusterResources(ctx context.Context, database *reso
167183 database .Storage = storage
168184
169185 r .Log .Info ("complete step waitForClusterResources" )
170- return Continue , ctrl.Result {}, nil
186+ return Continue , ctrl.Result {Requeue : false }, nil
171187}
172188
173189func (r * Reconciler ) waitForNodeSetsToProvisioned (
@@ -187,28 +203,35 @@ func (r *Reconciler) waitForNodeSetsToProvisioned(
187203 return r .updateStatus (ctx , database , StatusUpdateRequeueDelay )
188204 }
189205
190- var nodeSetName string
191- var nodeSetKind string
192- var nodeSetObject client.Object
193- var nodeSetConditions []metav1.Condition
194206 for _ , nodeSetSpec := range database .Spec .NodeSets {
195- nodeSetName = database .Name + "-" + nodeSetSpec .Name
196- nodeSetKind = DatabaseNodeSetKind
197- nodeSetObject = & v1alpha1.DatabaseNodeSet {}
198-
207+ var nodeSetObject client.Object
208+ var nodeSetKind string
209+ var nodeSetConditions []metav1.Condition
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
@@ -257,7 +280,7 @@ func (r *Reconciler) waitForNodeSetsToProvisioned(
257280 }
258281
259282 r .Log .Info ("complete step waitForNodeSetsToProvisioned" )
260- return Continue , ctrl.Result {}, nil
283+ return Continue , ctrl.Result {Requeue : false }, nil
261284}
262285
263286func (r * Reconciler ) waitForStatefulSetToScale (
@@ -287,11 +310,20 @@ func (r *Reconciler) waitForStatefulSetToScale(
287310 Namespace : database .Namespace ,
288311 }, found )
289312 if err != nil {
313+ if apierrors .IsNotFound (err ) {
314+ r .Recorder .Event (
315+ database ,
316+ corev1 .EventTypeWarning ,
317+ "ProvisioningFailed" ,
318+ fmt .Sprintf ("StatefulSet with name %s was not found: %s" , database .Name , err ),
319+ )
320+ return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, nil
321+ }
290322 r .Recorder .Event (
291323 database ,
292324 corev1 .EventTypeWarning ,
293- "ControllerError " ,
294- fmt .Sprintf ("Failed to get StatefulSet : %s" , err ),
325+ "ProvisioningFailed " ,
326+ fmt .Sprintf ("Failed to get StatefulSets : %s" , err ),
295327 )
296328 return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
297329 }
@@ -317,7 +349,7 @@ func (r *Reconciler) waitForStatefulSetToScale(
317349 r .Recorder .Event (
318350 database ,
319351 corev1 .EventTypeWarning ,
320- "ControllerError " ,
352+ "ProvisioningFailed " ,
321353 fmt .Sprintf ("Failed to list cluster pods: %s" , err ),
322354 )
323355 return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
@@ -334,14 +366,14 @@ func (r *Reconciler) waitForStatefulSetToScale(
334366 r .Recorder .Event (
335367 database ,
336368 corev1 .EventTypeNormal ,
337- "Provisioning" ,
338- fmt .Sprintf ("Waiting for number of running nodes to match expected: %d != %d" , runningPods , database .Spec .Nodes ),
369+ string ( DatabaseProvisioning ) ,
370+ fmt .Sprintf ("Waiting for number of running dynamic pods to match expected: %d != %d" , runningPods , database .Spec .Nodes ),
339371 )
340372 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
341373 Type : DatabaseProvisionedCondition ,
342374 Status : metav1 .ConditionFalse ,
343375 Reason : ReasonInProgress ,
344- Message : fmt .Sprintf ("Number of running nodes does not match expected: %d != %d" , runningPods , database .Spec .Nodes ),
376+ Message : fmt .Sprintf ("Number of running dynamic pods does not match expected: %d != %d" , runningPods , database .Spec .Nodes ),
345377 })
346378 return r .updateStatus (ctx , database , DefaultRequeueDelay )
347379 }
@@ -400,17 +432,18 @@ func (r *Reconciler) handleResourcesSync(
400432 database ,
401433 corev1 .EventTypeWarning ,
402434 "ProvisioningFailed" ,
403- fmt .Sprintf ("Failed to build resource : %s" , err ),
435+ fmt .Sprintf ("Failed building resources : %s" , err ),
404436 )
405437 return err
406438 }
439+
407440 err = ctrl .SetControllerReference (database .Unwrap (), newResource , r .Scheme )
408441 if err != nil {
409442 r .Recorder .Event (
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
@@ -715,18 +748,19 @@ func (r *Reconciler) handlePauseResume(
715748func (r * Reconciler ) handleTenantCreation (
716749 ctx context.Context ,
717750 database * resources.DatabaseBuilder ,
718- ) (bool , ctrl.Result , error ) {
751+ ) (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
754+ stop , result , err := r . setInitPipelineStatus ( ctx , database )
755+ if stop {
756+ return result , err
724757 }
725758
726- stop , result , err : = r .setInitPipelineStatus (ctx , database )
759+ stop , result , err = r .initializeTenant (ctx , database )
727760 if stop {
728- return stop , result , err
761+ return result , err
729762 }
730763
731- return r .initializeTenant (ctx , database )
764+ r .Log .Info ("complete step handleTenantCreation" )
765+ return ctrl.Result {}, nil
732766}
0 commit comments