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,71 @@ 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
8585 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
8686 Type : CreateDatabaseOperationCondition ,
87- Status : metav1 .ConditionTrue ,
88- Reason : ReasonNotRequired ,
87+ Status : metav1 .ConditionFalse ,
88+ Reason : ReasonFailed ,
8989 })
9090 return r .updateStatus (ctx , database , DatabaseInitializationRequeueDelay )
9191 }
92- operationID := condition .Message
93- finished , operationErr , err := tenant .CheckCreateOperation (ctx , operationID , ydbOptions )
92+
93+ operation := & cms.Operation {
94+ StorageEndpoint : tenant .StorageEndpoint ,
95+ Domain : tenant .Domain ,
96+ ID : condition .Message ,
97+ }
98+ response , err := operation .GetOperation (ctx , ydbOptions )
9499 if err != nil {
95100 r .Recorder .Event (
96101 database ,
97102 corev1 .EventTypeWarning ,
98103 "InitializingFailed" ,
99- fmt .Sprintf ("Error creating tenant %s: %s" , tenant . Path , err ),
104+ fmt .Sprintf ("Failed to check creation operation, operationID %s: %s" , operation . ID , err ),
100105 )
101106 return Stop , ctrl.Result {RequeueAfter : DatabaseInitializationRequeueDelay }, err
102107 }
103- if operationErr != nil {
104- // Creation operation failed - retry Create Tenant
108+
109+ finished , operationID , err := operation .CheckGetOperationResponse (ctx , response )
110+ if err != nil {
105111 r .Recorder .Event (
106112 database ,
107113 corev1 .EventTypeWarning ,
108114 "InitializingFailed" ,
109- fmt .Sprintf ("Error creating tenant %s: %s" , tenant .Path , operationErr ),
115+ fmt .Sprintf ("Error creating tenant %s: %s" , tenant .Path , err ),
110116 )
111117 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
112- Type : CreateDatabaseOperationCondition ,
113- Status : metav1 .ConditionTrue ,
114- Reason : ReasonNotRequired ,
118+ Type : CreateDatabaseOperationCondition ,
119+ Status : metav1 .ConditionFalse ,
120+ Reason : ReasonFailed ,
121+ Message : fmt .Sprintf ("Failed to create tenant %s" , tenant .Path ),
115122 })
116123 return r .updateStatus (ctx , database , DatabaseInitializationRequeueDelay )
117124 }
125+
118126 if ! finished {
119127 r .Recorder .Event (
120128 database ,
121129 corev1 .EventTypeWarning ,
122- "Pending" ,
130+ string ( DatabaseInitializing ) ,
123131 fmt .Sprintf ("Tenant creation operation is not completed, operationID: %s" , operationID ),
124132 )
125133 return Stop , ctrl.Result {RequeueAfter : DatabaseInitializationRequeueDelay }, nil
126134 }
135+
127136 r .Recorder .Event (
128137 database ,
129138 corev1 .EventTypeNormal ,
130- "Initialized" ,
139+ string ( DatabaseInitializing ) ,
131140 fmt .Sprintf ("Tenant %s created" , tenant .Path ),
132141 )
133142 return r .setInitDatabaseCompleted (ctx , database , "Database initialized successfully" )
@@ -239,9 +248,10 @@ func (r *Reconciler) initializeTenant(
239248 ydbOpts := ydb .MergeOptions (ydb .WithCredentials (creds ), tlsOptions )
240249
241250 if meta .IsStatusConditionFalse (database .Status .Conditions , CreateDatabaseOperationCondition ) {
242- return r .checkCreateTenantOperation (ctx , database , tenant , ydbOpts )
251+ return r .checkCreateDatabaseOperation (ctx , database , tenant , ydbOpts )
243252 }
244- operationID , err := tenant .Create (ctx , ydb .WithCredentials (creds ), tlsOptions )
253+
254+ response , err := tenant .CreateDatabase (ctx , ydbOpts )
245255 if err != nil {
246256 r .Recorder .Event (
247257 database ,
@@ -251,11 +261,23 @@ func (r *Reconciler) initializeTenant(
251261 )
252262 return Stop , ctrl.Result {RequeueAfter : DatabaseInitializationRequeueDelay }, err
253263 }
254- if len (operationID ) > 0 {
264+
265+ finished , operationID , err := tenant .CheckCreateDatabaseResponse (ctx , response )
266+ if err != nil {
267+ r .Recorder .Event (
268+ database ,
269+ corev1 .EventTypeWarning ,
270+ "InitializingFailed" ,
271+ fmt .Sprintf ("Failed %s: %s" , tenant .Path , err ),
272+ )
273+ return Stop , ctrl.Result {RequeueAfter : DatabaseInitializationRequeueDelay }, err
274+ }
275+
276+ if ! finished {
255277 r .Recorder .Event (
256278 database ,
257279 corev1 .EventTypeWarning ,
258- "Pending" ,
280+ string ( DatabaseInitializing ) ,
259281 fmt .Sprintf ("Tenant creation operation in progress, operationID: %s" , operationID ),
260282 )
261283 meta .SetStatusCondition (& database .Status .Conditions , metav1.Condition {
@@ -269,7 +291,7 @@ func (r *Reconciler) initializeTenant(
269291 r .Recorder .Event (
270292 database ,
271293 corev1 .EventTypeNormal ,
272- "Initialized" ,
294+ string ( DatabaseInitializing ) ,
273295 fmt .Sprintf ("Tenant %s created" , tenant .Path ),
274296 )
275297
0 commit comments