func()

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
}