rbd: let parseVolCreateRequest() return a connected rbdVolume

By returning a connected rbdVolume in parseVolCreateRequest(), the
CreateVolume() function can be simplified a little. There is no need to
call the additional Connect() and detect failures with it.

Signed-off-by: Niels de Vos <ndevos@ibm.com>
This commit is contained in:
Niels de Vos 2024-03-22 14:43:25 +01:00 committed by mergify[bot]
parent 7b2b125b18
commit a517290ea7

View File

@ -150,6 +150,7 @@ func validateStriping(parameters map[string]string) error {
func (cs *ControllerServer) parseVolCreateRequest( func (cs *ControllerServer) parseVolCreateRequest(
ctx context.Context, ctx context.Context,
req *csi.CreateVolumeRequest, req *csi.CreateVolumeRequest,
cr *util.Credentials,
) (*rbdVolume, error) { ) (*rbdVolume, error) {
// TODO (sbezverk) Last check for not exceeding total storage capacity // TODO (sbezverk) Last check for not exceeding total storage capacity
@ -226,6 +227,13 @@ func (cs *ControllerServer) parseVolCreateRequest(
return nil, status.Error(codes.InvalidArgument, err.Error()) return nil, status.Error(codes.InvalidArgument, err.Error())
} }
err = rbdVol.Connect(cr)
if err != nil {
log.ErrorLog(ctx, "failed to connect to volume %v: %v", rbdVol.RbdImageName, err)
return nil, status.Error(codes.Internal, err.Error())
}
// NOTE: rbdVol does not contain VolID and RbdImageName populated, everything // NOTE: rbdVol does not contain VolID and RbdImageName populated, everything
// else is populated post create request parsing // else is populated post create request parsing
return rbdVol, nil return rbdVol, nil
@ -324,7 +332,7 @@ func (cs *ControllerServer) CreateVolume(
return nil, status.Error(codes.InvalidArgument, err.Error()) return nil, status.Error(codes.InvalidArgument, err.Error())
} }
defer cr.DeleteCredentials() defer cr.DeleteCredentials()
rbdVol, err := cs.parseVolCreateRequest(ctx, req) rbdVol, err := cs.parseVolCreateRequest(ctx, req, cr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -337,13 +345,6 @@ func (cs *ControllerServer) CreateVolume(
} }
defer cs.VolumeLocks.Release(req.GetName()) defer cs.VolumeLocks.Release(req.GetName())
err = rbdVol.Connect(cr)
if err != nil {
log.ErrorLog(ctx, "failed to connect to volume %v: %v", rbdVol.RbdImageName, err)
return nil, status.Error(codes.Internal, err.Error())
}
parentVol, rbdSnap, err := checkContentSource(ctx, req, cr) parentVol, rbdSnap, err := checkContentSource(ctx, req, cr)
if err != nil { if err != nil {
return nil, err return nil, err