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
}