MCPcopy
hub / github.com/perkeep/perkeep / cached

Method cached

pkg/server/image.go:130–167  ·  view source on GitHub ↗

cached returns a FileReader for the given blobref, which may point to either a blob representing the entire thumbnail (max 16MB) or a file schema blob. The ReadCloser should be closed when done reading.

(ctx context.Context, br blob.Ref)

Source from the content-addressed store, hash-verified

128//
129// The ReadCloser should be closed when done reading.
130func (ih *ImageHandler) cached(ctx context.Context, br blob.Ref) (io.ReadCloser, error) {
131 rsc, _, err := ih.Cache.Fetch(ctx, br)
132 if err != nil {
133 return nil, err
134 }
135 slurp, err := io.ReadAll(rsc)
136 rsc.Close()
137 if err != nil {
138 return nil, err
139 }
140 // In the common case, when the scaled image itself is less than 16 MB, it's
141 // all together in one blob.
142 if strings.HasPrefix(magic.MIMEType(slurp), "image/") {
143 thumbCacheHitFull.Add(1)
144 if imageDebug {
145 log.Printf("Image Cache: hit: %v\n", br)
146 }
147 return io.NopCloser(bytes.NewReader(slurp)), nil
148 }
149
150 // For large scaled images, the cached blob is a file schema blob referencing
151 // the sub-chunks.
152 fileBlob, err := schema.BlobFromReader(br, bytes.NewReader(slurp))
153 if err != nil {
154 log.Printf("Failed to parse non-image thumbnail cache blob %v: %v", br, err)
155 return nil, err
156 }
157 fr, err := fileBlob.NewFileReader(ih.Cache)
158 if err != nil {
159 log.Printf("cached(%v) NewFileReader = %v", br, err)
160 return nil, err
161 }
162 thumbCacheHitFile.Add(1)
163 if imageDebug {
164 log.Printf("Image Cache: fileref hit: %v\n", br)
165 }
166 return fr, nil
167}
168
169// Key format: "scaled:" + bref + ":" + width "x" + height
170// where bref is the blobref of the unscaled image.

Callers 1

scaledCachedMethod · 0.95

Calls 9

MIMETypeFunction · 0.92
BlobFromReaderFunction · 0.92
ReadAllMethod · 0.80
HasPrefixMethod · 0.80
PrintfMethod · 0.80
FetchMethod · 0.65
CloseMethod · 0.65
AddMethod · 0.45
NewFileReaderMethod · 0.45

Tested by

no test coverage detected