code: func (e *edge) probeCache(d *dep, depKeys []CacheKeyWithSelector) bool {
  	if len(depKeys) == 0 {
  		return false
  	}
  	if e.op.IgnoreCache() {
  		return false
  	}
  	keys, err := e.op.Cache().Query(depKeys, d.index, e.cacheMap.Digest, e.edge.Index)
  	if err != nil {
  		e.err = errors.Wrap(err, "error on cache query")
  	}
  	found := false
  	for _, k := range keys {
  		if _, ok := d.keyMap[k.ID]; !ok {
  			d.keyMap[k.ID] = k
  			found = true
  		}
  	}
  	return found
  }
docs: // probeCache is called with unprocessed cache keys for dependency
  // if the key could match the edge, the cacheRecords for dependency are filled