diff --git a/state/state.go b/state/state.go index a7d9546..c5c0fca 100644 --- a/state/state.go +++ b/state/state.go @@ -24,8 +24,10 @@ type JcpCopyState struct { OpaqueState any CopierType CopierType LastUpdate time.Time + Percent float64 } func MakeNewCopyState(progress logic.JcpProgress) JcpCopyState { - return JcpCopyState{OpaqueState: progress.OpaqueState, CopierType: BlockCopier, LastUpdate: time.Now()} + percent := float64(progress.Progress.BytesTransferred) / float64(progress.Progress.Size) + return JcpCopyState{OpaqueState: progress.OpaqueState, CopierType: BlockCopier, LastUpdate: time.Now(), Percent: percent} } diff --git a/state/statemanager.go b/state/statemanager.go index 1f5b856..9ea9a32 100644 --- a/state/statemanager.go +++ b/state/statemanager.go @@ -47,6 +47,7 @@ func loadState(fileName string) *JcpState { } func (copierState *JcpState) SaveState() { + copierState.Clean() copierState.saveState(copierState.StatePath) } @@ -78,7 +79,7 @@ func (copierState *JcpState) Clean() { for src := range copierState.CopyStates { for dest := range copierState.CopyStates[src] { - if copierState.CopyStates[src][dest].LastUpdate.After(time.Now().AddDate(0, 0, -ValidStateWindowInDays)) { + if copierState.CopyStates[src][dest].ShouldKeep() { newStates[src][dest] = copierState.CopyStates[src][dest] } } @@ -86,3 +87,15 @@ func (copierState *JcpState) Clean() { copierState.CopyStates = newStates } + +func (copyState JcpCopyState) ShouldKeep() bool { + if copyState.LastUpdate.Before(time.Now().AddDate(0, 0, -ValidStateWindowInDays)) { + return false + } + + if copyState.Percent == 1 { + return false + } + + return true +}