Browse Source

修复调试RClone发现的问题

gitlink
Sydonian 1 year ago
parent
commit
6b73bf944a
3 changed files with 16 additions and 9 deletions
  1. +4
    -1
      client/internal/http/object.go
  2. +1
    -1
      common/pkgs/downloader/io.go
  3. +11
    -7
      common/pkgs/downloader/iterator.go

+ 4
- 1
client/internal/http/object.go View File

@@ -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) {


+ 1
- 1
common/pkgs/downloader/io.go View File

@@ -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()


+ 11
- 7
common/pkgs/downloader/iterator.go View File

@@ -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


Loading…
Cancel
Save