@@ -246,7 +246,7 @@ func (store *P2PStore) List(ctx context.Context, namePrefix string) ([]PayloadIn
246
246
return result , nil
247
247
}
248
248
249
- func (store * P2PStore ) doGetReplica (payload * Payload , addrList []uintptr , sizeList []uint64 ) error {
249
+ func (store * P2PStore ) doGetReplica (ctx context. Context , payload * Payload , addrList []uintptr , sizeList []uint64 ) error {
250
250
var wg sync.WaitGroup
251
251
errChan := make (chan error , 1 )
252
252
@@ -267,7 +267,7 @@ func (store *P2PStore) doGetReplica(payload *Payload, addrList []uintptr, sizeLi
267
267
wg .Add (1 )
268
268
go func () {
269
269
defer wg .Done ()
270
- err = store .performTransfer (source , shard )
270
+ err = store .performTransfer (ctx , source , shard )
271
271
if err != nil {
272
272
select {
273
273
case errChan <- err :
@@ -336,7 +336,7 @@ func (store *P2PStore) GetReplica(ctx context.Context, name string, addrList []u
336
336
}
337
337
for {
338
338
_ = store .transfer .syncSegmentCache ()
339
- err = store .doGetReplica (payload , addrList , sizeList )
339
+ err = store .doGetReplica (ctx , payload , addrList , sizeList )
340
340
if err != nil {
341
341
return err
342
342
}
@@ -354,7 +354,7 @@ func (store *P2PStore) GetReplica(ctx context.Context, name string, addrList []u
354
354
return store .updatePayloadMetadata (ctx , name , addrList , sizeList , payload , revision )
355
355
}
356
356
357
- func (store * P2PStore ) performTransfer (source uintptr , shard Shard ) error {
357
+ func (store * P2PStore ) performTransfer (ctx context. Context , source uintptr , shard Shard ) error {
358
358
retryCount := 0
359
359
for retryCount < shard .Count () {
360
360
batchID , err := store .transfer .allocateBatchID (1 )
@@ -387,9 +387,14 @@ func (store *P2PStore) performTransfer(source uintptr, shard Shard) error {
387
387
388
388
var status int
389
389
for status == STATUS_WAITING || status == STATUS_PENDING {
390
- status , _ , err = store .transfer .getTransferStatus (batchID , 0 )
391
- if err != nil {
392
- return err
390
+ select {
391
+ case <- ctx .Done ():
392
+ return ctx .Err ()
393
+ default :
394
+ status , _ , err = store .transfer .getTransferStatus (batchID , 0 )
395
+ if err != nil {
396
+ return err
397
+ }
393
398
}
394
399
}
395
400
0 commit comments