@@ -38,7 +38,6 @@ import (
38
38
type PrefetchHandler struct {
39
39
clusterClient blobclient.ClusterClient
40
40
tagClient tagclient.Client
41
- threshold int64
42
41
43
42
metrics tally.Scope
44
43
}
@@ -108,8 +107,8 @@ func writeInternalError(w http.ResponseWriter, msg string, traceId string) {
108
107
}
109
108
110
109
// NewPrefetchHandler creates a new preheat handler.
111
- func NewPrefetchHandler (client blobclient.ClusterClient , tagClient tagclient.Client , threshold int64 , metrics tally.Scope ) * PrefetchHandler {
112
- return & PrefetchHandler {client , tagClient , threshold , metrics }
110
+ func NewPrefetchHandler (client blobclient.ClusterClient , tagClient tagclient.Client , metrics tally.Scope ) * PrefetchHandler {
111
+ return & PrefetchHandler {client , tagClient , metrics }
113
112
}
114
113
115
114
// Handle processes the prefetch request.
@@ -149,21 +148,13 @@ func (ph *PrefetchHandler) Handle(w http.ResponseWriter, r *http.Request) {
149
148
}
150
149
151
150
// Process manifest (ManifestList or single Manifest)
152
- size , digests , err := ph .processManifest (logger , namespace , buf .Bytes ())
151
+ digests , err := ph .processManifest (logger , namespace , buf .Bytes ())
153
152
if err != nil {
154
153
writeInternalError (w , fmt .Sprintf ("failed to process manifest: %s" , err ), reqBody .TraceId )
155
154
return
156
155
}
157
- size += stat .Size
158
156
159
157
metrics := ph .metrics .SubScope ("prefetch" )
160
- if size < ph .threshold {
161
- metrics .Counter ("below_threshold" ).Inc (1 )
162
- logger .With ("size" , size , "tag" , reqBody .Tag , "threshold" , ph .threshold ).Info ("Size is too large, skipping prefetch" )
163
- writePrefetchResponse (w , http .StatusUnprocessableEntity , reqBody .Tag , fmt .Sprintf ("prefetching not initiated as imagesize < %d" , ph .threshold ), reqBody .TraceId )
164
- return
165
- }
166
-
167
158
metrics .Counter ("initiated" ).Inc (1 )
168
159
writePrefetchResponse (w , http .StatusOK , reqBody .Tag , "prefetching initiated successfully" , reqBody .TraceId )
169
160
@@ -209,7 +200,7 @@ func parseTag(tag string) (namespace, name string, err error) {
209
200
}
210
201
211
202
// processManifest handles both ManifestLists and single Manifests.
212
- func (ph * PrefetchHandler ) processManifest (logger * zap.SugaredLogger , namespace string , manifestBytes []byte ) (int64 , []core.Digest , error ) {
203
+ func (ph * PrefetchHandler ) processManifest (logger * zap.SugaredLogger , namespace string , manifestBytes []byte ) ([]core.Digest , error ) {
213
204
reader := bytes .NewReader (manifestBytes )
214
205
215
206
var manifestList manifestlist.ManifestList
@@ -222,66 +213,51 @@ func (ph *PrefetchHandler) processManifest(logger *zap.SugaredLogger, namespace
222
213
var manifest schema2.Manifest
223
214
if err := json .NewDecoder (reader ).Decode (& manifest ); err != nil {
224
215
logger .With ("namespace" , namespace ).Errorf ("Failed to parse single manifest: %v" , err )
225
- return 0 , nil , fmt .Errorf ("invalid single manifest: %w" , err )
216
+ return nil , fmt .Errorf ("invalid single manifest: %w" , err )
226
217
}
227
218
228
- return ph .processLayers (namespace , manifest .Layers )
219
+ return ph .processLayers (manifest .Layers )
229
220
}
230
221
231
- func (ph * PrefetchHandler ) processManifestList (logger * zap.SugaredLogger , namespace string , manifestList manifestlist.ManifestList ) (int64 , []core.Digest , error ) {
222
+ func (ph * PrefetchHandler ) processManifestList (logger * zap.SugaredLogger , namespace string , manifestList manifestlist.ManifestList ) ([]core.Digest , error ) {
232
223
digestsResult := make ([]core.Digest , 0 )
233
- sizeResult := int64 (0 )
234
224
buf := & bytes.Buffer {}
235
225
for _ , manifestDescriptor := range manifestList .Manifests {
236
226
manifestDigestHex := manifestDescriptor .Digest .Hex ()
237
227
digest , err := core .NewSHA256DigestFromHex (manifestDigestHex )
238
228
if err != nil {
239
- return 0 , nil , fmt .Errorf ("digest %s, failed to parse manifest digest: %s" , manifestDigestHex , err )
229
+ return nil , fmt .Errorf ("digest %s, failed to parse manifest digest: %s" , manifestDigestHex , err )
240
230
}
241
231
242
- stat , err := ph .clusterClient .Stat (namespace , digest )
243
- if err != nil {
244
- return 0 , nil , fmt .Errorf ("failed to get meta info: %w" , err )
245
- }
246
-
247
- sizeResult += stat .Size
248
232
if err := ph .clusterClient .DownloadBlob (namespace , digest , buf ); err != nil {
249
233
logger .Errorf ("Failed to download manifest blob: %s" , err )
250
234
continue
251
235
}
252
236
253
237
var manifest schema2.Manifest
254
238
if err := json .NewDecoder (buf ).Decode (& manifest ); err != nil {
255
- return 0 , nil , fmt .Errorf ("failed to parse manifest: %s" , err )
239
+ return nil , fmt .Errorf ("failed to parse manifest: %s" , err )
256
240
}
257
241
258
- size , digests , err := ph .processLayers (namespace , manifest .Layers )
242
+ digests , err := ph .processLayers (manifest .Layers )
259
243
if err != nil {
260
- return 0 , nil , err
244
+ return nil , err
261
245
}
262
246
digestsResult = append (digestsResult , digests ... )
263
- sizeResult += size
264
247
buf .Reset ()
265
248
}
266
- return sizeResult , digestsResult , nil
249
+ return digestsResult , nil
267
250
}
268
251
269
- func (ph * PrefetchHandler ) processLayers (namespace string , layers []distribution.Descriptor ) (int64 , []core.Digest , error ) {
252
+ func (ph * PrefetchHandler ) processLayers (layers []distribution.Descriptor ) ([]core.Digest , error ) {
270
253
digests := make ([]core.Digest , 0 , len (layers ))
271
- var totalSize int64
272
254
273
255
for _ , layer := range layers {
274
256
digest , err := core .NewSHA256DigestFromHex (layer .Digest .Hex ())
275
257
if err != nil {
276
- return 0 , nil , fmt .Errorf ("invalid layer digest: %w" , err )
277
- }
278
-
279
- stat , err := ph .clusterClient .Stat (namespace , digest )
280
- if err != nil {
281
- return 0 , nil , fmt .Errorf ("failed to get metadata for layer %s: %w" , digest , err )
258
+ return nil , fmt .Errorf ("invalid layer digest: %w" , err )
282
259
}
283
- totalSize += stat .Size
284
260
digests = append (digests , digest )
285
261
}
286
- return totalSize , digests , nil
262
+ return digests , nil
287
263
}
0 commit comments