in pkg/csi_driver/controller.go [233:271]
func (s *controllerServer) DeleteVolume(ctx context.Context, req *csi.DeleteVolumeRequest) (*csi.DeleteVolumeResponse, error) {
// Validate arguments
volumeID := req.GetVolumeId()
if len(volumeID) == 0 {
return nil, status.Error(codes.InvalidArgument, "DeleteVolume volumeID must be provided")
}
instance, err := volumeIDToInstance(volumeID)
if err != nil {
// An invalid ID should be treated as doesn't exist
klog.V(5).Infof("Failed to get instance for volume %v deletion: %v", volumeID, err)
return &csi.DeleteVolumeResponse{}, nil
}
if acquired := s.volumeLocks.TryAcquire(volumeID); !acquired {
return nil, status.Errorf(codes.Aborted, util.VolumeOperationAlreadyExistsFmt, volumeID)
}
defer s.volumeLocks.Release(volumeID)
instance, err = s.cloudProvider.LustreService.GetInstance(ctx, instance)
if err != nil && lustre.IsNotFoundErr(err) {
return &csi.DeleteVolumeResponse{}, nil
}
if err != nil {
return nil, lustre.StatusError(err)
}
if instance.State == "DELETING" {
return nil, status.Errorf(codes.DeadlineExceeded, "Volume %s is under deletion", volumeID)
}
if err := s.cloudProvider.LustreService.DeleteInstance(ctx, instance); err != nil {
return nil, lustre.StatusError(err)
}
klog.Infof("DeleteVolume succeeded for volume %s", volumeID)
return &csi.DeleteVolumeResponse{}, nil
}