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