code: func (pb *Block) Delete(mint, maxt int64, ms ...labels.Matcher) error {
  	pb.mtx.Lock()
  	defer pb.mtx.Unlock()
  
  	if pb.closing {
  		return ErrClosing
  	}
  
  	p, err := PostingsForMatchers(pb.indexr, ms...)
  	if err != nil {
  		return errors.Wrap(err, "select series")
  	}
  
  	ir := pb.indexr
  
  	// Choose only valid postings which have chunks in the time-range.
  	stones := newMemTombstones()
  
  	var lset labels.Labels
  	var chks []chunks.Meta
  
  Outer:
  	for p.Next() {
  		err := ir.Series(p.At(), &lset, &chks)
  		if err != nil {
  			return err
  		}
  
  		for _, chk := range chks {
  			if chk.OverlapsClosedInterval(mint, maxt) {
  				// Delete only until the current values and not beyond.
  				tmin, tmax := clampInterval(mint, maxt, chks[0].MinTime, chks[len(chks)-1].MaxTime)
  				stones.addInterval(p.At(), Interval{tmin, tmax})
  				continue Outer
  			}
  		}
  	}
  
  	if p.Err() != nil {
  		return p.Err()
  	}
  
  	err = pb.tombstones.Iter(func(id uint64, ivs Intervals) error {
  		for _, iv := range ivs {
  			stones.addInterval(id, iv)
  		}
  		return nil
  	})
  	if err != nil {
  		return err
  	}
  	pb.tombstones = stones
  	pb.meta.Stats.NumTombstones = pb.tombstones.Total()
  
  	if err := writeTombstoneFile(pb.logger, pb.dir, pb.tombstones); err != nil {
  		return err
  	}
  	return writeMetaFile(pb.logger, pb.dir, &pb.meta)
  }
docs: // Delete matching series between mint and maxt in the block.