func (b *bridge) createLayerEvent(action string, repo distribution.Repository, layer distribution.Layer) (*Event, error) { event := b.createEvent(action) event.Target.MediaType = layerMediaType event.Target.Repository = repo.Name() event.Target.Length = layer.Length() dgst := layer.Digest() event.Target.Digest = dgst var err error event.Target.URL, err = b.ub.BuildBlobURL(repo.Name(), dgst) if err != nil { return nil, err } return event, nil }
// extractLayerInfo pulls the layerInfo from the layer, attempting to get the // path information from either the concrete object or by resolving the // primary blob store path. func (lc *cachedLayerService) resolveLayerPath(layer distribution.Layer) (path string, err error) { // try and resolve the type and driver, so we don't have to traverse links switch v := layer.(type) { case *layerReader: // only set path if we have same driver instance. if v.driver == lc.driver { return v.path, nil } } ctxu.GetLogger(lc.ctx).Warnf("resolving layer path during cache lookup (%v@%v)", lc.repository.Name(), layer.Digest()) // we have to do an expensive stat to resolve the layer location but no // need to check the link, since we already have layer instance for this // repository. bp, err := lc.blobStore.path(layer.Digest()) if err != nil { return "", err } return bp, nil }