This log message about the GFE version is suspicious too. That is a VERY old 
version with ordinal value 1. The C++ client is supposed to be sending 45 which 
is GFE 9.0.0 / Geode 1.0.0.

Looks like there might be a handshake protocol misalignment somewhere. Will 
keep digging.

-Jake

> On Apr 17, 2020, at 7:24 AM, Jacob Barrett <jbarr...@pivotal.io> wrote:
> 
> Can you confirm that when log level less than debug that the IOException goes 
> away and the client appears to function?
> 
> -Jake
> 
> 
>> On Apr 17, 2020, at 1:12 AM, Jakov Varenina <jakov.varen...@est.tech> wrote:
>> 
>> Hi Jacob,
>> 
>> Thanks for your response!
>> 
>> Regarding GEODE-7944, "Unable to deserialize *membership id* 
>> java.io.EOFException" is not logged but thrown, and it breaks processing of 
>> QueueConnectionRequest in locator. This reflects in native client with "No 
>> locators found" even though they are available. Happens only when native 
>> client with subscription is enabled and locator started with 
>> --log-level=debug.
>> 
>> I haven't had time to test and analyze in detail native durable client yet. 
>> So far I could only confirm that when using native durable client then 
>> locator behaves differently than how it is described in documentation (see 
>> previous mail) and how java client works:
>> 
>> It seems that native durable client always requests from locator all 
>> available servers (redundant= -1, findDurable=false) with 
>> QueueConnectionRequest. Locator returns them in QueueConnectionResponse 
>> ordered by load (best...worst). While for java durable client, locator use 
>> *membership id *from QueueConnectionRequest to locate servers that host 
>> client queue and send them back in QueueConnectionResponse as described in 
>> previous mail. I expect that native durable client is handling re-connection 
>> to same servers queue somehow also, but this has to be investigated yet. Any 
>> hints or comments related to this would be really appreciated.
>> 
>> BRs,
>> 
>> Jakov
>> 
>> On 15. 04. 2020. 10:07, Jacob Barrett wrote:
>>> Looking back at history the native library has always only ever set that 
>>> findDurable flag to false. I traced it back to its initial commit. Aside 
>>> from the annoying log message, does client durable connection work 
>>> correctly?
>>> 
>>>> On Apr 14, 2020, at 10:56 PM, Jakov Varenina <jakov.varen...@est.tech> 
>>>> wrote:
>>>> 
>>>> Hi all,
>>>> 
>>>> Could you please help me understand behavior of the native client when 
>>>> configured as durable?
>>>> 
>>>> I have been working on a bug GEODE-7944 
>>>> <https://issues.apache.org/jira/browse/GEODE-7944> which results with 
>>>> exception "Unable to deserialize membership id java.io.EOFException" on 
>>>> locator only when debug is enabled. This happens because native client, 
>>>> only when subscription is enabled, sends towards locator 
>>>> QueueConnectionRequest that doesn't encapsulate ClientProxyMembershipID 
>>>> (not properly serialized) and therefore exception occurs when locator 
>>>> tries to deserialize membership id to log it at debug level.
>>>> 
>>>> I was trying to figure out why would locator need ClientProxyMembershipID 
>>>> from native client and found following paragraph in the documentation 
>>>> (copied from 
>>>> https://geode.apache.org/docs/geode-native/cpp/112/connection-pools/subscription-properties.html):
>>>> 
>>>>  /For durable subscriptions, the server locator must be able to
>>>>  locate the servers that host the queues for the durable client. When
>>>>  a durable client sends a request, the server locator queries all the
>>>>  available servers to see if they are hosting the subscription region
>>>>  queue for the durable client. If the server is located, the client
>>>>  is connected to the server hosting the subscription region queue./
>>>> 
>>>> Locator behaves as described in above paragraph only when it receives 
>>>> ///QueueConnectionRequest with ///findDurable flag set to "true" //and 
>>>> with valid membership i//d. //I noticed that unlike java client, the 
>>>> native client always sets //findDurable// to //"false" //and therefore 
>>>> locator will never behave as described in above paragraph when native 
>>>> client is used.
>>>> 
>>>> Does anybody know why native client always sets //findDurable=false//?
>>>> 
>>>> BRs,
>>>> 
>>>> Jakov
> 

Reply via email to