diff --git a/internal/cephfs/core/clone.go b/internal/cephfs/core/clone.go index 6ec18db9481..4d9231b445f 100644 --- a/internal/cephfs/core/clone.go +++ b/internal/cephfs/core/clone.go @@ -28,9 +28,10 @@ import ( // cephFSCloneState describes the status of the clone. type cephFSCloneState struct { - state admin.CloneState - errno string - errorMsg string + state admin.CloneState + progressReport admin.CloneProgressReport + errno string + errorMsg string } // CephFSCloneError indicates that fetching the clone state returned an error. @@ -54,6 +55,14 @@ func (cs cephFSCloneState) ToError() error { return nil } +func (cs cephFSCloneState) GetProgressReport() admin.CloneProgressReport { + return admin.CloneProgressReport{ + PercentageCloned: cs.progressReport.PercentageCloned, + AmountCloned: cs.progressReport.AmountCloned, + FilesCloned: cs.progressReport.FilesCloned, + } +} + // CreateCloneFromSubvolume creates a clone from a subvolume. func (s *subVolumeClient) CreateCloneFromSubvolume( ctx context.Context, @@ -210,9 +219,10 @@ func (s *subVolumeClient) GetCloneState(ctx context.Context) (cephFSCloneState, } state := cephFSCloneState{ - state: cs.State, - errno: errno, - errorMsg: errStr, + state: cs.State, + progressReport: cs.ProgressReport, + errno: errno, + errorMsg: errStr, } return state, nil diff --git a/internal/cephfs/store/fsjournal.go b/internal/cephfs/store/fsjournal.go index 3e3c676e5df..6d2f1154bff 100644 --- a/internal/cephfs/store/fsjournal.go +++ b/internal/cephfs/store/fsjournal.go @@ -128,6 +128,13 @@ func CheckVolExists(ctx context.Context, } err = cloneState.ToError() if errors.Is(err, cerrors.ErrCloneInProgress) { + progressReport := cloneState.GetProgressReport() + log.UsefulLog(ctx, + "%s. progress report: percentage cloned=%s, amount cloned=%s, files cloned=%s", + err, + progressReport.PercentageCloned, + progressReport.AmountCloned, + progressReport.FilesCloned) return nil, err } if errors.Is(err, cerrors.ErrClonePending) {