提交 59a32b1d 作者: Brian Tiger Chow 提交者: Jeromy

refactor(bitswap) group the deferreds

License: MIT
Signed-off-by: 's avatarBrian Tiger Chow <brian@perfmode.com>
上级 0ce6071f
...@@ -92,11 +92,14 @@ func (bs *bitswap) GetBlock(parent context.Context, k u.Key) (*blocks.Block, err ...@@ -92,11 +92,14 @@ func (bs *bitswap) GetBlock(parent context.Context, k u.Key) (*blocks.Block, err
// functions. This is difficult to enforce. May this comment keep you safe. // functions. This is difficult to enforce. May this comment keep you safe.
ctx, cancelFunc := context.WithCancel(parent) ctx, cancelFunc := context.WithCancel(parent)
defer cancelFunc()
ctx = eventlog.ContextWithMetadata(ctx, eventlog.Uuid("GetBlockRequest")) ctx = eventlog.ContextWithMetadata(ctx, eventlog.Uuid("GetBlockRequest"))
log.Event(ctx, "GetBlockRequestBegin", &k) log.Event(ctx, "GetBlockRequestBegin", &k)
defer log.Event(ctx, "GetBlockRequestEnd", &k)
defer func() {
cancelFunc()
log.Event(ctx, "GetBlockRequestEnd", &k)
}()
promise, err := bs.GetBlocks(parent, []u.Key{k}) promise, err := bs.GetBlocks(parent, []u.Key{k})
if err != nil { if err != nil {
...@@ -109,6 +112,7 @@ func (bs *bitswap) GetBlock(parent context.Context, k u.Key) (*blocks.Block, err ...@@ -109,6 +112,7 @@ func (bs *bitswap) GetBlock(parent context.Context, k u.Key) (*blocks.Block, err
case <-parent.Done(): case <-parent.Done():
return nil, parent.Err() return nil, parent.Err()
} }
} }
// GetBlocks returns a channel where the caller may receive blocks that // GetBlocks returns a channel where the caller may receive blocks that
...@@ -172,13 +176,15 @@ func (bs *bitswap) sendWantListTo(ctx context.Context, peers <-chan peer.Peer) e ...@@ -172,13 +176,15 @@ func (bs *bitswap) sendWantListTo(ctx context.Context, peers <-chan peer.Peer) e
func (bs *bitswap) loop(parent context.Context) { func (bs *bitswap) loop(parent context.Context) {
ctx, cancel := context.WithCancel(parent) ctx, cancel := context.WithCancel(parent)
defer cancel() // signal termination
// Every so often, we should resend out our current want list // Every so often, we should resend out our current want list
rebroadcastTime := time.Second * 5 rebroadcastTime := time.Second * 5
broadcastSignal := time.NewTicker(bs.strategy.GetRebroadcastDelay()) broadcastSignal := time.NewTicker(bs.strategy.GetRebroadcastDelay())
defer broadcastSignal.Stop() defer func() {
cancel() // signal to derived async functions
broadcastSignal.Stop()
}()
for { for {
select { select {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论