Hello Mark,

as first thanks a lot for Your replay, it is more clear for me now.

Do you have any idea how to distinguish connected clients? I was looking 
for some information which I can use but I don't see anything usable in 
NodeGroup interface [1]. It provides access just for `Node` protobuf object 
but I don't see anything usable there.

Any idea or example?

Thanks!
 
[1] 
https://github.com/envoyproxy/java-control-plane/blob/main/cache/src/main/java/io/envoyproxy/controlplane/cache/NodeGroup.java
On Monday, August 16, 2021 at 7:15:11 PM UTC+2 Mark D. Roth wrote:

> The xDS protocol does not require the node information to be sent by the 
> client for every request on the stream; the client needs to send it only on 
> the first request on the stream.  Quoting this section of the xDS spec 
> <https://www.envoyproxy.io/docs/envoy/latest/api-docs/xds_protocol#basic-protocol-overview>
> :
>
> Only the first request on a stream is guaranteed to carry the node 
>> identifier. The subsequent discovery requests on the same stream may carry 
>> an empty node identifier. This holds true regardless of the acceptance of 
>> the discovery responses on the same stream. The node identifier should 
>> always be identical if present more than once on the stream. It is 
>> sufficient to only check the first message for the node identifier as a 
>> result.
>
>
> The Java implementation may currently happen to send the node information 
> with every request on the stream, but it's not required to do that, and 
> your xDS server should not expect that behavior.  I think you need to 
> change your xDS server to look at the node information on the first request 
> on the stream and store the node.cluster field so that it knows the value 
> when it sees subsequent requests on the same stream.
>
> I hope this information is helpful.
>
> On Mon, Aug 16, 2021 at 2:30 AM Lukáš Drbal <[email protected]> wrote:
>
>> Hello everyone,
>>
>> We are trying to setup routing via XDS to our GRPC services. Routing 
>> should be based on `node.cluster` information provided from client.
>>
>> Basically we would like to have 2 groups of GRPC clusters (priority and 
>> normal) with same endpoints and choose right one by client `node.cluster` 
>> identification.
>>
>> I have very minimal setup [1] which works absolutely as we expected for 
>> java client but doesn't work for C++ (and grpc_cli). Node hashing 
>> implementation [2]. This is minimal setup to reproducing this behaviour, 
>> regular routing is more complicated.
>>
>> From log perspective it looks like from C++ xds server receive 
>> `node.cluster` information just in first request. 
>>
>> From java I see cluster in all requests:
>> grpc-default-executor-0] INFO org.example.xds.routing.XdsServer - Routing 
>> [priority] to priority group. [grpc-default-executor-1] INFO 
>> org.example.xds.routing.XdsServer - Routing [priority] to priority group. 
>> [grpc-default-executor-1] INFO org.example.xds.routing.XdsServer - Routing 
>> [priority] to priority group. [grpc-default-executor-0] INFO 
>> org.example.xds.routing.XdsServer - Routing [priority] to priority group. 
>> [grpc-default-executor-1] INFO org.example.xds.routing.XdsServer - Routing 
>> [priority] to priority group. [grpc-default-executor-2] INFO 
>> org.example.xds.routing.XdsServer - Routing [priority] to priority group. 
>> [grpc-default-executor-1] INFO org.example.xds.routing.XdsServer - Routing 
>> [priority] to priority group. [grpc-default-executor-2] INFO 
>> org.example.xds.routing.XdsServer - Routing [priority] to priority group.
>>
>> But from cli / c++ I see cluster just in first request:
>> [grpc-default-executor-0] INFO org.example.xds.routing.XdsServer - 
>> Routing [priority] to priority group. [grpc-default-executor-0] INFO 
>> org.example.xds.routing.XdsServer - Routing [] to normal group. 
>> [grpc-default-executor-0] INFO org.example.xds.routing.XdsServer - Routing 
>> [] to normal group.
>>
>> This leads to expected error when c++ client is trying to get priority 
>> listeners and routes from default group.
>>
>> Can somebody give me any hint what's wrong here?
>>
>> Thanks a lot!
>>
>> L.
>>
>> [1] https://github.com/LesTR/xds-routing-test
>> [2] 
>> https://github.com/LesTR/xds-routing-test/blob/master/src/main/java/org/example/xds/routing/XdsServer.java#L61
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "grpc.io" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/grpc-io/1de7e140-862f-414f-b25a-7b1afc4069can%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/grpc-io/1de7e140-862f-414f-b25a-7b1afc4069can%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
>
> -- 
> Mark D. Roth <[email protected]>
> Software Engineer
> Google, Inc.
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/19380de0-9db6-4095-a120-ae40c453a9e8n%40googlegroups.com.

Reply via email to