Hi community,
I have one question regarding VersionRequest/VersionResponse messages.
Before member sends actual message, it has to first determine the remote
member version. This is done by exchanging
/VersionRequest///VersionResponse/ messages using function
/getServerVersion() /from class /TcpClient.java/. There is part of code
in /getServerVersion()/ for which I'm unsure which case is actually
covering:
https://github.com/apache/geode/blob/854456c81ca7b9545eba252b6fa075318bb33af8/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java#L289
try {
final Object readObject =objectDeserializer.readObject(versionedIn); if
(!(readObjectinstanceof VersionResponse)) {
throw new IllegalThreadStateException(
"Server version response invalid: This could be the result of trying to
connect a non-SSL-enabled client to an SSL-enabled locator."); }
final VersionResponse response = (VersionResponse) readObject; serverVersion
= response.getVersionOrdinal(); serverVersions.put(address, serverVersion);
return serverVersion; }catch (EOFException ex) {
// old locators will not recognize the version request and will close
the connection }
...
return KnownVersion.OLDEST.ordinal();
The case is when /readObject()/ try to read /VersionResponse/ and then
throws /EOFException/. As you can see, there is comment in catch
statement explaining the case, but I'm not sure that I understand it
correctly. What I assume is that member with old version (less or equal
to /KnownVersion.OLDEST/) of Geode does not support /VersionRequest/
message, and will close connection if receive such message. This will
result with /EOFException/ on remote member that sent /VersionRequest/.
Is this correct understanding? Is this case still valid with the latest
non-deprecated version set to /GFE_81/?
The reason why I'm asking this is because in some cases in kuberentes
cluster, it is possible to get /EOFException/ when remote member is not
yet accessible. In this case member will still try to send message (e.g.
/RemoteLocatorJoinRequest/) thinking that it is old member on the other
side, and that will then result with /ClassCastException/ when reading
response (e.g. /RemoteLocatorJoinResponse/).
BRs,
Jakov