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)
| 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. |
| 588 | func (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 | |
| 616 | func getRangeToCompact(cs CurrentSnapshot, p Parameters) (low, high int, compactRange bool) { |
| 617 | latestSettled := cs.lastSettledEpochNumber() |