code: func (f *Fetcher) Request(hopCount uint8) {
  	// First we need to have this select to make sure that we return if context is done
  	select {
  	case <-f.ctx.Done():
  		return
  	default:
  	}
  
  	if hopCount >= maxHopCount {
  		log.Debug("fetcher request hop count limit reached", "hops", hopCount)
  		return
  	}
  
  	// This select alone would not guarantee that we return of context is done, it could potentially
  	// push to offerC instead if offerC is available (see number 2 in https://golang.org/ref/spec#Select_statements)
  	select {
  	case f.requestC <- hopCount + 1:
  	case <-f.ctx.Done():
  	}
  }
docs: // Request is called when an upstream peer request the chunk as part of `RetrieveRequestMsg`, or from a local request through FileStore, and the node does not have the chunk locally.