MCPcopy
hub / github.com/kopia/kopia / MaybeGenerateRangeCheckpoint

Method MaybeGenerateRangeCheckpoint

internal/epoch/epoch_manager.go:588–614  ·  view source on GitHub ↗

MaybeGenerateRangeCheckpoint may create a new range index for all the individual epochs covered by the new range. If there are not enough epochs to create a new range, then a range index is not created.

(ctx context.Context)

Source from the content-addressed store, hash-verified

586// individual epochs covered by the new range. If there are not enough epochs
587// to create a new range, then a range index is not created.
588func (e *Manager) MaybeGenerateRangeCheckpoint(ctx context.Context) (*maintenancestats.GenerateRangeCheckpointStats, error) {
589 p, err := e.getParameters(ctx)
590 if err != nil {
591 return nil, err
592 }
593
594 cs, err := e.committedState(ctx, 0)
595 if err != nil {
596 return nil, err
597 }
598
599 firstNonRangeCompacted, latestSettled, compact := getRangeToCompact(cs, *p)
600 if !compact {
601 contentlog.Log(ctx, e.log, "not generating range checkpoint")
602
603 return nil, nil
604 }
605
606 if err := e.generateRangeCheckpointFromCommittedState(ctx, cs, firstNonRangeCompacted, latestSettled); err != nil {
607 return nil, errors.Wrap(err, "unable to generate full checkpoint, performance will be affected")
608 }
609
610 return &maintenancestats.GenerateRangeCheckpointStats{
611 RangeMinEpoch: maintenancestats.ToUint64(firstNonRangeCompacted),
612 RangeMaxEpoch: maintenancestats.ToUint64(latestSettled),
613 }, nil
614}
615
616func getRangeToCompact(cs CurrentSnapshot, p Parameters) (low, high int, compactRange bool) {
617 latestSettled := cs.lastSettledEpochNumber()

Calls 6

getParametersMethod · 0.95
committedStateMethod · 0.95
LogFunction · 0.92
ToUint64Function · 0.92
getRangeToCompactFunction · 0.85