func()

in v1storage/series.go [292:326]


func (s *memorySeries) dropChunks(t model.Time) error {
	keepIdx := len(s.chunkDescs)
	for i, cd := range s.chunkDescs {
		lt, err := cd.LastTime()
		if err != nil {
			return err
		}
		if !lt.Before(t) {
			keepIdx = i
			break
		}
	}
	if keepIdx == len(s.chunkDescs) && !s.headChunkClosed {
		// Never drop an open head chunk.
		keepIdx--
	}
	if keepIdx <= 0 {
		// Nothing to drop.
		return nil
	}
	s.chunkDescs = append(
		make([]*chunk.Desc, 0, len(s.chunkDescs)-keepIdx),
		s.chunkDescs[keepIdx:]...,
	)
	s.persistWatermark -= keepIdx
	if s.persistWatermark < 0 {
		panic("dropped unpersisted chunks from memory")
	}
	if s.chunkDescsOffset != -1 {
		s.chunkDescsOffset += keepIdx
	}
	chunk.NumMemDescs.Sub(float64(keepIdx))
	s.dirty = true
	return nil
}