44 "context"
55 "fmt"
66
7- "github.com/ydb-platform/ydb-go-sdk/v3"
7+ ydb "github.com/ydb-platform/ydb-go-sdk/v3"
88 corev1 "k8s.io/api/core/v1"
99 apierrors "k8s.io/apimachinery/pkg/api/errors"
1010 "k8s.io/apimachinery/pkg/api/meta"
@@ -72,62 +72,86 @@ func (r *Reconciler) setInitDatabaseCompleted(
7272 return r .updateStatus (ctx , database , StatusUpdateRequeueDelay )
7373}
7474
75- func (r * Reconciler ) checkCreateTenantOperation (
75+ func (r * Reconciler ) checkCreateDatabaseOperation (
7676 ctx context.Context ,
7777 database * resources.DatabaseBuilder ,
7878 tenant * cms.Tenant ,
7979 ydbOptions ydb.Option ,
8080) (bool , ctrl.Result , error ) {
8181 condition := meta .FindStatusCondition (database .Status .Conditions , CreateDatabaseOperationCondition )
82- if condition == nil || len (condition .Message ) == 0 {
82+ if len (condition .Message ) == 0 {
8383 // Something is wrong with the condition where we save operation id
8484 // retry create tenant
85+ errMessage := fmt .Sprintf ("Something is wrong with the condition, retry creating tenant %s" , tenant .Path )
86+ r .Recorder .Event (
87+ database ,
88+ corev1 .EventTypeWarning ,
89+ "InitializingFailed" ,
90+ errMessage ,
91+ )
8592 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
86- Type : CreateDatabaseOperationCondition ,
87- Status : metav1 .ConditionTrue ,
88- Reason : ReasonNotRequired ,
93+ Type : CreateDatabaseOperationCondition ,
94+ Status : metav1 .ConditionFalse ,
95+ Reason : ReasonFailed ,
96+ Message : errMessage ,
8997 })
9098 return r .updateStatus (ctx , database , DatabaseInitializationRequeueDelay )
9199 }
92- operationID := condition .Message
93- finished , operationErr , err := tenant .CheckCreateOperation (ctx , operationID , ydbOptions )
100+
101+ operation := & cms.Operation {
102+ StorageEndpoint : tenant .StorageEndpoint ,
103+ Domain : tenant .Domain ,
104+ ID : condition .Message ,
105+ }
106+ response , err := operation .GetOperation (ctx , ydbOptions )
94107 if err != nil {
95108 r .Recorder .Event (
96109 database ,
97110 corev1 .EventTypeWarning ,
98111 "InitializingFailed" ,
99- fmt .Sprintf ("Error creating tenant %s: %s" , tenant . Path , err ),
112+ fmt .Sprintf ("Failed to check creation operation, operationID %s: %s" , operation . ID , err ),
100113 )
101114 return Stop , ctrl.Result {RequeueAfter : DatabaseInitializationRequeueDelay }, err
102115 }
103- if operationErr != nil {
104- // Creation operation failed - retry Create Tenant
116+
117+ finished , operationID , err := operation .CheckGetOperationResponse (ctx , response )
118+ if err != nil {
119+ errMessage := fmt .Sprintf ("Error creating tenant %s: %s" , tenant .Path , err )
105120 r .Recorder .Event (
106121 database ,
107122 corev1 .EventTypeWarning ,
108123 "InitializingFailed" ,
109- fmt . Sprintf ( "Error creating tenant %s: %s" , tenant . Path , operationErr ) ,
124+ errMessage ,
110125 )
111126 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
112- Type : CreateDatabaseOperationCondition ,
113- Status : metav1 .ConditionTrue ,
114- Reason : ReasonNotRequired ,
127+ Type : CreateDatabaseOperationCondition ,
128+ Status : metav1 .ConditionFalse ,
129+ Reason : ReasonCompleted ,
130+ Message : errMessage ,
115131 })
116132 return r .updateStatus (ctx , database , DatabaseInitializationRequeueDelay )
117133 }
134+
118135 if ! finished {
119136 r .Recorder .Event (
120137 database ,
121138 corev1 .EventTypeWarning ,
122- "Pending" ,
139+ string ( DatabaseInitializing ) ,
123140 fmt .Sprintf ("Tenant creation operation is not completed, operationID: %s" , operationID ),
124141 )
125- return Stop , ctrl.Result {RequeueAfter : DatabaseInitializationRequeueDelay }, nil
142+ meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
143+ Type : CreateDatabaseOperationCondition ,
144+ Status : metav1 .ConditionUnknown ,
145+ Reason : ReasonInProgress ,
146+ Message : operationID ,
147+ })
148+ return r .updateStatus (ctx , database , DatabaseInitializationRequeueDelay )
126149 }
150+
127151 r .Recorder .Event (
128152 database ,
129153 corev1 .EventTypeNormal ,
130- "Initialized" ,
154+ string ( DatabaseInitializing ) ,
131155 fmt .Sprintf ("Tenant %s created" , tenant .Path ),
132156 )
133157 return r .setInitDatabaseCompleted (ctx , database , "Database initialized successfully" )
@@ -238,10 +262,11 @@ func (r *Reconciler) initializeTenant(
238262 }
239263 ydbOpts := ydb .MergeOptions (ydb .WithCredentials (creds ), tlsOptions )
240264
241- if meta .IsStatusConditionFalse (database .Status .Conditions , CreateDatabaseOperationCondition ) {
242- return r .checkCreateTenantOperation (ctx , database , tenant , ydbOpts )
265+ if meta .IsStatusConditionPresentAndEqual (database .Status .Conditions , CreateDatabaseOperationCondition , metav1 . ConditionUnknown ) {
266+ return r .checkCreateDatabaseOperation (ctx , database , tenant , ydbOpts )
243267 }
244- operationID , err := tenant .Create (ctx , ydb .WithCredentials (creds ), tlsOptions )
268+
269+ response , err := tenant .CreateDatabase (ctx , ydbOpts )
245270 if err != nil {
246271 r .Recorder .Event (
247272 database ,
@@ -251,16 +276,28 @@ func (r *Reconciler) initializeTenant(
251276 )
252277 return Stop , ctrl.Result {RequeueAfter : DatabaseInitializationRequeueDelay }, err
253278 }
254- if len (operationID ) > 0 {
279+
280+ finished , operationID , err := tenant .CheckCreateDatabaseResponse (ctx , response )
281+ if err != nil {
282+ r .Recorder .Event (
283+ database ,
284+ corev1 .EventTypeWarning ,
285+ "InitializingFailed" ,
286+ fmt .Sprintf ("Error checking operation for tenant %s: %s" , tenant .Path , err ),
287+ )
288+ return Stop , ctrl.Result {RequeueAfter : DatabaseInitializationRequeueDelay }, err
289+ }
290+
291+ if ! finished {
255292 r .Recorder .Event (
256293 database ,
257294 corev1 .EventTypeWarning ,
258- "Pending" ,
295+ string ( DatabaseInitializing ) ,
259296 fmt .Sprintf ("Tenant creation operation in progress, operationID: %s" , operationID ),
260297 )
261298 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
262299 Type : CreateDatabaseOperationCondition ,
263- Status : metav1 .ConditionFalse ,
300+ Status : metav1 .ConditionUnknown ,
264301 Reason : ReasonInProgress ,
265302 Message : operationID ,
266303 })
0 commit comments