code: func (cm *cacheManager) get(ctx context.Context, id string, fromSnapshotter bool, opts ...RefOption) (ImmutableRef, error) {
  	rec, err := cm.getRecord(ctx, id, fromSnapshotter, opts...)
  	if err != nil {
  		return nil, err
  	}
  	rec.mu.Lock()
  	defer rec.mu.Unlock()
  
  	triggerUpdate := true
  	for _, o := range opts {
  		if o == NoUpdateLastUsed {
  			triggerUpdate = false
  		}
  	}
  
  	if rec.mutable {
  		if len(rec.refs) != 0 {
  			return nil, errors.Wrapf(ErrLocked, "%s is locked", id)
  		}
  		if rec.equalImmutable != nil {
  			return rec.equalImmutable.ref(triggerUpdate), nil
  		}
  		return rec.mref(triggerUpdate).commit(ctx)
  	}
  
  	return rec.ref(triggerUpdate), nil
  }
docs: // get requires manager lock to be taken