diff --git a/api/v1beta1/aerospikebackup_webhook.go b/api/v1beta1/aerospikebackup_webhook.go index 6e0ed238..8f2af88f 100644 --- a/api/v1beta1/aerospikebackup_webhook.go +++ b/api/v1beta1/aerospikebackup_webhook.go @@ -104,7 +104,7 @@ func (r *AerospikeBackup) validate() error { return gErr } - if err := validateBackupSvcSupportedVersion(k8sClient, + if err := ValidateBackupSvcSupportedVersion(k8sClient, r.Spec.BackupService.Name, r.Spec.BackupService.Namespace, ); err != nil { diff --git a/api/v1beta1/aerospikebackupservice_webhook.go b/api/v1beta1/aerospikebackupservice_webhook.go index 0c80c795..aa998188 100644 --- a/api/v1beta1/aerospikebackupservice_webhook.go +++ b/api/v1beta1/aerospikebackupservice_webhook.go @@ -33,7 +33,7 @@ import ( asdbv1 "github.com/aerospike/aerospike-kubernetes-operator/api/v1" ) -const minSupportedVersion = "3.0.0" +const MinSupportedVersion = "3.0.0" func (r *AerospikeBackupService) SetupWebhookWithManager(mgr ctrl.Manager) error { return ctrl.NewWebhookManagedBy(mgr). diff --git a/api/v1beta1/aerospikerestore_webhook.go b/api/v1beta1/aerospikerestore_webhook.go index 57a92c00..81851527 100644 --- a/api/v1beta1/aerospikerestore_webhook.go +++ b/api/v1beta1/aerospikerestore_webhook.go @@ -73,7 +73,7 @@ func (r *AerospikeRestore) ValidateCreate() (admission.Warnings, error) { return nil, gErr } - if err := validateBackupSvcSupportedVersion(k8sClient, + if err := ValidateBackupSvcSupportedVersion(k8sClient, r.Spec.BackupService.Name, r.Spec.BackupService.Namespace, ); err != nil { diff --git a/api/v1beta1/constant.go b/api/v1beta1/constant.go index f1a6c2c3..8f40364a 100644 --- a/api/v1beta1/constant.go +++ b/api/v1beta1/constant.go @@ -24,6 +24,5 @@ const ( const ( HTTPKey = "http" AerospikeBackupServiceKey = "aerospike-backup-service" - ForceRefreshKey = AerospikeBackupServiceKey + "/force-refresh" RefreshTimeKey = AerospikeBackupServiceKey + "/last-refresh" ) diff --git a/api/v1beta1/utils.go b/api/v1beta1/utils.go index a378079d..095a0881 100644 --- a/api/v1beta1/utils.go +++ b/api/v1beta1/utils.go @@ -69,22 +69,22 @@ func ValidateBackupSvcVersion(image string) error { return err } - val, err := lib.CompareVersions(version, minSupportedVersion) + val, err := lib.CompareVersions(version, MinSupportedVersion) if err != nil { return fmt.Errorf("failed to check backup service image version: %v", err) } if val < 0 { return fmt.Errorf("backup service version %s is not supported. Minimum supported version is %s", - version, minSupportedVersion) + version, MinSupportedVersion) } return nil } -// validateBackupSvcSupportedVersion validates the supported backup service version. +// ValidateBackupSvcSupportedVersion validates the supported backup service version. // It returns an error if the backup service version is less than 3.0.0. -func validateBackupSvcSupportedVersion(k8sClient client.Client, name, namespace string) error { +func ValidateBackupSvcSupportedVersion(k8sClient client.Client, name, namespace string) error { var backupSvc AerospikeBackupService if err := k8sClient.Get(context.TODO(), diff --git a/internal/controller/backup-service/reconciler.go b/internal/controller/backup-service/reconciler.go index 17746df0..638dafe0 100644 --- a/internal/controller/backup-service/reconciler.go +++ b/internal/controller/backup-service/reconciler.go @@ -67,7 +67,8 @@ func (r *SingleBackupServiceReconciler) Reconcile() (result ctrl.Result, recErr // Skip reconcile if the backup service version is less than 3.0.0. // This is to avoid rolling restart of the backup service pods after AKO upgrade if err := asdbv1beta1.ValidateBackupSvcVersion(r.aeroBackupService.Spec.Image); err != nil { - r.Log.Info("Skipping reconcile as backup service version is less than 3.0.0") + r.Log.Info(fmt.Sprintf("Skipping reconcile as backup service version is less than %s", + asdbv1beta1.MinSupportedVersion)) return reconcile.Result{}, nil } @@ -170,7 +171,7 @@ func (r *SingleBackupServiceReconciler) reconcileConfigMap() error { context.TODO(), cm, common.CreateOption, ); err != nil { return fmt.Errorf( - "failed to create ConfigMap: %w", + "failed to create ConfigMap: %v", err, ) } diff --git a/internal/controller/backup/reconciler.go b/internal/controller/backup/reconciler.go index b0ae37a0..8e443747 100644 --- a/internal/controller/backup/reconciler.go +++ b/internal/controller/backup/reconciler.go @@ -35,6 +35,16 @@ type SingleBackupReconciler struct { } func (r *SingleBackupReconciler) Reconcile() (result ctrl.Result, recErr error) { + // Skip reconcile if the backup service version is less than 3.0.0. + // This is a safe check to avoid any issue after AKO upgrade due to older backup service versions + if err := asdbv1beta1.ValidateBackupSvcSupportedVersion(r.Client, + r.aeroBackup.Spec.BackupService.Name, + r.aeroBackup.Spec.BackupService.Namespace); err != nil { + r.Log.Info(fmt.Sprintf("Skipping reconcile as backup service version is less than %s", + asdbv1beta1.MinSupportedVersion)) + return reconcile.Result{}, nil + } + // Check DeletionTimestamp to see if the backup is being deleted if !r.aeroBackup.ObjectMeta.DeletionTimestamp.IsZero() { r.Log.Info("Deleting AerospikeBackup") diff --git a/internal/controller/restore/reconciler.go b/internal/controller/restore/reconciler.go index d14aaccc..d529cb0d 100644 --- a/internal/controller/restore/reconciler.go +++ b/internal/controller/restore/reconciler.go @@ -166,7 +166,7 @@ func (r *SingleRestoreReconciler) checkRestoreStatus() error { return err } - restoreStatus, err := serviceClient.CheckRestoreStatus(r.aeroRestore.Status.JobID) + restoreStatus, err := serviceClient.CheckRestoreStatus(*r.aeroRestore.Status.JobID) if err != nil { return err } @@ -252,7 +252,7 @@ func (r *SingleRestoreReconciler) cancelRestoreJob() error { return err } - if statusCode, err := serviceClient.CancelRestoreJob(r.aeroRestore.Status.JobID); err != nil { + if statusCode, err := serviceClient.CancelRestoreJob(*r.aeroRestore.Status.JobID); err != nil { if statusCode == http.StatusNotFound { r.Log.Info("Restore job not found, skipping cancel") return nil diff --git a/pkg/backup-service/client.go b/pkg/backup-service/client.go index c86df28a..c3d80e98 100644 --- a/pkg/backup-service/client.go +++ b/pkg/backup-service/client.go @@ -685,8 +685,8 @@ func (c *Client) TriggerRestoreWithType(log logr.Logger, restoreType string, return jobID, &resp.StatusCode, nil } -func (c *Client) CheckRestoreStatus(jobID *int64) (map[string]interface{}, error) { - url := c.API(fmt.Sprintf("/restore/status/%d", *jobID)) +func (c *Client) CheckRestoreStatus(jobID int64) (map[string]interface{}, error) { + url := c.API(fmt.Sprintf("/restore/status/%d", jobID)) resp, err := http.Get(url) if err != nil { @@ -713,8 +713,8 @@ func (c *Client) CheckRestoreStatus(jobID *int64) (map[string]interface{}, error return restoreStatus, nil } -func (c *Client) CancelRestoreJob(jobID *int64) (int, error) { - url := c.API(fmt.Sprintf("/restore/cancel/%d", *jobID)) +func (c *Client) CancelRestoreJob(jobID int64) (int, error) { + url := c.API(fmt.Sprintf("/restore/cancel/%d", jobID)) resp, err := http.Post(url, contentTypeJSON, nil) if err != nil { @@ -729,7 +729,7 @@ func (c *Client) CancelRestoreJob(jobID *int64) (int, error) { return 0, err } - return resp.StatusCode, fmt.Errorf("failed to delete restore job, error: %s", string(body)) + return resp.StatusCode, fmt.Errorf("failed to cancel restore job, error: %s", string(body)) } return resp.StatusCode, nil