@@ -19,6 +19,7 @@ import (
19
19
20
20
ydbv1alpha1 "github.com/ydb-platform/ydb-kubernetes-operator/api/v1alpha1"
21
21
"github.com/ydb-platform/ydb-kubernetes-operator/internal/cms"
22
+ "github.com/ydb-platform/ydb-kubernetes-operator/internal/labels"
22
23
"github.com/ydb-platform/ydb-kubernetes-operator/internal/resources"
23
24
)
24
25
@@ -134,43 +135,72 @@ func (r *Reconciler) waitForClusterResources(ctx context.Context, database *reso
134
135
return Continue , ctrl.Result {Requeue : false }, nil
135
136
}
136
137
137
- func (r * Reconciler ) waitForStatefulSetToScale (ctx context.Context , database * resources.DatabaseBuilder ) (bool , ctrl.Result , error ) {
138
- r .Log .Info ("running step waitForStatefulSetToScale" )
138
+ func (r * Reconciler ) waitForStatefulSetToScale (
139
+ ctx context.Context ,
140
+ database * resources.DatabaseBuilder ,
141
+ ) (bool , ctrl.Result , error ) {
142
+ r .Log .Info ("running step waitForStatefulSetToScale for Database" )
139
143
140
- if database .Spec .ServerlessResources == nil {
141
- found := & appsv1.StatefulSet {}
142
- err := r .Get (ctx , types.NamespacedName {
143
- Name : database .Name ,
144
- Namespace : database .Namespace ,
145
- }, found )
146
- if err != nil {
147
- if apierrors .IsNotFound (err ) {
148
- return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, nil
149
- }
150
- r .Recorder .Event (
151
- database ,
152
- corev1 .EventTypeNormal ,
153
- "Syncing" ,
154
- fmt .Sprintf ("Failed to get StatefulSets: %s" , err ),
155
- )
156
- return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
144
+ if database .Spec .ServerlessResources != nil {
145
+ return Continue , ctrl.Result {Requeue : false }, nil
146
+ }
147
+
148
+ found := & appsv1.StatefulSet {}
149
+ err := r .Get (ctx , types.NamespacedName {
150
+ Name : database .Name ,
151
+ Namespace : database .Namespace ,
152
+ }, found )
153
+ if err != nil {
154
+ if apierrors .IsNotFound (err ) {
155
+ return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, nil
157
156
}
157
+ r .Recorder .Event (
158
+ database ,
159
+ corev1 .EventTypeNormal ,
160
+ "Syncing" ,
161
+ fmt .Sprintf ("Failed to get StatefulSets: %s" , err ),
162
+ )
163
+ return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
164
+ }
158
165
159
- if found .Status .Replicas != database .Spec .Nodes {
160
- msg := fmt .Sprintf ("Waiting for number of running pods to match expected: %d != %d" ,
161
- found .Status .Replicas ,
162
- database .Spec .Nodes ,
163
- )
164
- r .Recorder .Event (database , corev1 .EventTypeNormal , "Provisioning" , msg )
165
- database .Status .State = string (Provisioning )
166
- return r .setState (ctx , database )
166
+ podLabels := labels .Common (database .Name , make (map [string ]string ))
167
+ podLabels .Merge (map [string ]string {
168
+ labels .ComponentKey : labels .DynamicComponent ,
169
+ })
170
+
171
+ matchingLabels := client.MatchingLabels {}
172
+ for k , v := range podLabels {
173
+ matchingLabels [k ] = v
174
+ }
175
+
176
+ podList := & corev1.PodList {}
177
+ opts := []client.ListOption {
178
+ client .InNamespace (database .Namespace ),
179
+ matchingLabels ,
180
+ }
181
+
182
+ err = r .List (ctx , podList , opts ... )
183
+ if err != nil {
184
+ r .Recorder .Event (
185
+ database ,
186
+ corev1 .EventTypeNormal ,
187
+ "Syncing" ,
188
+ fmt .Sprintf ("Failed to list cluster pods: %s" , err ),
189
+ )
190
+ database .Status .State = string (Provisioning )
191
+ return Stop , ctrl.Result {RequeueAfter : DefaultRequeueDelay }, err
192
+ }
193
+
194
+ runningPods := 0
195
+ for _ , e := range podList .Items {
196
+ if e .Status .Phase == "Running" {
197
+ runningPods ++
167
198
}
168
199
}
169
200
170
- if database .Status .State != string (Ready ) &&
171
- meta .IsStatusConditionTrue (database .Status .Conditions , TenantInitializedCondition ) {
172
- r .Recorder .Event (database , corev1 .EventTypeNormal , "ResourcesReady" , "Resource are ready and DB is initialized" )
173
- database .Status .State = string (Ready )
201
+ if runningPods != int (database .Spec .Nodes ) {
202
+ msg := fmt .Sprintf ("Waiting for number of running dynamic pods to match expected: %d != %d" , runningPods , database .Spec .Nodes )
203
+ r .Recorder .Event (database , corev1 .EventTypeNormal , string (Provisioning ), msg )
174
204
return r .setState (ctx , database )
175
205
}
176
206
@@ -372,6 +402,15 @@ func (r *Reconciler) handleTenantCreation(
372
402
Reason : TenantInitializedReasonCompleted ,
373
403
Message : "Tenant creation is complete" ,
374
404
})
405
+
406
+ r .Recorder .Event (
407
+ database ,
408
+ corev1 .EventTypeNormal ,
409
+ "DatabaseReady" ,
410
+ "Database is initialized" ,
411
+ )
412
+ database .Status .State = string (Ready )
413
+
375
414
return r .setState (ctx , database )
376
415
}
377
416
0 commit comments