Example #1
0
func forwardMsgToPool(msg protocol.Message, clusterConnPool connection.Pool, isMaster bool, isAsking bool) (msgAck protocol.Message) {
	var (
		clusterConn connection.Conn
		err         error
	)
	if clusterConn, err = clusterConnPool.Get(); err != nil {
		logger.Warningf("从连接池中获取句柄出错: %v", err)
		return protocol.ERR_ClusterSlotsConn
	}
	if isMaster {
		if err = clusterConn.Readwrite(); err != nil {
			goto failure
		}
	} else {
		if err = clusterConn.Readonly(); err != nil {
			goto failure
		}
	}
	if isAsking {
		if err = clusterConn.Asking(); err != nil {
			goto failure
		}
	}
	if msgAck, err = clusterConn.HandelMessage(msg); err != nil {
		goto failure
	}
	clusterConnPool.Put(clusterConn)
	return
failure:
	clusterConnPool.Remove(clusterConn)
	logger.Warningf("转发消息出错: %v", err)
	return protocol.ERR_ClusterSlotsForward
}