MCPcopy Index your code
hub / github.com/GoEdgeLab/EdgeNode / fetchKey

Method fetchKey

internal/nodes/http_cache_task_manager.go:218–262  ·  view source on GitHub ↗

TODO 增加失败重试

(key *pb.HTTPCacheTaskKey)

Source from the content-addressed store, hash-verified

216
217// TODO 增加失败重试
218func (this *HTTPCacheTaskManager) fetchKey(key *pb.HTTPCacheTaskKey) error {
219 var fullKey = key.Key
220 if !this.protocolReg.MatchString(fullKey) {
221 fullKey = "https://" + fullKey
222 }
223
224 req, err := http.NewRequest(http.MethodGet, fullKey, nil)
225 if err != nil {
226 return fmt.Errorf("invalid url: '%s': %w", fullKey, err)
227 }
228
229 // TODO 可以在管理界面自定义Header
230 req.Header.Set("X-Edge-Cache-Action", "fetch")
231 req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36") // TODO 可以定义
232 req.Header.Set("Accept-Encoding", "gzip, deflate, br")
233 resp, err := this.httpClient().Do(req)
234 if err != nil {
235 err = this.simplifyErr(err)
236 return fmt.Errorf("request failed: '%s': %w", fullKey, err)
237 }
238
239 defer func() {
240 _ = resp.Body.Close()
241 }()
242
243 // 处理502
244 if resp.StatusCode == http.StatusBadGateway {
245 return errors.New("read origin site timeout")
246 }
247
248 // 读取内容,以便于生成缓存
249 var buf = utils.BytePool16k.Get()
250 _, err = io.CopyBuffer(io.Discard, resp.Body, buf.Bytes)
251 utils.BytePool16k.Put(buf)
252 if err != nil {
253 if err != io.EOF {
254 err = this.simplifyErr(err)
255 return fmt.Errorf("request failed: '%s': %w", fullKey, err)
256 } else {
257 err = nil
258 }
259 }
260
261 return nil
262}
263
264func (this *HTTPCacheTaskManager) simplifyErr(err error) error {
265 if err == nil {

Callers 1

processKeyMethod · 0.95

Calls 9

httpClientMethod · 0.95
simplifyErrMethod · 0.95
MatchStringMethod · 0.80
ErrorfMethod · 0.80
DoMethod · 0.80
CloseMethod · 0.65
SetMethod · 0.45
GetMethod · 0.45
PutMethod · 0.45

Tested by

no test coverage detected