From 6b73bf944a913ace43c09dba277318b29a09b1f6 Mon Sep 17 00:00:00 2001 From: Sydonian <794346190@qq.com> Date: Mon, 15 Apr 2024 09:17:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B0=83=E8=AF=95RClone?= =?UTF-8?q?=E5=8F=91=E7=8E=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/internal/http/object.go | 5 ++++- common/pkgs/downloader/io.go | 2 +- common/pkgs/downloader/iterator.go | 18 +++++++++++------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/client/internal/http/object.go b/client/internal/http/object.go index b1d4bf4..0ee83ac 100644 --- a/client/internal/http/object.go +++ b/client/internal/http/object.go @@ -126,7 +126,10 @@ func (s *ObjectService) Download(ctx *gin.Context) { return } - io.Copy(fw, file.File) + _, err = io.Copy(fw, file.File) + if err != nil { + log.Warnf("copying file: %s", err.Error()) + } } func (s *ObjectService) UpdateInfo(ctx *gin.Context) { diff --git a/common/pkgs/downloader/io.go b/common/pkgs/downloader/io.go index c32cb5a..e150f5e 100644 --- a/common/pkgs/downloader/io.go +++ b/common/pkgs/downloader/io.go @@ -53,7 +53,7 @@ func (r *IPFSReader) Seek(offset int64, whence int) (int64, error) { return r.offset, nil } - // 如果文件流已经打开,那么如果seek的位置和当前位置不同,那么需要重新打开文件流 + // 如果文件流已经打开,而seek的位置和当前位置不同,则需要重新打开文件流 if offset != r.offset { var err error r.stream.Close() diff --git a/common/pkgs/downloader/iterator.go b/common/pkgs/downloader/iterator.go index 922eeef..56d2210 100644 --- a/common/pkgs/downloader/iterator.go +++ b/common/pkgs/downloader/iterator.go @@ -83,6 +83,10 @@ func (i *DownloadObjectIterator) init() error { allNodeIDs := make(map[cdssdk.NodeID]bool) for _, obj := range i.reqs { + if obj.Detail == nil { + continue + } + for _, p := range obj.Detail.PinnedAt { allNodeIDs[p] = true } @@ -222,7 +226,7 @@ func (iter *DownloadObjectIterator) downloadECObject(req downloadReqeust2, ecRed readPos := req.Raw.Offset totalReadLen := req.Detail.Object.Size - req.Raw.Offset if req.Raw.Length >= 0 { - totalReadLen = req.Raw.Length + totalReadLen = math2.Min(req.Raw.Length, totalReadLen) } for totalReadLen > 0 { @@ -242,7 +246,7 @@ func (iter *DownloadObjectIterator) downloadECObject(req downloadReqeust2, ecRed err := io2.WriteAll(pw, cache.Data[readRelativePos:readRelativePos+curReadLen]) if err != nil { pw.CloseWithError(err) - break + return } totalReadLen -= curReadLen readPos += curReadLen @@ -252,12 +256,11 @@ func (iter *DownloadObjectIterator) downloadECObject(req downloadReqeust2, ecRed // 如果Object的Hash和Cache的Hash不一致,说明Cache是无效的,需要重新下载 iter.downloader.strips.Remove(cacheKey) } - for _, str := range fileStrs { - _, err := str.Seek(curStripPosInBytes, io.SeekStart) + _, err := str.Seek(curStripPos*int64(ecRed.ChunkSize), io.SeekStart) if err != nil { pw.CloseWithError(err) - break + return } } @@ -277,13 +280,13 @@ func (iter *DownloadObjectIterator) downloadECObject(req downloadReqeust2, ecRed }) if err != nil { pw.CloseWithError(err) - break + return } err = rs.ReconstructData(blockArrs) if err != nil { pw.CloseWithError(err) - break + return } iter.downloader.strips.Add(cacheKey, ObjectECStrip{ @@ -292,6 +295,7 @@ func (iter *DownloadObjectIterator) downloadECObject(req downloadReqeust2, ecRed }) // 下次循环就能从Cache中读取数据 } + pw.Close() }() return pr, nil