mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-26 16:20:28 +00:00
Remove code complexity
Signed-off-by: Madhu Rajanna <mrajanna@redhat.com>
This commit is contained in:
parent
de1f099680
commit
8f2941dd47
@ -65,19 +65,26 @@ func (cs *controllerServer) LoadExDataFromMetadataStore() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest) (*csi.CreateVolumeResponse, error) {
|
func (cs *controllerServer) validateVolumeReq(req *csi.CreateVolumeRequest) error {
|
||||||
if err := cs.Driver.ValidateControllerServiceRequest(csi.ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME); err != nil {
|
if err := cs.Driver.ValidateControllerServiceRequest(csi.ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME); err != nil {
|
||||||
glog.V(3).Infof("invalid create volume req: %v", req)
|
glog.V(3).Infof("invalid create volume req: %v", req)
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
// Check sanity of request Name, Volume Capabilities
|
// Check sanity of request Name, Volume Capabilities
|
||||||
if len(req.Name) == 0 {
|
if len(req.Name) == 0 {
|
||||||
return nil, status.Error(codes.InvalidArgument, "Volume Name cannot be empty")
|
return status.Error(codes.InvalidArgument, "Volume Name cannot be empty")
|
||||||
}
|
}
|
||||||
if req.VolumeCapabilities == nil {
|
if req.VolumeCapabilities == nil {
|
||||||
return nil, status.Error(codes.InvalidArgument, "Volume Capabilities cannot be empty")
|
return status.Error(codes.InvalidArgument, "Volume Capabilities cannot be empty")
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest) (*csi.CreateVolumeResponse, error) {
|
||||||
|
|
||||||
|
if err := cs.validateVolumeReq(req); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
volumeNameMutex.LockKey(req.GetName())
|
volumeNameMutex.LockKey(req.GetName())
|
||||||
defer volumeNameMutex.UnlockKey(req.GetName())
|
defer volumeNameMutex.UnlockKey(req.GetName())
|
||||||
|
|
||||||
@ -130,33 +137,16 @@ func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol
|
|||||||
if !found {
|
if !found {
|
||||||
// if VolumeContentSource is not nil, this request is for snapshot
|
// if VolumeContentSource is not nil, this request is for snapshot
|
||||||
if req.VolumeContentSource != nil {
|
if req.VolumeContentSource != nil {
|
||||||
snapshot := req.VolumeContentSource.GetSnapshot()
|
if err = cs.checkSnapshot(req, rbdVol); err != nil {
|
||||||
if snapshot == nil {
|
|
||||||
return nil, status.Error(codes.InvalidArgument, "Volume Snapshot cannot be empty")
|
|
||||||
}
|
|
||||||
|
|
||||||
snapshotID := snapshot.GetSnapshotId()
|
|
||||||
if len(snapshotID) == 0 {
|
|
||||||
return nil, status.Error(codes.InvalidArgument, "Volume Snapshot ID cannot be empty")
|
|
||||||
}
|
|
||||||
|
|
||||||
rbdSnap := &rbdSnapshot{}
|
|
||||||
if err := cs.MetadataStore.Get(snapshotID, rbdSnap); err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = restoreSnapshot(rbdVol, rbdSnap, rbdVol.AdminId, req.GetSecrets())
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
glog.V(4).Infof("create volume %s from snapshot %s", volName, rbdSnap.SnapName)
|
|
||||||
} else {
|
} else {
|
||||||
if err := createRBDImage(rbdVol, volSizeGB, rbdVol.AdminId, req.GetSecrets()); err != nil {
|
err := createRBDImage(rbdVol, volSizeGB, rbdVol.AdminId, req.GetSecrets())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Warningf("failed to create volume: %v", err)
|
glog.Warningf("failed to create volume: %v", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
glog.V(4).Infof("create volume %s", volName)
|
glog.V(4).Infof("create volume %s", volName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -179,6 +169,29 @@ func (cs *controllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cs *controllerServer) checkSnapshot(req *csi.CreateVolumeRequest, rbdVol *rbdVolume) error {
|
||||||
|
snapshot := req.VolumeContentSource.GetSnapshot()
|
||||||
|
if snapshot == nil {
|
||||||
|
return status.Error(codes.InvalidArgument, "Volume Snapshot cannot be empty")
|
||||||
|
}
|
||||||
|
|
||||||
|
snapshotID := snapshot.GetSnapshotId()
|
||||||
|
if len(snapshotID) == 0 {
|
||||||
|
return status.Error(codes.InvalidArgument, "Volume Snapshot ID cannot be empty")
|
||||||
|
}
|
||||||
|
|
||||||
|
rbdSnap := &rbdSnapshot{}
|
||||||
|
if err := cs.MetadataStore.Get(snapshotID, rbdSnap); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err := restoreSnapshot(rbdVol, rbdSnap, rbdVol.AdminId, req.GetSecrets())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
glog.V(4).Infof("create volume %s from snapshot %s", req.GetName(), rbdSnap.SnapName)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
func (cs *controllerServer) DeleteVolume(ctx context.Context, req *csi.DeleteVolumeRequest) (*csi.DeleteVolumeResponse, error) {
|
func (cs *controllerServer) DeleteVolume(ctx context.Context, req *csi.DeleteVolumeRequest) (*csi.DeleteVolumeResponse, error) {
|
||||||
if err := cs.Driver.ValidateControllerServiceRequest(csi.ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME); err != nil {
|
if err := cs.Driver.ValidateControllerServiceRequest(csi.ControllerServiceCapability_RPC_CREATE_DELETE_VOLUME); err != nil {
|
||||||
glog.Warningf("invalid delete volume req: %v", req)
|
glog.Warningf("invalid delete volume req: %v", req)
|
||||||
|
Loading…
Reference in New Issue
Block a user