func()

in banyand/tsdb/bucket/queue.go [132:173]


func (q *lruQueue) Push(ctx context.Context, id fmt.Stringer, fn OnAddRecentFn) error {
	q.lock.Lock()
	defer q.lock.Unlock()

	if q.frequent.Contains(id) {
		if e := q.l.Debug(); e.Enabled() {
			e.Stringer("id", id).Msg("push to frequent")
		}
		q.frequent.Add(id, nil)
		return nil
	}

	if q.recent.Contains(id) {
		if e := q.l.Debug(); e.Enabled() {
			e.Stringer("id", id).Msg("promote from recent to frequent")
		}
		q.recent.Remove(id)
		q.frequent.Add(id, nil)
		return nil
	}

	if q.recentEvict.Contains(id) {
		if e := q.l.Debug(); e.Enabled() {
			e.Stringer("id", id).Msg("restore from recentEvict")
		}
		if err := q.ensureSpace(ctx, true); err != nil {
			return err
		}
		q.recentEvict.Remove(id)
		q.frequent.Add(id, nil)
		return nil
	}

	if err := q.ensureSpace(ctx, false); err != nil {
		return err
	}
	q.recent.Add(id, nil)
	if fn == nil {
		return nil
	}
	return fn()
}