Skip to content

Commit 8e802e3

Browse files
authored
Revert "conditions for Storage and Database objects" (#202)
1 parent 35a049e commit 8e802e3

File tree

8 files changed

+588
-728
lines changed

8 files changed

+588
-728
lines changed

internal/controllers/constants/constants.go

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,13 @@ const (
1919
OldStorageInitializedCondition = "StorageReady"
2020
OldDatabaseInitializedCondition = "TenantInitialized"
2121

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

34-
NodeSetPreparedCondition = "NodeSetPrepared"
35-
NodeSetProvisionedCondition = "NodeSetProvisioned"
27+
NodeSetPreparedCondition = "NodeSetPreparing"
28+
NodeSetProvisionedCondition = "NodeSetProvisioning"
3629
NodeSetReadyCondition = "NodeSetReady"
3730
NodeSetPausedCondition = "NodeSetPaused"
3831

internal/controllers/database/init.go

Lines changed: 97 additions & 42 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,58 +17,94 @@ import (
1617
"github.com/ydb-platform/ydb-kubernetes-operator/internal/resources"
1718
)
1819

19-
func (r *Reconciler) setInitDatabaseCompleted(
20+
func (r *Reconciler) processSkipInitPipeline(
2021
ctx context.Context,
2122
database *resources.DatabaseBuilder,
22-
message string,
2323
) (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)
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+
)
3139
}
3240

33-
func (r *Reconciler) setInitPipelineStatus(
41+
func (r *Reconciler) setInitialStatus(
3442
ctx context.Context,
3543
database *resources.DatabaseBuilder,
3644
) (bool, ctrl.Result, error) {
37-
if database.Status.State == DatabasePreparing {
45+
r.Log.Info("running step setInitialStatus")
46+
47+
if meta.IsStatusConditionTrue(database.Status.Conditions, OldDatabaseInitializedCondition) {
3848
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
3949
Type: DatabaseInitializedCondition,
40-
Status: metav1.ConditionFalse,
41-
Reason: ReasonInProgress,
42-
Message: "Database has not been initialized yet",
50+
Status: "True",
51+
Reason: ReasonCompleted,
52+
Message: "Database initialized successfully",
4353
})
44-
database.Status.State = DatabaseInitializing
45-
return r.updateStatus(ctx, database, StatusUpdateRequeueDelay)
54+
database.Status.State = DatabaseReady
55+
return r.updateStatus(ctx, database)
4656
}
4757

48-
// This block is special internal logic that skips all Database initialization.
4958
if value, ok := database.Annotations[v1alpha1.AnnotationSkipInitialization]; ok && value == v1alpha1.AnnotationValueTrue {
50-
r.Log.Info("Database initialization disabled (with annotation), proceed with caution")
51-
r.Recorder.Event(
52-
database,
53-
corev1.EventTypeWarning,
54-
"SkippingInit",
55-
"Skipping initialization due to skip annotation present, be careful!",
56-
)
57-
return r.setInitDatabaseCompleted(ctx, database, "Database initialization not performed because initialization is skipped")
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
5864
}
5965

60-
if meta.IsStatusConditionTrue(database.Status.Conditions, OldDatabaseInitializedCondition) {
61-
return r.setInitDatabaseCompleted(ctx, database, "Database initialized successfully")
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)
6276
}
6377

6478
return Continue, ctrl.Result{Requeue: false}, nil
6579
}
6680

67-
func (r *Reconciler) initializeTenant(
81+
func (r *Reconciler) setInitDatabaseCompleted(
82+
ctx context.Context,
83+
database *resources.DatabaseBuilder,
84+
message string,
85+
) (bool, ctrl.Result, error) {
86+
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
87+
Type: DatabaseInitializedCondition,
88+
Status: "True",
89+
Reason: ReasonCompleted,
90+
Message: message,
91+
})
92+
database.Status.State = DatabaseProvisioning
93+
94+
return r.updateStatus(ctx, database)
95+
}
96+
97+
func (r *Reconciler) initializeDatabase(
6898
ctx context.Context,
6999
database *resources.DatabaseBuilder,
70100
) (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+
71108
path := database.GetDatabasePath()
72109
var storageUnits []v1alpha1.StorageUnit
73110
var shared bool
@@ -86,27 +123,43 @@ func (r *Reconciler) initializeTenant(
86123
Namespace: database.Spec.ServerlessResources.SharedDatabaseRef.Namespace,
87124
}, sharedDatabaseCr)
88125
if err != nil {
126+
if apierrors.IsNotFound(err) {
127+
r.Recorder.Event(
128+
database,
129+
corev1.EventTypeWarning,
130+
"Pending",
131+
fmt.Sprintf(
132+
"Database (%s/%s) not found.",
133+
database.Spec.ServerlessResources.SharedDatabaseRef.Name,
134+
database.Spec.ServerlessResources.SharedDatabaseRef.Namespace,
135+
),
136+
)
137+
return Stop, ctrl.Result{RequeueAfter: SharedDatabaseAwaitRequeueDelay}, nil
138+
}
89139
r.Recorder.Event(
90140
database,
91141
corev1.EventTypeWarning,
92-
"ControllerError",
142+
"Pending",
93143
fmt.Sprintf(
94-
"Failed to get Database %s resource, error: %s",
144+
"Failed to get Database (%s, %s) resource, error: %s",
95145
database.Spec.ServerlessResources.SharedDatabaseRef.Name,
146+
database.Spec.ServerlessResources.SharedDatabaseRef.Namespace,
96147
err,
97148
),
98149
)
99150
return Stop, ctrl.Result{RequeueAfter: SharedDatabaseAwaitRequeueDelay}, err
100151
}
101152

102-
if !meta.IsStatusConditionTrue(sharedDatabaseCr.Status.Conditions, DatabaseProvisionedCondition) {
153+
if sharedDatabaseCr.Status.State != "Ready" {
103154
r.Recorder.Event(
104155
database,
105156
corev1.EventTypeWarning,
106-
"InitializingTenant",
157+
"Pending",
107158
fmt.Sprintf(
108-
"Referenced shared Database %s is not Provisioned",
159+
"Referenced shared Database (%s, %s) in a bad state: %s != Ready",
109160
database.Spec.ServerlessResources.SharedDatabaseRef.Name,
161+
database.Spec.ServerlessResources.SharedDatabaseRef.Namespace,
162+
sharedDatabaseCr.Status.State,
110163
),
111164
)
112165
return Stop, ctrl.Result{RequeueAfter: SharedDatabaseAwaitRequeueDelay}, err
@@ -157,22 +210,24 @@ func (r *Reconciler) initializeTenant(
157210
r.Recorder.Event(
158211
database,
159212
corev1.EventTypeWarning,
160-
"InitializingTenant",
213+
"InitializingFailed",
161214
fmt.Sprintf("Error creating tenant %s: %s", tenant.Path, err),
162215
)
163-
meta.SetStatusCondition(&database.Status.Conditions, metav1.Condition{
164-
Type: DatabaseInitializedCondition,
165-
Status: metav1.ConditionFalse,
166-
Reason: ReasonInProgress,
167-
})
168-
return r.updateStatus(ctx, database, DatabaseInitializationRequeueDelay)
216+
return Stop, ctrl.Result{RequeueAfter: DatabaseInitializationRequeueDelay}, err
169217
}
170-
171218
r.Recorder.Event(
172219
database,
173220
corev1.EventTypeNormal,
174-
"InitializingTenant",
221+
"Initialized",
175222
fmt.Sprintf("Tenant %s created", tenant.Path),
176223
)
224+
225+
r.Recorder.Event(
226+
database,
227+
corev1.EventTypeNormal,
228+
"DatabaseReady",
229+
"Database is initialized",
230+
)
231+
177232
return r.setInitDatabaseCompleted(ctx, database, "Database initialized successfully")
178233
}

0 commit comments

Comments
 (0)