in grpc-xds/control-plane-go/pkg/server/server.go [142:174]
func xdsServerCallbackFuncs(logger logr.Logger) *serverv3.CallbackFuncs {
return &serverv3.CallbackFuncs{
StreamRequestFunc: func(streamID int64, request *discoveryv3.DiscoveryRequest) error {
logger.Info("StreamRequest", "streamID", streamID, "type", request.GetTypeUrl(), "resourceNames", request.ResourceNames)
return nil
},
StreamResponseFunc: func(_ context.Context, streamID int64, _ *discoveryv3.DiscoveryRequest, response *discoveryv3.DiscoveryResponse) {
protoMarshalOptions := protojson.MarshalOptions{
Multiline: true,
Indent: " ",
AllowPartial: true,
}
for _, anyResource := range response.Resources {
if anyResource == nil {
continue
}
protoResource, err := anyResource.UnmarshalNew()
if err != nil {
logger.Error(err, "StreamResponse: could not unmarshall Any message")
continue
}
jsonResourceBytes, err := protoMarshalOptions.Marshal(protoResource)
if err != nil {
logger.Error(err, "StreamResponse: could not marshall proto message to JSON")
continue
}
// Logging each resource instead of a slice of resources, to take advantage of multi-line logging,
// which is helpful for development and exploration.
logger.Info("StreamResponse", "streamID", streamID, "type", response.GetTypeUrl(), "resource", string(jsonResourceBytes))
}
},
}
}