// ComputeStatsForRange computes the stats for a given range by // iterating over all key ranges for the given range that should // be accounted for in its stats. func ComputeStatsForRange(d *roachpb.RangeDescriptor, e engine.Engine, nowNanos int64) (engine.MVCCStats, error) { iter := e.NewIterator(nil) defer iter.Close() ms := engine.MVCCStats{} for _, r := range makeReplicatedKeyRanges(d) { msDelta, err := iter.ComputeStats(r.start, r.end, nowNanos) if err != nil { return engine.MVCCStats{}, err } ms.Add(msDelta) } return ms, nil }
// ComputeMVCCStats immediately computes correct total MVCC usage statistics // for the store, returning the computed values (but without modifying the // store). func (s *Store) ComputeMVCCStats() (engine.MVCCStats, error) { var totalStats engine.MVCCStats var err error visitor := newStoreRangeSet(s) now := s.Clock().PhysicalNow() visitor.Visit(func(r *Replica) bool { var stats engine.MVCCStats stats, err = ComputeStatsForRange(r.Desc(), s.Engine(), now) if err != nil { return false } totalStats.Add(stats) return true }) return totalStats, err }