func (mem *cache) RecordDigestUncompressedPair(anyDigest digest.Digest, uncompressed digest.Digest) {
	mem.mutex.Lock()
	defer mem.mutex.Unlock()
	if previous, ok := mem.uncompressedDigests[anyDigest]; ok && previous != uncompressed {
		logrus.Warnf("Uncompressed digest for blob %s previously recorded as %s, now %s", anyDigest, previous, uncompressed)
	}
	mem.uncompressedDigests[anyDigest] = uncompressed

	anyDigestSet, ok := mem.digestsByUncompressed[uncompressed]
	if !ok {
		anyDigestSet = map[digest.Digest]struct{}{}
		mem.digestsByUncompressed[uncompressed] = anyDigestSet
	}
	anyDigestSet[anyDigest] = struct{}{} // Possibly writing the same struct{}{} presence marker again.
}
func (mem *cache) RecordDigestUncompressedPair(anyDigest digest.Digest, uncompressed digest.Digest) {
	mem.mutex.Lock()
	defer mem.mutex.Unlock()
	if previous, ok := mem.uncompressedDigests[anyDigest]; ok && previous != uncompressed {
		logrus.Warnf("Uncompressed digest for blob %s previously recorded as %s, now %s", anyDigest, previous, uncompressed)
	}
	mem.uncompressedDigests[anyDigest] = uncompressed

	anyDigestSet, ok := mem.digestsByUncompressed[uncompressed]
	if !ok {
		anyDigestSet = map[digest.Digest]struct{}{}
		mem.digestsByUncompressed[uncompressed] = anyDigestSet
	}
	anyDigestSet[anyDigest] = struct{}{} 
}
func ( mem * cache ) RecordDigestUncompressedPair ( anyDigest digest . Digest , uncompressed digest . Digest ) { mem . mutex . Lock ( ) defer mem . mutex . Unlock ( ) if previous , ok := mem . uncompressedDigests [ anyDigest ] ; ok && previous != uncompressed { logrus . Warnf ( " " , anyDigest , previous , uncompressed ) } mem . uncompressedDigests [ anyDigest ] = uncompressed anyDigestSet , ok := mem . digestsByUncompressed [ uncompressed ] if ! ok { anyDigestSet = map [ digest . Digest ] struct { } { } mem . digestsByUncompressed [ uncompressed ] = anyDigestSet } anyDigestSet [ anyDigest ] = struct { } { } // Possibly writing the same struct{}{} presence marker again. }
// RecordDigestUncompressedPair records that the uncompressed version of anyDigest is uncompressed.
// It’s allowed for anyDigest == uncompressed.
// WARNING: Only call this for LOCALLY VERIFIED data; don’t record a digest pair just because some remote author claims so (e.g.
// because a manifest/config pair exists); otherwise the cache could be poisoned and allow substituting unexpected blobs.
// (Eventually, the DiffIDs in image config could detect the substitution, but that may be too late, and not all image formats contain that data.)
RecordDigestUncompressedPair records that the uncompressed version of anyDigest is uncompressed . It’s allowed for anyDigest == uncompressed . WARNING : Only call this for LOCALLY VERIFIED data ; don’t record a digest pair just because some remote author claims so ( e . g . because a manifest / config pair exists ) ; otherwise the cache could be poisoned and allow substituting unexpected blobs . ( Eventually the DiffIDs in image config could detect the substitution but that may be too late and not all image formats contain that data . )