Skip to content

Commit

Permalink
rbd: set/get correct ImageID in more places
Browse files Browse the repository at this point in the history
In some places the ImageID is used as the ID of the parent. That is very
confusing and prone to errors. Instead, fetch the right ImageID where
possible, and set ParentID for referencing to parent images.

Signed-off-by: Niels de Vos <[email protected]>
  • Loading branch information
nixpanic committed Nov 27, 2023
1 parent 319aece commit 4be0051
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 0 deletions.
1 change: 1 addition & 0 deletions internal/rbd/controllerserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -1173,6 +1173,7 @@ func (cs *ControllerServer) CreateSnapshot(

// Update the metadata on snapshot not on the original image
rbdVol.RbdImageName = rbdSnap.RbdSnapName
rbdVol.ImageID = vol.ImageID
rbdVol.ClusterName = cs.ClusterName

defer func() {
Expand Down
17 changes: 17 additions & 0 deletions internal/rbd/rbd_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ type rbdImage struct {
NamePrefix string
// ParentName represents the parent image name of the image.
ParentName string
// ParentID represents the parent image ID of the image.
ParentID string
// Parent Pool is the pool that contains the parent image.
ParentPool string
// Cluster name
Expand Down Expand Up @@ -711,6 +713,7 @@ func (ri *rbdImage) getCloneDepth(ctx context.Context) (uint, error) {
vol.Pool = ri.Pool
vol.Monitors = ri.Monitors
vol.RbdImageName = ri.RbdImageName
vol.ImageID = ri.ImageID
vol.RadosNamespace = ri.RadosNamespace
vol.conn = ri.conn.Copy()

Expand Down Expand Up @@ -743,6 +746,7 @@ func (ri *rbdImage) getCloneDepth(ctx context.Context) (uint, error) {
depth++
}
vol.RbdImageName = vol.ParentName
vol.ImageID = vol.ParentID
vol.Pool = vol.ParentPool
}
}
Expand Down Expand Up @@ -882,6 +886,9 @@ func (ri *rbdImage) getParentName() (string, error) {
return "", err
}

ri.ParentName = parentInfo.Image.ImageName
ri.ParentID = parentInfo.Image.ImageID

return parentInfo.Image.ImageName, nil
}

Expand Down Expand Up @@ -1595,6 +1602,11 @@ func (ri *rbdImage) getImageInfo() error {
// TODO: can rv.VolSize not be a uint64? Or initialize it to -1?
ri.VolSize = int64(imageInfo.Size)

ri.ImageID, err = image.GetId()
if err != nil {
return err
}

features, err := image.GetFeatures()
if err != nil {
return err
Expand All @@ -1608,11 +1620,13 @@ func (ri *rbdImage) getImageInfo() error {
// the parent is an error or not.
if errors.Is(err, librbd.ErrNotFound) {
ri.ParentName = ""
ri.ParentID = ""
} else {
return err
}
} else {
ri.ParentName = parentInfo.Image.ImageName
ri.ParentID = parentInfo.Image.ImageID
ri.ParentPool = parentInfo.Image.PoolName
}
// Get image creation time
Expand Down Expand Up @@ -1643,6 +1657,7 @@ func (ri *rbdImage) getParent() (*rbdImage, error) {
parentImage.Pool = ri.ParentPool
parentImage.RadosNamespace = ri.RadosNamespace
parentImage.RbdImageName = ri.ParentName
parentImage.ImageID = ri.ParentID

err = parentImage.getImageInfo()
if err != nil {
Expand Down Expand Up @@ -1699,6 +1714,7 @@ type rbdImageMetadataStash struct {
Pool string `json:"pool"`
RadosNamespace string `json:"radosNamespace"`
ImageName string `json:"image"`
ImageID string `json:"imageID"`
UnmapOptions string `json:"unmapOptions"`
NbdAccess bool `json:"accessType"`
Encrypted bool `json:"encrypted"`
Expand Down Expand Up @@ -1728,6 +1744,7 @@ func stashRBDImageMetadata(volOptions *rbdVolume, metaDataPath string) error {
Pool: volOptions.Pool,
RadosNamespace: volOptions.RadosNamespace,
ImageName: volOptions.RbdImageName,
ImageID: volOptions.ImageID,
Encrypted: volOptions.isBlockEncrypted(),
UnmapOptions: volOptions.UnmapOptions,
}
Expand Down
2 changes: 2 additions & 0 deletions internal/rbd/snapshot.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ func generateVolFromSnap(rbdSnap *rbdSnapshot) *rbdVolume {
vol.JournalPool = rbdSnap.JournalPool
vol.RadosNamespace = rbdSnap.RadosNamespace
vol.RbdImageName = rbdSnap.RbdSnapName
vol.ParentName = rbdSnap.ParentName
vol.ParentID = rbdSnap.ParentID

// /!\ WARNING /!\
//
Expand Down

0 comments on commit 4be0051

Please sign in to comment.