@@ -119,7 +119,7 @@ func (r *DRPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
119
119
120
120
log .Info ("create/update" )
121
121
122
- reason , err := validateDRPolicy (ctx , drpolicy , drclusters , r . APIReader )
122
+ reason , err := validateDRPolicy (drpolicy , drclusters )
123
123
if err != nil {
124
124
statusErr := u .validatedSetFalse (reason , err )
125
125
if ! errors .Is (statusErr , err ) || reason != ReasonDRClusterNotFound {
@@ -136,14 +136,6 @@ func (r *DRPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
136
136
return ctrl.Result {}, fmt .Errorf ("finalizer add update: %w" , u .validatedSetFalse ("FinalizerAddFailed" , err ))
137
137
}
138
138
139
- if err := u .validatedSetTrue ("Succeeded" , "drpolicy validated" ); err != nil {
140
- return ctrl.Result {}, fmt .Errorf ("unable to set drpolicy validation: %w" , err )
141
- }
142
-
143
- if err := r .initiateDRPolicyMetrics (drpolicy , drclusters ); err != nil {
144
- return ctrl.Result {}, fmt .Errorf ("error in intiating policy metrics: %w" , err )
145
- }
146
-
147
139
return r .reconcile (u , drclusters , secretsUtil , ramenConfig )
148
140
}
149
141
@@ -162,6 +154,20 @@ func (r *DRPolicyReconciler) reconcile(
162
154
return ctrl.Result {}, fmt .Errorf ("drpolicy peerClass update: %w" , err )
163
155
}
164
156
157
+ // we will be able to validate conflicts only after PeerClass is updated
158
+ err := validatePolicyConflicts (u .ctx , r .APIReader , u .object , drclusters )
159
+ if err != nil {
160
+ return ctrl.Result {}, fmt .Errorf ("%s: %w" , ReasonValidationFailed , err ) // we can change the message later.
161
+ }
162
+
163
+ if err := u .validatedSetTrue ("Succeeded" , "drpolicy validated" ); err != nil {
164
+ return ctrl.Result {}, fmt .Errorf ("unable to set drpolicy validation: %w" , err )
165
+ }
166
+
167
+ if err := r .initiateDRPolicyMetrics (u .object , drclusters ); err != nil {
168
+ return ctrl.Result {}, fmt .Errorf ("error in intiating policy metrics: %w" , err )
169
+ }
170
+
165
171
return ctrl.Result {}, nil
166
172
}
167
173
@@ -178,10 +184,8 @@ func (r *DRPolicyReconciler) initiateDRPolicyMetrics(drpolicy *ramen.DRPolicy, d
178
184
return nil
179
185
}
180
186
181
- func validateDRPolicy (ctx context.Context ,
182
- drpolicy * ramen.DRPolicy ,
187
+ func validateDRPolicy (drpolicy * ramen.DRPolicy ,
183
188
drclusters * ramen.DRClusterList ,
184
- apiReader client.Reader ,
185
189
) (string , error ) {
186
190
// DRPolicy does not support both Sync and Async configurations in one single DRPolicy
187
191
if len (drpolicy .Status .Sync .PeerClasses ) > 0 && len (drpolicy .Status .Async .PeerClasses ) > 0 {
@@ -200,11 +204,6 @@ func validateDRPolicy(ctx context.Context,
200
204
return reason , err
201
205
}
202
206
203
- err = validatePolicyConflicts (ctx , apiReader , drpolicy , drclusters )
204
- if err != nil {
205
- return ReasonValidationFailed , err
206
- }
207
-
208
207
return "" , nil
209
208
}
210
209
0 commit comments