mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-10 00:10:20 +00:00
rbd: flatten image in ModifyVolumeGroupMembership
in ModifyVolumeGroupMembership RPC call, flatten the required images before adding it to the group or else if the parent is not mirror enabled adding a child to the group will fail. Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
parent
88a5c8a0eb
commit
7e2e5ba2e5
@ -346,17 +346,44 @@ func (vs *VolumeGroupServer) ModifyVolumeGroupMembership(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// add the new volumes to the group
|
// resolve all volumes
|
||||||
for _, id := range toAdd {
|
volumes := make([]types.Volume, len(toAdd))
|
||||||
vol, getErr := mgr.GetVolumeByID(ctx, id)
|
defer func() {
|
||||||
if getErr != nil {
|
for _, vol := range volumes {
|
||||||
|
vol.Destroy(ctx)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
for i, id := range toAdd {
|
||||||
|
var vol types.Volume
|
||||||
|
vol, err = mgr.GetVolumeByID(ctx, id)
|
||||||
|
if err != nil {
|
||||||
return nil, status.Errorf(
|
return nil, status.Errorf(
|
||||||
codes.NotFound,
|
codes.NotFound,
|
||||||
"failed to find a volume with CSI ID %q: %v",
|
"failed to find a volume with CSI ID %q: %v",
|
||||||
id,
|
id,
|
||||||
err)
|
err)
|
||||||
}
|
}
|
||||||
|
volumes[i] = vol
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract the flatten mode
|
||||||
|
flattenMode, err := getFlattenMode(ctx, req.GetParameters())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// Flatten the image if the flatten mode is set to FlattenModeForce
|
||||||
|
// before adding it to the volume group.
|
||||||
|
for _, vol := range volumes {
|
||||||
|
err = vol.HandleParentImageExistence(ctx, flattenMode)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("failed to handle parent image for volume group %q: %w", vg, err)
|
||||||
|
|
||||||
|
return nil, getGRPCError(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add the new volumes to the group
|
||||||
|
for _, vol := range volumes {
|
||||||
err = vg.AddVolume(ctx, vol)
|
err = vg.AddVolume(ctx, vol)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(
|
return nil, status.Errorf(
|
||||||
|
Loading…
Reference in New Issue
Block a user