限制并发下载连接数为3,解决超多层的镜像下载并发连接数过多的问题

This commit is contained in:
xiongyuelong 2024-07-09 10:25:36 +08:00
parent 14fe13d237
commit 4de6a92c9a
1 changed files with 4 additions and 0 deletions

View File

@ -309,6 +309,8 @@ func (m *Client) download(_registry, d, tag string, digest digest.Digest, authHe
var fakeLayerId string
var downloadStatus = make(map[int]bool)
var notifyChan = make(chan int, 3)
//限制并发下载数为3
var ch = make(chan struct{}, 3)
for n, layer := range layers {
namer := sha256.New()
namer.Write([]byte(parentid + "\n" + layer.Digest + "\n"))
@ -330,12 +332,14 @@ func (m *Client) download(_registry, d, tag string, digest digest.Digest, authHe
copyedHeader[k] = v
}
go func(fakeLayerId string, layer Layer, n int, notifyChan chan int, layerInfo *LayerInfo, tmpDir string, _registry string, d string, authHeader http.Header) {
ch <- struct{}{}
er := m.downloadLayer(fakeLayerId, &layer, layerInfo, tmpDir, _registry, d, authHeader)
if er != nil {
logrus.Errorf("下载第%d/%d层失败:%s", n+1, len(layers), err)
err = er
}
notifyChan <- n
<-ch
}(fakeLayerId, layer, n, notifyChan, &layerInfo, tmpDir, _registry, d, copyedHeader)
parentid = fakeLayerId
}