From f6665294a101df5ba91e84e8723eba08dd14d12b Mon Sep 17 00:00:00 2001 From: karthik-us Date: Wed, 22 Nov 2023 11:46:50 +0530 Subject: [PATCH] cephfs: handle cephfs clone limit error This is to pre-emptively add check for EAGAIN error returned from ceph as part of https://github.com/ceph/ceph/pull/52670 if all the clone threads are busy and return csi compatible error. Fixes: #3996 Signed-off-by: karthik-us --- internal/cephfs/controllerserver.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/internal/cephfs/controllerserver.go b/internal/cephfs/controllerserver.go index bd91954cac3..9a750f2a4bf 100644 --- a/internal/cephfs/controllerserver.go +++ b/internal/cephfs/controllerserver.go @@ -20,6 +20,7 @@ import ( "context" "errors" "fmt" + "syscall" "github.com/ceph/ceph-csi/internal/cephfs/core" cerrors "github.com/ceph/ceph-csi/internal/cephfs/errors" @@ -134,6 +135,11 @@ func (cs *ControllerServer) createBackingVolumeFromSnapshotSource( }) if err != nil { log.ErrorLog(ctx, "failed to create clone from snapshot %s: %v", sID.FsSnapshotName, err) + // TODO: Add error handle for EAGAIN in go-ceph and replace the + // syscall.EAGAIN check with the go-ceph compatible error. + if errors.Is(err, syscall.EAGAIN) { + return status.Error(codes.ResourceExhausted, err.Error()) + } return err } @@ -156,6 +162,11 @@ func (cs *ControllerServer) createBackingVolumeFromVolumeSource( if err := volClient.CreateCloneFromSubvolume(ctx, &parentVolOpt.SubVolume); err != nil { log.ErrorLog(ctx, "failed to create clone from subvolume %s: %v", fsutil.VolumeID(pvID.FsSubvolName), err) + // TODO: Add error handle for EAGAIN in go-ceph and replace the + // syscall.EAGAIN check with the go-ceph compatible error. + if errors.Is(err, syscall.EAGAIN) { + return status.Error(codes.ResourceExhausted, err.Error()) + } return err }