code: func (s *Server) reapTombstones(index uint64) {
  	defer metrics.MeasureSince([]string{"leader", "reapTombstones"}, time.Now())
  	req := structs.TombstoneRequest{
  		Datacenter: s.config.Datacenter,
  		Op:         structs.TombstoneReap,
  		ReapIndex:  index,
  	}
  	_, err := s.raftApply(structs.TombstoneRequestType, &req)
  	if err != nil {
  		s.logger.Printf("[ERR] consul: failed to reap tombstones up to %d: %v",
  			index, err)
  	}
  }
docs: // reapTombstones is invoked by the current leader to manage garbage
  // collection of tombstones. When a key is deleted, we trigger a tombstone
  // GC clock. Once the expiration is reached, this routine is invoked
  // to clear all tombstones before this index. This must be replicated
  // through Raft to ensure consistency. We do this outside the leader loop
  // to avoid blocking.