func sendXdsRequest()

in dp_check/dp_check.go [650:690]


func sendXdsRequest(stream adsStream, node *v3corepb.Node, typeURL, resourceName string, versionInfoMap, nonceMap map[string]string) (*v3discoverypb.DiscoveryResponse, error) {
	typeNameMap := map[string]string{
		V3ListenerURL:    "LDS",
		V3RouteConfigURL: "RDS",
		V3ClusterURL:     "CDS",
		V3EndpointsURL:   "EDS",
	}
	requestName := typeNameMap[typeURL]
	infoLog.Printf("Now send %v request...", requestName)
	xdsReq := &v3discoverypb.DiscoveryRequest{
		VersionInfo:   versionInfoMap[typeURL],
		Node:          node,
		ResourceNames: []string{resourceName},
		TypeUrl:       typeURL,
		ResponseNonce: nonceMap[typeURL],
	}
	if err := stream.Send(xdsReq); err != nil {
		return nil, fmt.Errorf("failed to send %v request: %v", requestName, err)
	}
	infoLog.Printf("Successfully sent %v request: |%+v|. Now wait for the reply...", requestName, xdsReq)
	xdsReply, err := stream.Recv()
	if err != nil {
		return nil, fmt.Errorf("failed to receive %v response: %v", requestName, err)
	}
	mm := protojson.MarshalOptions{
		Multiline: true,
		Indent:    jsonIndent,
	}
	encodeXdsReply, err := mm.Marshal(xdsReply)
	if err != nil {
		return nil, fmt.Errorf("failed to pretty-print %v response: %v", requestName, err)
	}
	infoLog.Printf("Successfully received %v reply: |%+v|.", requestName, string(encodeXdsReply))
	versionInfoMap[typeURL] = xdsReply.GetVersionInfo()
	nonceMap[typeURL] = xdsReply.GetNonce()
	if err = ackXdsResponse(stream, node, typeURL, resourceName, versionInfoMap, nonceMap); err != nil {
		return nil, fmt.Errorf("failed to acked %v response: %v", requestName, err)
	}
	infoLog.Printf("Successfully acked %v reply.", requestName)
	return xdsReply, nil
}