Skip to content

Commit a804f6a

Browse files
committed
feat: buffer getprovs slightly
And return when the process is closign. This will help speed up the main loop a bit.
1 parent 6cf77d1 commit a804f6a

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

providers/providers_manager.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,10 @@ type getProv struct {
106106
// NewProviderManager constructor
107107
func NewProviderManager(ctx context.Context, local peer.ID, dstore ds.Batching, opts ...Option) (*ProviderManager, error) {
108108
pm := new(ProviderManager)
109-
pm.getprovs = make(chan *getProv)
109+
pm.nonBlocking = true
110+
// buffer size of one to reduce context switching.
111+
pm.getprovs = make(chan *getProv, 1)
112+
// buffer so we can handle bursts.
110113
pm.newprovs = make(chan *addProv, defaultProvideBufferSize)
111114
pm.dstore = autobatch.NewAutoBatching(dstore, batchBufferSize)
112115
cache, err := lru.NewLRU(lruCacheSize, nil)
@@ -320,8 +323,12 @@ func (pm *ProviderManager) GetProviders(ctx context.Context, k []byte) []peer.ID
320323
case <-ctx.Done():
321324
return nil
322325
case pm.getprovs <- gp:
326+
case <-pm.proc.Closing():
327+
return nil
323328
}
324329
select {
330+
case <-pm.proc.Closing():
331+
return nil
325332
case <-ctx.Done():
326333
return nil
327334
case peers := <-gp.resp:

0 commit comments

Comments
 (0)