diff --git a/components/ws-manager/pkg/manager/manager.go b/components/ws-manager/pkg/manager/manager.go index 4d63fbb2a6ca66..97069c6cbdce60 100644 --- a/components/ws-manager/pkg/manager/manager.go +++ b/components/ws-manager/pkg/manager/manager.go @@ -215,9 +215,9 @@ func (m *Manager) StartWorkspace(ctx context.Context, req *api.StartWorkspaceReq span.LogKV("event", "pod description created") var ( - createPVC bool - pvc *corev1.PersistentVolumeClaim - volumeRestoreTime time.Time + createPVC bool + pvc *corev1.PersistentVolumeClaim + startTime, endTime time.Time // the start time and end time of PVC restoring from VolumeSnapshot ) for _, feature := range startContext.Request.Spec.FeatureFlags { if feature == api.WorkspaceFeatureFlag_PERSISTENT_VOLUME_CLAIM { @@ -235,7 +235,10 @@ func (m *Manager) StartWorkspace(ctx context.Context, req *api.StartWorkspaceReq if err != nil && !k8serr.IsAlreadyExists(err) { return nil, xerrors.Errorf("cannot create pvc object for workspace pod: %w", err) } - volumeRestoreTime = time.Now() + // we only calculate the time that PVC restoring from VolumeSnapshot + if startContext.VolumeSnapshot != nil && startContext.VolumeSnapshot.VolumeSnapshotName != "" { + startTime = time.Now() + } } // create the Pod in the cluster and wait until is scheduled @@ -266,7 +269,8 @@ func (m *Manager) StartWorkspace(ctx context.Context, req *api.StartWorkspaceReq return false, err } - if createPVC { + // we only calculate the time that PVC restoring from VolumeSnapshot + if createPVC && startContext.VolumeSnapshot != nil && startContext.VolumeSnapshot.VolumeSnapshotName != "" { err = wait.PollWithContext(ctx, 100*time.Millisecond, time.Minute, pvcRunning(m.Clientset, pvc.Name, pvc.Namespace)) if err != nil { return false, nil @@ -276,8 +280,9 @@ func (m *Manager) StartWorkspace(ctx context.Context, req *api.StartWorkspaceReq hist, err := m.metrics.volumeRestoreTimeHistVec.GetMetricWithLabelValues(wsType, req.Spec.Class) if err != nil { log.WithError(err).WithField("type", wsType).Warn("cannot get volume restore time histogram metric") - } else { - hist.Observe(time.Since(volumeRestoreTime).Seconds()) + } else if endTime.IsZero() { + endTime = time.Now() + hist.Observe(endTime.Sub(startTime).Seconds()) } }