diff --git a/internal/cloning/base.go b/internal/cloning/base.go index d45f288f4f69d77c951c4de18bb2e90493c4c70f..fea89a9b2e91123d7edc17f5f3183d5369d5ddcc 100644 --- a/internal/cloning/base.go +++ b/internal/cloning/base.go @@ -322,23 +322,27 @@ func (c *Base) GetClone(id string) (*models.Clone, error) { return nil, errors.New("clone not found") } - if w.Session == nil { + c.refreshCloneMetadata(w) + + return w.Clone, nil +} + +func (c *Base) refreshCloneMetadata(w *CloneWrapper) { + if w == nil || w.Session == nil || w.Clone == nil { // Not started yet. - return w.Clone, nil + return } sessionState, err := c.provision.GetSessionState(w.Session) if err != nil { // Session not ready yet. - log.Err(errors.Wrap(err, "failed to get a session state")) + log.Err(fmt.Errorf("failed to get a session state: %w", err)) - return w.Clone, nil + return } w.Clone.Metadata.CloneDiffSize = sessionState.CloneDiffSize w.Clone.Metadata.LogicalSize = sessionState.LogicalReferenced - - return w.Clone, nil } // UpdateClone updates clone. @@ -493,6 +497,8 @@ func (c *Base) GetClones() []*models.Clone { cloneWrapper.Clone.Snapshot = snapshot } + c.refreshCloneMetadata(cloneWrapper) + clones = append(clones, cloneWrapper.Clone) } c.cloneMutex.RUnlock()