Skip to content

Commit

Permalink
Modify/read marker (#397)
Browse files Browse the repository at this point in the history
* Add self update change with `go mod tidy`

* Modify read marker
Remove logic related to previous read marker and read counter

* Change method for download
  • Loading branch information
lpoli authored Mar 27, 2022
1 parent 6c21ce3 commit 14b9895
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 35 deletions.
4 changes: 2 additions & 2 deletions zboxcore/marker/readmarker.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ type ReadMarker struct {
AllocationID string `json:"allocation_id"`
OwnerID string `json:"owner_id"`
Timestamp common.Timestamp `json:"timestamp"`
ReadCounter int64 `json:"counter"`
ReadSize int64 `json:"read_size"`
Signature string `json:"signature"`
}

func (rm *ReadMarker) GetHash() string {
sigData := fmt.Sprintf("%v:%v:%v:%v:%v:%v:%v", rm.AllocationID,
rm.BlobberID, rm.ClientID, rm.ClientPublicKey, rm.OwnerID,
rm.ReadCounter, rm.Timestamp)
rm.ReadSize, rm.Timestamp)
return encryption.Hash(sigData)
}

Expand Down
37 changes: 4 additions & 33 deletions zboxcore/sdk/blockdownloadworker.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (
"github.com/0chain/gosdk/zboxcore/blockchain"
"github.com/0chain/gosdk/zboxcore/client"
"github.com/0chain/gosdk/zboxcore/fileref"
. "github.com/0chain/gosdk/zboxcore/logger"
"github.com/0chain/gosdk/zboxcore/marker"
"github.com/0chain/gosdk/zboxcore/zboxutil"
)
Expand All @@ -42,35 +41,12 @@ type BlockDownloadRequest struct {
type downloadBlock struct {
RawData []byte `json:"data"`
BlockChunks [][]byte
Success bool `json:"success"`
LatestRM *marker.ReadMarker `json:"latest_rm"`
Success bool `json:"success"`
idx int
err error
NumBlocks int64 `json:"num_of_blocks"`
}

var blobberReadCounter *sync.Map

func getBlobberReadCtr(blobber *blockchain.StorageNode) int64 {
rctr, ok := blobberReadCounter.Load(blobber.ID)
if ok {
return rctr.(int64)
}
return int64(0)
}

func incBlobberReadCtr(blobber *blockchain.StorageNode, numBlocks int64) {
rctr, ok := blobberReadCounter.Load(blobber.ID)
if !ok {
rctr = int64(0)
}
blobberReadCounter.Store(blobber.ID, (rctr.(int64))+numBlocks)
}

func setBlobberReadCtr(blobber *blockchain.StorageNode, ctr int64) {
blobberReadCounter.Store(blobber.ID, ctr)
}

var downloadBlockChan map[string]chan *BlockDownloadRequest
var initDownloadMutex sync.Mutex

Expand All @@ -80,7 +56,6 @@ func InitBlockDownloader(blobbers []*blockchain.StorageNode) {
if downloadBlockChan == nil {
downloadBlockChan = make(map[string]chan *BlockDownloadRequest)
}
blobberReadCounter = &sync.Map{}

for _, blobber := range blobbers {
if _, ok := downloadBlockChan[blobber.ID]; !ok {
Expand Down Expand Up @@ -136,7 +111,7 @@ func (req *BlockDownloadRequest) downloadBlobberBlock() {
rm.AllocationID = req.allocationID
rm.OwnerID = client.GetClientID()
rm.Timestamp = common.Now()
rm.ReadCounter = getBlobberReadCtr(req.blobber) + req.numBlocks
rm.ReadSize = req.numBlocks * int64(req.chunkSize)
err := rm.Sign()
if err != nil {
req.result <- &downloadBlock{Success: false, idx: req.blobberIdx, err: errors.Wrap(err, "Error: Signing readmarker failed")}
Expand Down Expand Up @@ -208,16 +183,12 @@ func (req *BlockDownloadRequest) downloadBlobberBlock() {
rspData.BlockChunks = req.splitData(response, req.chunkSize)
}

incBlobberReadCtr(req.blobber, req.numBlocks)
req.result <- &rspData
return nil
}

if !rspData.Success && rspData.LatestRM != nil && rspData.LatestRM.ReadCounter >= getBlobberReadCtr(req.blobber) {
Logger.Info("Will be retrying download")
setBlobberReadCtr(req.blobber, rspData.LatestRM.ReadCounter)
shouldRetry = true
return errors.New("", "Need to retry the download")
if !rspData.Success {
return errors.New("download_data", rspData.err.Error())
}

} else {
Expand Down

0 comments on commit 14b9895

Please sign in to comment.