Skip to content

Commit 1a0ee3f

Browse files
authored
YDBOPS-9612 conditions for Storage and Database objects (#204)
1 parent 55d84a6 commit 1a0ee3f

File tree

10 files changed

+620
-399
lines changed

10 files changed

+620
-399
lines changed

deploy/ydb-operator/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ type: application
1515
# This is the chart version. This version number should be incremented each time you make changes
1616
# to the chart and its templates, including the app version.
1717
# Versions are expected to follow Semantic Versioning (https://semver.org/)
18-
version: 0.5.8
18+
version: 0.5.9
1919

2020
# This is the version number of the application being deployed. This version number should be
2121
# incremented each time you make changes to the application. Versions are not expected to
2222
# follow Semantic Versioning. They should reflect the version the application is using.
2323
# It is recommended to use it with quotes.
24-
appVersion: "0.5.8"
24+
appVersion: "0.5.9"

internal/controllers/constants/constants.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,17 @@ const (
1919
OldStorageInitializedCondition = "StorageReady"
2020
OldDatabaseInitializedCondition = "TenantInitialized"
2121

22-
StoragePausedCondition = "StoragePaused"
23-
StorageInitializedCondition = "StorageInitialized"
24-
DatabasePausedCondition = "DatabasePaused"
22+
StoragePreparedCondition = "StoragePrepared"
23+
StorageInitializedCondition = "StorageInitialized"
24+
StorageProvisionedCondition = "StorageProvisioned"
25+
StoragePausedCondition = "StoragePaused"
26+
StorageReadyCondition = "StorageReady"
27+
28+
DatabasePreparedCondition = "DatabasePrepared"
2529
DatabaseInitializedCondition = "DatabaseInitialized"
30+
DatabaseProvisionedCondition = "DatabaseProvisioned"
31+
DatabasePausedCondition = "DatabasePaused"
32+
DatabaseReadyCondition = "DatabaseReady"
2633

2734
NodeSetPreparedCondition = "NodeSetPrepared"
2835
NodeSetProvisionedCondition = "NodeSetProvisioned"

internal/controllers/database/init.go

Lines changed: 29 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -17,62 +17,35 @@ import (
1717
"github.com/ydb-platform/ydb-kubernetes-operator/internal/resources"
1818
)
1919

20-
func (r *Reconciler) processSkipInitPipeline(
20+
func (r *Reconciler) setInitPipelineStatus(
2121
ctx context.Context,
2222
database *resources.DatabaseBuilder,
2323
) (bool, ctrl.Result, error) {
24-
r.Log.Info("running step processSkipInitPipeline")
25-
r.Log.Info("Database initialization disabled (with annotation), proceed with caution")
26-
27-
r.Recorder.Event(
28-
database,
29-
corev1.EventTypeWarning,
30-
"SkippingInit",
31-
"Skipping database creation due to skip annotation present, be careful!",
32-
)
33-
34-
return r.setInitDatabaseCompleted(
35-
ctx,
36-
database,
37-
"Database creation not performed because initialization is skipped",
38-
)
39-
}
40-
41-
func (r *Reconciler) setInitialStatus(
42-
ctx context.Context,
43-
database *resources.DatabaseBuilder,
44-
) (bool, ctrl.Result, error) {
45-
r.Log.Info("running step setInitialStatus")
46-
47-
if meta.IsStatusConditionTrue(database.Status.Conditions, OldDatabaseInitializedCondition) {
24+
if database.Status.State == DatabasePreparing {
4825
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
4926
Type: DatabaseInitializedCondition,
50-
Status: "True",
51-
Reason: ReasonCompleted,
52-
Message: "Database initialized successfully",
27+
Status: metav1.ConditionFalse,
28+
Reason: ReasonInProgress,
29+
Message: "Database has not been initialized yet",
5330
})
54-
database.Status.State = DatabaseReady
55-
return r.updateStatus(ctx, database)
31+
database.Status.State = DatabaseInitializing
32+
return r.updateStatus(ctx, database, StatusUpdateRequeueDelay)
5633
}
5734

35+
// This block is special internal logic that skips all Database initialization.
5836
if value, ok := database.Annotations[v1alpha1.AnnotationSkipInitialization]; ok && value == v1alpha1.AnnotationValueTrue {
59-
if meta.FindStatusCondition(database.Status.Conditions, DatabaseInitializedCondition) == nil ||
60-
meta.IsStatusConditionFalse(database.Status.Conditions, DatabaseInitializedCondition) {
61-
return r.processSkipInitPipeline(ctx, database)
62-
}
63-
return Stop, ctrl.Result{RequeueAfter: DefaultRequeueDelay}, nil
37+
r.Log.Info("Database initialization disabled (with annotation), proceed with caution")
38+
r.Recorder.Event(
39+
database,
40+
corev1.EventTypeWarning,
41+
"SkippingInit",
42+
"Skipping initialization due to skip annotation present, be careful!",
43+
)
44+
return r.setInitDatabaseCompleted(ctx, database, "Database initialization not performed because initialization is skipped")
6445
}
6546

66-
if database.Status.State == DatabasePending ||
67-
meta.FindStatusCondition(database.Status.Conditions, DatabaseInitializedCondition) == nil {
68-
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
69-
Type: DatabaseInitializedCondition,
70-
Status: "False",
71-
Reason: ReasonInProgress,
72-
Message: "Database has not been initialized yet",
73-
})
74-
database.Status.State = DatabasePreparing
75-
return r.updateStatus(ctx, database)
47+
if meta.IsStatusConditionTrue(database.Status.Conditions, OldDatabaseInitializedCondition) {
48+
return r.setInitDatabaseCompleted(ctx, database, "Database initialized successfully")
7649
}
7750

7851
return Continue, ctrl.Result{Requeue: false}, nil
@@ -85,26 +58,17 @@ func (r *Reconciler) setInitDatabaseCompleted(
8558
) (bool, ctrl.Result, error) {
8659
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
8760
Type: DatabaseInitializedCondition,
88-
Status: "True",
61+
Status: metav1.ConditionTrue,
8962
Reason: ReasonCompleted,
9063
Message: message,
9164
})
92-
database.Status.State = DatabaseProvisioning
93-
94-
return r.updateStatus(ctx, database)
65+
return r.updateStatus(ctx, database, StatusUpdateRequeueDelay)
9566
}
9667

97-
func (r *Reconciler) initializeDatabase(
68+
func (r *Reconciler) initializeTenant(
9869
ctx context.Context,
9970
database *resources.DatabaseBuilder,
10071
) (bool, ctrl.Result, error) {
101-
r.Log.Info("running step initializeDatabase")
102-
103-
if database.Status.State == DatabasePreparing {
104-
database.Status.State = DatabaseInitializing
105-
return r.updateStatus(ctx, database)
106-
}
107-
10872
path := database.GetDatabasePath()
10973
var storageUnits []v1alpha1.StorageUnit
11074
var shared bool
@@ -150,16 +114,15 @@ func (r *Reconciler) initializeDatabase(
150114
return Stop, ctrl.Result{RequeueAfter: SharedDatabaseAwaitRequeueDelay}, err
151115
}
152116

153-
if sharedDatabaseCr.Status.State != "Ready" {
117+
if !meta.IsStatusConditionTrue(sharedDatabaseCr.Status.Conditions, DatabaseProvisionedCondition) {
154118
r.Recorder.Event(
155119
database,
156120
corev1.EventTypeWarning,
157121
"Pending",
158122
fmt.Sprintf(
159-
"Referenced shared Database (%s, %s) in a bad state: %s != Ready",
123+
"Referenced shared Database (%s, %s) is not Provisioned",
160124
database.Spec.ServerlessResources.SharedDatabaseRef.Name,
161125
database.Spec.ServerlessResources.SharedDatabaseRef.Namespace,
162-
sharedDatabaseCr.Status.State,
163126
),
164127
)
165128
return Stop, ctrl.Result{RequeueAfter: SharedDatabaseAwaitRequeueDelay}, err
@@ -213,7 +176,12 @@ func (r *Reconciler) initializeDatabase(
213176
"InitializingFailed",
214177
fmt.Sprintf("Error creating tenant %s: %s", tenant.Path, err),
215178
)
216-
return Stop, ctrl.Result{RequeueAfter: DatabaseInitializationRequeueDelay}, err
179+
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
180+
Type: DatabaseInitializedCondition,
181+
Status: metav1.ConditionFalse,
182+
Reason: ReasonInProgress,
183+
})
184+
return r.updateStatus(ctx, database, DatabaseInitializationRequeueDelay)
217185
}
218186
r.Recorder.Event(
219187
database,
@@ -222,12 +190,5 @@ func (r *Reconciler) initializeDatabase(
222190
fmt.Sprintf("Tenant %s created", tenant.Path),
223191
)
224192

225-
r.Recorder.Event(
226-
database,
227-
corev1.EventTypeNormal,
228-
"DatabaseReady",
229-
"Database is initialized",
230-
)
231-
232193
return r.setInitDatabaseCompleted(ctx, database, "Database initialized successfully")
233194
}

0 commit comments

Comments
 (0)