// 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.Reader, nowNanos int64, ) (enginepb.MVCCStats, error) { iter := e.NewIterator(false) defer iter.Close() ms := enginepb.MVCCStats{} for _, r := range makeReplicatedKeyRanges(d) { msDelta, err := iter.ComputeStats(r.start, r.end, nowNanos) if err != nil { return enginepb.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() (enginepb.MVCCStats, error) { var totalStats enginepb.MVCCStats var err error now := s.Clock().PhysicalNow() newStoreReplicaVisitor(s).Visit(func(r *Replica) bool { var stats enginepb.MVCCStats stats, err = ComputeStatsForRange(r.Desc(), s.Engine(), now) if err != nil { return false } totalStats.Add(stats) return true }) return totalStats, err }