code: func (a *AggMetric) collectable(now, chunkMinTs uint32) bool {
  
  	// no chunks at all means "possibly collectable"
  	// the caller (AggMetric.GC()) still has its own checks to
  	// handle the "no chunks" correctly later.
  	// also: we want AggMetric.GC() to go ahead with flushing the ROB in this case
  	if len(a.chunks) == 0 {
  		return a.lastWrite < chunkMinTs
  	}
  
  	currentChunk := a.chunks[a.currentChunkPos]
  	return a.lastWrite < chunkMinTs && currentChunk.Series.T0+a.chunkSpan+15*60 < now
  }
docs: // collectable returns whether the AggMetric is garbage collectable
  // an Aggmetric is collectable based on two conditions:
  // * the AggMetric hasn't been written to in a configurable amount of time
  //   (wether the write went to the ROB or a chunk is irrelevant)
  // * the last chunk - if any - is no longer "active".
  //   active means:
  //   any reasonable realtime stream (e.g. up to 15 min behind wall-clock)
  //   could add points to the chunk
  //
  // caller must hold lock