code: func (agg *Aggregator) GC(now, chunkMinTs, metricMinTs, lastWriteTime uint32) (uint32, bool) {
  	var points uint32
  	stale := true
  
  	if lastWriteTime+agg.span > chunkMinTs {
  		// Last datapoint was less than one aggregation window before chunkMinTs, hold out for more data
  		return 0, false
  	}
  
  	// Haven't seen datapoints in an entire aggregation window before chunkMinTs, time to flush
  	if agg.agg.Cnt != 0 {
  		agg.flush()
  	}
  
  	if agg.minMetric != nil {
  		p, s := agg.minMetric.GC(now, chunkMinTs, metricMinTs)
  		stale = stale && s
  		points += p
  
  	}
  	if agg.maxMetric != nil {
  		p, s := agg.maxMetric.GC(now, chunkMinTs, metricMinTs)
  		stale = stale && s
  		points += p
  	}
  	if agg.sumMetric != nil {
  		p, s := agg.sumMetric.GC(now, chunkMinTs, metricMinTs)
  		stale = stale && s
  		points += p
  	}
  	if agg.cntMetric != nil {
  		p, s := agg.cntMetric.GC(now, chunkMinTs, metricMinTs)
  		stale = stale && s
  		points += p
  	}
  	if agg.lstMetric != nil {
  		p, s := agg.lstMetric.GC(now, chunkMinTs, metricMinTs)
  		stale = stale && s
  		points += p
  	}
  
  	return points, stale
  }
docs: // GC returns whether all of the associated series are stale and can be removed, and their combined pointcount if so