func checkCDS()

in dp_check/dp_check.go [997:1037]


func checkCDS(stream adsStream, node *v3corepb.Node, clusterName string, versionInfoMap, nonceMap map[string]string) (string, error) {
	// check aggregate cluster
	cdsReply, err := sendXdsRequest(stream, node, V3ClusterURL, clusterName, versionInfoMap, nonceMap)
	if err != nil {
		return "", fmt.Errorf("fail to send CDS request: %v", err)
	}
	var edsClusterName string
	var edsClusterReply *v3discoverypb.DiscoveryResponse
	if *xdsExpectFallbackConfigured {
		clusters, err := processAggregateClusterResponse(cdsReply, clusterName)
		if err != nil {
			return "", fmt.Errorf("fail to process aggregate cluster response: %v", err)
		}
		infoLog.Printf("Received primary cluster for DirectPath: %v", clusters[0])
		infoLog.Printf("Received secondary cluster for fallback to CFE: %v", clusters[1])
		// check primary cluster
		var edsClusterErr error
		edsClusterName = clusters[0]
		edsClusterReply, edsClusterErr = sendXdsRequest(stream, node, V3ClusterURL, edsClusterName, versionInfoMap, nonceMap)
		if edsClusterErr != nil {
			return "", fmt.Errorf("fail to send EDS cluster request: %v", err)
		}
		// check secondary cluster
		dnsClusterReply, err := sendXdsRequest(stream, node, V3ClusterURL, clusters[1], versionInfoMap, nonceMap)
		if err != nil {
			return "", fmt.Errorf("fail to send DNS cluster request: %v", err)
		}
		if err = processDNSClusterResponse(dnsClusterReply, clusters[1]); err != nil {
			return "", fmt.Errorf("fail to process DNS cluster response: %v", err)
		}
	} else {
		edsClusterName = clusterName
		edsClusterReply = cdsReply
	}
	serviceName, err := processEdsClusterResponse(edsClusterReply, edsClusterName)
	if err != nil {
		return "", fmt.Errorf("fail to process EDS cluster response: %v", err)
	}
	infoLog.Printf("Successfully extract service_name from CDS response: |%v|", serviceName)
	return serviceName, nil
}