code: func (stream *Stream) sendOrDrop(request *orderer.StepRequest, allowDrop bool) error {
  	msgType := "transaction"
  	if allowDrop {
  		msgType = "consensus"
  	}
  
  	stream.metrics.reportQueueOccupancy(stream.Endpoint, msgType, stream.Channel, len(stream.sendBuff), cap(stream.sendBuff))
  
  	if allowDrop && len(stream.sendBuff) == cap(stream.sendBuff) {
  		stream.Cancel(errOverflow)
  		stream.metrics.reportMessagesDropped(stream.Endpoint, stream.Channel)
  		return errOverflow
  	}
  
  	select {
  	case <-stream.abortChan:
  		return errors.Errorf("stream %d aborted", stream.ID)
  	case stream.sendBuff <- request:
  		return nil
  	case <-stream.commShutdown:
  		return nil
  	}
  }
docs: // sendOrDrop sends the given request to the remote cluster member, or drops it
  // if it is a consensus request and the queue is full.