Browse Source

修复EC读取时乱码的问题

gitlink
Sydonian 1 year ago
parent
commit
7d24554483
1 changed files with 7 additions and 1 deletions
  1. +7
    -1
      common/pkgs/downloader/iterator.go

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

@@ -266,9 +266,15 @@ func (iter *DownloadObjectIterator) downloadECObject(req downloadReqeust2, ecRed

dataBuf := make([]byte, int64(ecRed.K*ecRed.ChunkSize))
blockArrs := make([][]byte, ecRed.N)
for i := 0; i < ecRed.K; i++ {
// 放入的slice长度为0,但容量为ChunkSize,EC库发现长度为0的块后才会认为是待恢复块
blockArrs[i] = dataBuf[i*ecRed.ChunkSize : i*ecRed.ChunkSize]
}
for _, b := range blocks {
// 用于恢复的块则要将其长度变回ChunkSize,用于后续读取块数据
if b.Block.Index < ecRed.K {
blockArrs[b.Block.Index] = dataBuf[b.Block.Index*ecRed.ChunkSize : (b.Block.Index+1)*ecRed.ChunkSize]
// 此处扩容不会导致slice指向一个新内存
blockArrs[b.Block.Index] = blockArrs[b.Block.Index][0:ecRed.ChunkSize]
} else {
blockArrs[b.Block.Index] = make([]byte, ecRed.ChunkSize)
}


Loading…
Cancel
Save