Skip to content

Commit 008427c

Browse files
committed
beautify changes
1 parent cfdd034 commit 008427c

File tree

5 files changed

+255
-179
lines changed

5 files changed

+255
-179
lines changed

internal/controllers/database/init.go

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
corev1 "k8s.io/api/core/v1"
8+
apierrors "k8s.io/apimachinery/pkg/api/errors"
89
"k8s.io/apimachinery/pkg/api/meta"
910
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1011
"k8s.io/apimachinery/pkg/types"
@@ -16,20 +17,6 @@ import (
1617
"github.com/ydb-platform/ydb-kubernetes-operator/internal/resources"
1718
)
1819

19-
func (r *Reconciler) setInitDatabaseCompleted(
20-
ctx context.Context,
21-
database *resources.DatabaseBuilder,
22-
message string,
23-
) (bool, ctrl.Result, error) {
24-
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
25-
Type: DatabaseInitializedCondition,
26-
Status: metav1.ConditionTrue,
27-
Reason: ReasonCompleted,
28-
Message: message,
29-
})
30-
return r.updateStatus(ctx, database, StatusUpdateRequeueDelay)
31-
}
32-
3320
func (r *Reconciler) setInitPipelineStatus(
3421
ctx context.Context,
3522
database *resources.DatabaseBuilder,
@@ -64,6 +51,20 @@ func (r *Reconciler) setInitPipelineStatus(
6451
return Continue, ctrl.Result{Requeue: false}, nil
6552
}
6653

54+
func (r *Reconciler) setInitDatabaseCompleted(
55+
ctx context.Context,
56+
database *resources.DatabaseBuilder,
57+
message string,
58+
) (bool, ctrl.Result, error) {
59+
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
60+
Type: DatabaseInitializedCondition,
61+
Status: metav1.ConditionTrue,
62+
Reason: ReasonCompleted,
63+
Message: message,
64+
})
65+
return r.updateStatus(ctx, database, StatusUpdateRequeueDelay)
66+
}
67+
6768
func (r *Reconciler) initializeTenant(
6869
ctx context.Context,
6970
database *resources.DatabaseBuilder,
@@ -86,13 +87,27 @@ func (r *Reconciler) initializeTenant(
8687
Namespace: database.Spec.ServerlessResources.SharedDatabaseRef.Namespace,
8788
}, sharedDatabaseCr)
8889
if err != nil {
90+
if apierrors.IsNotFound(err) {
91+
r.Recorder.Event(
92+
database,
93+
corev1.EventTypeWarning,
94+
"Pending",
95+
fmt.Sprintf(
96+
"Database (%s/%s) not found.",
97+
database.Spec.ServerlessResources.SharedDatabaseRef.Name,
98+
database.Spec.ServerlessResources.SharedDatabaseRef.Namespace,
99+
),
100+
)
101+
return Stop, ctrl.Result{RequeueAfter: SharedDatabaseAwaitRequeueDelay}, nil
102+
}
89103
r.Recorder.Event(
90104
database,
91105
corev1.EventTypeWarning,
92-
"ControllerError",
106+
"Pending",
93107
fmt.Sprintf(
94-
"Failed to get Database %s resource, error: %s",
108+
"Failed to get Database (%s, %s) resource, error: %s",
95109
database.Spec.ServerlessResources.SharedDatabaseRef.Name,
110+
database.Spec.ServerlessResources.SharedDatabaseRef.Namespace,
96111
err,
97112
),
98113
)
@@ -103,10 +118,11 @@ func (r *Reconciler) initializeTenant(
103118
r.Recorder.Event(
104119
database,
105120
corev1.EventTypeWarning,
106-
"InitializingTenant",
121+
"Pending",
107122
fmt.Sprintf(
108-
"Referenced shared Database %s is not Provisioned",
123+
"Referenced shared Database (%s, %s) is not Provisioned",
109124
database.Spec.ServerlessResources.SharedDatabaseRef.Name,
125+
database.Spec.ServerlessResources.SharedDatabaseRef.Namespace,
110126
),
111127
)
112128
return Stop, ctrl.Result{RequeueAfter: SharedDatabaseAwaitRequeueDelay}, err
@@ -157,7 +173,7 @@ func (r *Reconciler) initializeTenant(
157173
r.Recorder.Event(
158174
database,
159175
corev1.EventTypeWarning,
160-
"InitializingTenant",
176+
"InitializingFailed",
161177
fmt.Sprintf("Error creating tenant %s: %s", tenant.Path, err),
162178
)
163179
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
@@ -167,12 +183,12 @@ func (r *Reconciler) initializeTenant(
167183
})
168184
return r.updateStatus(ctx, database, DatabaseInitializationRequeueDelay)
169185
}
170-
171186
r.Recorder.Event(
172187
database,
173188
corev1.EventTypeNormal,
174-
"InitializingTenant",
189+
"Initialized",
175190
fmt.Sprintf("Tenant %s created", tenant.Path),
176191
)
192+
177193
return r.setInitDatabaseCompleted(ctx, database, "Database initialized successfully")
178194
}

internal/controllers/database/sync.go

Lines changed: 71 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
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

173190
func (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

263287
func (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

Comments
 (0)