mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-12-18 11:00:25 +00:00
rbd: split buildCreateVolumeResponse() from CreateVolume()
The gocyclo linter complains about the high complexity of the CreateVolume() function: > pkg/rbd/controllerserver.go:133:1: cyclomatic complexity 21 of func `(*ControllerServer).CreateVolume` is high (> 20) (gocyclo) By splitting it up and separeting the creation of an exisint CSI Volume object in buildCreateVolumeResponse(), the gocyclic linter does not complain any longer. Signed-off-by: Niels de Vos <ndevos@redhat.com>
This commit is contained in:
parent
c89c68e9ea
commit
45d1404d3e
@ -129,6 +129,36 @@ func (cs *ControllerServer) parseVolCreateRequest(ctx context.Context, req *csi.
|
|||||||
return rbdVol, nil
|
return rbdVol, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func buildCreateVolumeResponse(ctx context.Context, req *csi.CreateVolumeRequest, rbdVol *rbdVolume) (*csi.CreateVolumeResponse, error) {
|
||||||
|
if rbdVol.Encrypted {
|
||||||
|
err := rbdVol.ensureEncryptionMetadataSet(rbdImageRequiresEncryption)
|
||||||
|
if err != nil {
|
||||||
|
klog.Error(util.Log(ctx, err.Error()))
|
||||||
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
volumeContext := req.GetParameters()
|
||||||
|
volumeContext["pool"] = rbdVol.Pool
|
||||||
|
volumeContext["journalPool"] = rbdVol.JournalPool
|
||||||
|
volumeContext["imageName"] = rbdVol.RbdImageName
|
||||||
|
volume := &csi.Volume{
|
||||||
|
VolumeId: rbdVol.VolID,
|
||||||
|
CapacityBytes: rbdVol.VolSize,
|
||||||
|
VolumeContext: volumeContext,
|
||||||
|
ContentSource: req.GetVolumeContentSource(),
|
||||||
|
}
|
||||||
|
if rbdVol.Topology != nil {
|
||||||
|
volume.AccessibleTopology =
|
||||||
|
[]*csi.Topology{
|
||||||
|
{
|
||||||
|
Segments: rbdVol.Topology,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &csi.CreateVolumeResponse{Volume: volume}, nil
|
||||||
|
}
|
||||||
|
|
||||||
// CreateVolume creates the volume in backend
|
// CreateVolume creates the volume in backend
|
||||||
func (cs *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest) (*csi.CreateVolumeResponse, error) {
|
func (cs *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest) (*csi.CreateVolumeResponse, error) {
|
||||||
if err := cs.validateVolumeReq(ctx, req); err != nil {
|
if err := cs.validateVolumeReq(ctx, req); err != nil {
|
||||||
@ -171,33 +201,7 @@ func (cs *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol
|
|||||||
return nil, status.Error(codes.Internal, err.Error())
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
if found {
|
if found {
|
||||||
if rbdVol.Encrypted {
|
return buildCreateVolumeResponse(ctx, req, rbdVol)
|
||||||
err = rbdVol.ensureEncryptionMetadataSet(rbdImageRequiresEncryption)
|
|
||||||
if err != nil {
|
|
||||||
klog.Errorf(util.Log(ctx, err.Error()))
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
volumeContext := req.GetParameters()
|
|
||||||
volumeContext["pool"] = rbdVol.Pool
|
|
||||||
volumeContext["journalPool"] = rbdVol.JournalPool
|
|
||||||
volumeContext["imageName"] = rbdVol.RbdImageName
|
|
||||||
volume := &csi.Volume{
|
|
||||||
VolumeId: rbdVol.VolID,
|
|
||||||
CapacityBytes: rbdVol.VolSize,
|
|
||||||
VolumeContext: volumeContext,
|
|
||||||
ContentSource: req.GetVolumeContentSource(),
|
|
||||||
}
|
|
||||||
if rbdVol.Topology != nil {
|
|
||||||
volume.AccessibleTopology =
|
|
||||||
[]*csi.Topology{
|
|
||||||
{
|
|
||||||
Segments: rbdVol.Topology,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return &csi.CreateVolumeResponse{Volume: volume}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rbdSnap, err := cs.checkSnapshotSource(ctx, req, cr)
|
rbdSnap, err := cs.checkSnapshotSource(ctx, req, cr)
|
||||||
|
Loading…
Reference in New Issue
Block a user