func xdsServerCallbackFuncs()

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))
			}
		},
	}
}