etcdserver/api/rafthttp/peer.go
func (p *peer) pick(m raftpb.Message) (writec chan<- raftpb.Message, picked string) {
	var ok bool
	// Considering MsgSnap may have a big size, e.g., 1G, and will block
	// stream for a long time, only use one of the N pipelines to send MsgSnap.
	if isMsgSnap(m) {
		return p.pipeline.msgc, pipelineMsg
	} else if writec, ok = p.msgAppV2Writer.writec(); ok && isMsgApp(m) {
		return writec, streamAppV2
	} else if writec, ok = p.writer.writec(); ok {
		return writec, streamMsg
	}
	return p.pipeline.msgc, pipelineMsg
}
func (p *peer) pick(m raftpb.Message) (writec chan<- raftpb.Message, picked string) {
	var ok bool
	// Considering MsgSnap may have a big size, e.g., 1G, and will block
	// stream for a long time, only use one of the N pipelines to send MsgSnap.
	if isMsgSnap(m) {
		return p.pipeline.msgc, pipelineMsg
	} else if writec, ok = p.msgAppV2Writer.writec(); ok && isMsgApp(m) {
		return writec, streamAppV2
	} else if writec, ok = p.writer.writec(); ok {
		return writec, streamMsg
	}
	return p.pipeline.msgc, pipelineMsg
}
func ( p * peer ) pick ( m raftpb . Message ) ( writec chan <- raftpb . Message , picked string ) { var ok bool // Considering MsgSnap may have a big size, e.g., 1G, and will block // stream for a long time, only use one of the N pipelines to send MsgSnap. if isMsgSnap ( m ) { return p . pipeline . msgc , pipelineMsg } else if writec , ok = p . msgAppV2Writer . writec ( ) ; ok && isMsgApp ( m ) { return writec , streamAppV2 } else if writec , ok = p . writer . writec ( ) ; ok { return writec , streamMsg } return p . pipeline . msgc , pipelineMsg }
// pick picks a chan for sending the given message. The picked chan and the picked chan
// string name are returned.
pick picks a chan for sending the given message . The picked chan and the picked chan string name are returned .