Skip to content

Commit

Permalink
fix: empty string of backup.status.size
Browse files Browse the repository at this point in the history
The data type of backup.status.size is string. If backup is failed and
the size is not set to "0". The metrics collect will fail to parse it.

- The default value of backup.status.size should be "0"
- Update the existing backups with backup.status.size == "" to "0"

Longhorn 10358

Signed-off-by: Derek Su <derek.su@suse.com>
(cherry picked from commit fb0a416)

Signed-off-by: Derek Su <derek.su@suse.com>
  • Loading branch information
derekbit authored and mergify[bot] committed Feb 7, 2025
1 parent 935c595 commit 56a5a81
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 23 deletions.
47 changes: 25 additions & 22 deletions k8s/crds.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: backingimagedatasources.longhorn.io
Expand Down Expand Up @@ -188,7 +188,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: backingimagemanagers.longhorn.io
Expand Down Expand Up @@ -378,7 +378,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: backingimages.longhorn.io
Expand Down Expand Up @@ -556,7 +556,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: backupbackingimages.longhorn.io
Expand Down Expand Up @@ -710,7 +710,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: backups.longhorn.io
Expand Down Expand Up @@ -879,6 +879,7 @@ spec:
description: The address of the replica that runs snapshot backup.
type: string
size:
default: "0"
description: The snapshot size.
type: string
snapshotCreatedAt:
Expand Down Expand Up @@ -907,6 +908,8 @@ spec:
volumeSize:
description: The volume size.
type: string
required:
- size
type: object
type: object
served: true
Expand All @@ -918,7 +921,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: backuptargets.longhorn.io
Expand Down Expand Up @@ -1119,7 +1122,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: backupvolumes.longhorn.io
Expand Down Expand Up @@ -1298,7 +1301,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: engineimages.longhorn.io
Expand Down Expand Up @@ -1510,7 +1513,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: engines.longhorn.io
Expand Down Expand Up @@ -1906,7 +1909,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: instancemanagers.longhorn.io
Expand Down Expand Up @@ -2187,7 +2190,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: nodes.longhorn.io
Expand Down Expand Up @@ -2452,7 +2455,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: orphans.longhorn.io
Expand Down Expand Up @@ -2563,7 +2566,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: recurringjobs.longhorn.io
Expand Down Expand Up @@ -2749,7 +2752,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: replicas.longhorn.io
Expand Down Expand Up @@ -3029,7 +3032,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: settings.longhorn.io
Expand Down Expand Up @@ -3129,7 +3132,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: sharemanagers.longhorn.io
Expand Down Expand Up @@ -3256,7 +3259,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: snapshots.longhorn.io
Expand Down Expand Up @@ -3386,7 +3389,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: supportbundles.longhorn.io
Expand Down Expand Up @@ -3517,7 +3520,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: systembackups.longhorn.io
Expand Down Expand Up @@ -3654,7 +3657,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: systemrestores.longhorn.io
Expand Down Expand Up @@ -3763,7 +3766,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: volumeattachments.longhorn.io
Expand Down Expand Up @@ -3907,7 +3910,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.15.0
controller-gen.kubebuilder.io/version: v0.17.1
labels:
longhorn-manager: ""
name: volumes.longhorn.io
Expand Down
2 changes: 1 addition & 1 deletion k8s/pkg/apis/longhorn/v1beta2/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ type BackupStatus struct {
// +optional
BackupCreatedAt string `json:"backupCreatedAt"`
// The snapshot size.
// +optional
// +kubebuilder:default="0"
Size string `json:"size"`
// The labels of snapshot backup.
// +optional
Expand Down
13 changes: 13 additions & 0 deletions upgrade/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"github.com/longhorn/longhorn-manager/upgrade/v15xto160"
"github.com/longhorn/longhorn-manager/upgrade/v160to161"
"github.com/longhorn/longhorn-manager/upgrade/v162to163"
"github.com/longhorn/longhorn-manager/upgrade/v164to165"
"github.com/longhorn/longhorn-manager/upgrade/v1beta1"

longhorn "github.com/longhorn/longhorn-manager/k8s/pkg/apis/longhorn/v1beta2"
Expand Down Expand Up @@ -274,6 +275,12 @@ func doResourceUpgrade(namespace string, lhClient *lhclientset.Clientset, kubeCl
return err
}
}
if semver.Compare(lhVersionBeforeUpgrade, "v1.6.5") < 0 {
logrus.Info("Walking through the resource upgrade path v1.6.4 to v1.6.5")
if err := v164to165.UpgradeResources(namespace, lhClient, kubeClient, resourceMaps); err != nil {
return err
}
}
if err := upgradeutil.UpdateResources(namespace, lhClient, resourceMaps); err != nil {
return err
}
Expand All @@ -299,6 +306,12 @@ func doResourceUpgrade(namespace string, lhClient *lhclientset.Clientset, kubeCl
return err
}
}
if semver.Compare(lhVersionBeforeUpgrade, "v1.6.5") < 0 {
logrus.Info("Walking through the resource status upgrade path v1.6.4 to v1.6.5")
if err := v164to165.UpgradeResourcesStatus(namespace, lhClient, kubeClient, resourceMaps); err != nil {
return err
}
}
if err := upgradeutil.UpdateResourcesStatus(namespace, lhClient, resourceMaps); err != nil {
return err
}
Expand Down
51 changes: 51 additions & 0 deletions upgrade/v164to165/upgrade.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package v164to165

import (
"github.com/pkg/errors"

apierrors "k8s.io/apimachinery/pkg/api/errors"
clientset "k8s.io/client-go/kubernetes"

lhclientset "github.com/longhorn/longhorn-manager/k8s/pkg/client/clientset/versioned"
upgradeutil "github.com/longhorn/longhorn-manager/upgrade/util"
)

const (
upgradeLogPrefix = "upgrade from v1.6.4 to v1.6.5: "
)

func UpgradeResources(namespace string, lhClient *lhclientset.Clientset, kubeClient *clientset.Clientset, resourceMaps map[string]interface{}) error {
if resourceMaps == nil {
return errors.New("resourceMaps cannot be nil")
}

return nil
}

func UpgradeResourcesStatus(namespace string, lhClient *lhclientset.Clientset, kubeClient *clientset.Clientset, resourceMaps map[string]interface{}) error {
if resourceMaps == nil {
return errors.New("resourceMaps cannot be nil")
}
return upgradeBackupStatus(namespace, lhClient, resourceMaps)
}

func upgradeBackupStatus(namespace string, lhClient *lhclientset.Clientset, resourceMaps map[string]interface{}) (err error) {
defer func() {
err = errors.Wrapf(err, upgradeLogPrefix+"upgrade backups failed")
}()

backupMap, err := upgradeutil.ListAndUpdateBackupsInProvidedCache(namespace, lhClient, resourceMaps)
if err != nil {
if apierrors.IsNotFound(err) {
return nil
}
return errors.Wrapf(err, "failed to list all existing Longhorn backups during the backup status upgrade")
}

for _, b := range backupMap {
if b.Status.Size == "" {
b.Status.Size = "0"
}
}
return nil
}

0 comments on commit 56a5a81

Please sign in to comment.