Skip to content

Commit e2e249c

Browse files
Merge pull request #3443 from parth-gr/autoscaler-external
autoscaler: autoscaler should move to invalid in case of external mode
2 parents b932df8 + a13c2be commit e2e249c

File tree

1 file changed

+38
-3
lines changed

1 file changed

+38
-3
lines changed

controllers/storageautoscaler/storageautoscaler_controller.go

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,30 +225,44 @@ func (r *StorageAutoscalerReconciler) updateStatus(ctx context.Context, storageA
225225
}
226226

227227
func (r *StorageAutoscalerReconciler) detectInvalidState(ctx context.Context, storageAutoScaler *ocsv1.StorageAutoScaler, storageCluster *ocsv1.StorageCluster, namespace string) (bool, error) {
228+
// check if it's a external mode storage cluster
229+
externalMode, err := r.detectExternalModeStorageCluster(ctx, storageCluster, storageAutoScaler)
230+
if err != nil {
231+
return false, err
232+
}
233+
if externalMode {
234+
return true, nil
235+
}
236+
228237
// if more than one storage autoscaler is present in the cluster with same device class and same storage cluster
229238
// return error
230239
duplicateCr, err := r.detectDuplicateStorageAutoScaler(ctx, storageAutoScaler, namespace)
231240
if err != nil {
232241
return false, err
233242
}
243+
if duplicateCr {
244+
return true, nil
245+
}
234246

235247
// list the storagecluster deviceset storageclass
236248
duplicateClass, err := r.detectLsoStorageclass(ctx, storageCluster, storageAutoScaler)
237249
if err != nil {
238250
return false, err
239251
}
252+
if duplicateClass {
253+
return true, nil
254+
}
240255

241256
// check if the storage profile is lean
242257
leanProfile, err := r.detectLeanResourceProfile(ctx, storageCluster, storageAutoScaler)
243258
if err != nil {
244259
return false, err
245260
}
246-
247-
if duplicateCr || duplicateClass || leanProfile {
248-
r.Log.Info("storage autoscaler is in invalid state", "namespace", storageAutoScaler.Namespace, "name", storageAutoScaler.Name)
261+
if leanProfile {
249262
return true, nil
250263
}
251264

265+
r.Log.Info("storage autoscaler is in invalid state", "namespace", storageAutoScaler.Namespace, "name", storageAutoScaler.Name)
252266
return false, nil
253267
}
254268

@@ -337,6 +351,27 @@ func (r *StorageAutoscalerReconciler) detectLeanResourceProfile(ctx context.Cont
337351
return true, nil
338352
}
339353

354+
func (r *StorageAutoscalerReconciler) detectExternalModeStorageCluster(ctx context.Context, storageCluster *ocsv1.StorageCluster, storageAutoScaler *ocsv1.StorageAutoScaler) (bool, error) {
355+
if !storageCluster.Spec.ExternalStorage.Enable {
356+
return false, nil
357+
}
358+
359+
err := fmt.Errorf("storage cluster is in external mode, autoscaler does not support external mode, delete the autoStorageScaler cr as scaling is not supported")
360+
r.Log.Error(err, "storage cluster is external mode")
361+
362+
storageAutoScaler.Status.Phase = ocsv1.StorageAutoScalerPhaseInvalid
363+
storageAutoScaler.Status.Error = &ocsv1.TimestampedError{
364+
Message: "storage cluster is in external mode, autoscaler does not support external mode, delete the autoStorageScaler cr as scaling is not supported",
365+
Timestamp: metav1.Now(),
366+
}
367+
err = r.updateStatus(ctx, storageAutoScaler)
368+
if err != nil {
369+
return false, err
370+
}
371+
// not sending an error as user can see in the cr status
372+
return true, nil
373+
}
374+
340375
func (r *StorageAutoscalerReconciler) getCurrentOsdSizeAndCount(ctx context.Context, storageAutoScaler *ocsv1.StorageAutoScaler) (resource.Quantity, int, error) {
341376
currentOsdCount := 0
342377
currentOsdSize := resource.Quantity{}

0 commit comments

Comments
 (0)