[ https://issues.apache.org/jira/browse/GEODE-2954?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16024807#comment-16024807 ]
ASF subversion and git services commented on GEODE-2954: -------------------------------------------------------- Commit e79d27d7e258d2a5f0d8a3155cc1911825a90493 in geode's branch refs/heads/develop from [~bschuchardt] [ https://git-wip-us.apache.org/repos/asf?p=geode.git;h=e79d27d ] GEODE-2954 Old client gets null memberID in cache listener I've added a new test that demonstrates that a new-version server sends an EventID to a client that the client is unable to deserialize completely. It gets an error when deserializing its member ID, causing cache listeners to get a null when requesting the ID of the member that effected the change. The fix is to reserialize the member ID in EventID.toData if the destination stream is for an older version, such as a 1.1.0 client. This ensures the proper on-wire format is used for that version of Geode. I've also bumped up the version ordinal for 1.2 since version 59 is marked as unusable in Version.java. I've changed the Banner to show the version ordinal because the other version information in the banner isn't completely trustworthy. It looks for a GemFireVersion.properties file on the classpath to get this information and so it may not get it from the Geode jar file as expected. > Old client gets null memberID in cache listener > ----------------------------------------------- > > Key: GEODE-2954 > URL: https://issues.apache.org/jira/browse/GEODE-2954 > Project: Geode > Issue Type: Bug > Components: membership > Reporter: Bruce Schuchardt > Assignee: Bruce Schuchardt > Fix For: 1.2.0 > > > I was doing backward compatibility testing and found a 1.0 client was getting > a null memberID in a cache listener > {noformat} > [info 2017/05/18 16:27:38.957 PDT <Cache Client Updater Thread on > trout(bridgegemfire5_trout_2254:2254)<ec><v2>:1030 port 21051> tid=0x2f] > Invoked util.SilenceListener for key Object_7399: afterDestroy in edge1, pid > 2267, vmID 5, operation DESTROY > whereIWasRegistered: 2267 > event.getKey(): Object_7399 > event.getOldValue(): <util.QueryObject util.QueryObject with id 12423 > (contains 6 levels, aPrimitiveLong=6409636308677575978)> > event.getNewValue(): null > event.getOperation().isLoad(): false > event.getOperation().isLocalLoad(): false > event.getOperation().isNetLoad(): false > event.getOperation().isNetSearch(): false > event.isConcurrencyConflict(): false > event.getDistributedMember(): null > event.getCallbackArgument(): null > event.getRegion(): /testRegion > event.getOperation().isDistributed(): true > event.getOperation().isExpiration(): false > event.isOriginRemote(): true > {noformat} > This was in an old test suite whose testing infrastructure isn't in the Geode > repo. I'm writing a unit test to reproduce the problem. > If you look at EventID.java you can see that it catches IOExceptions in > deserializing the memberID of the event and returns null without logging the > problem. > {code} > try { > result = InternalDistributedMember.readEssentialData(dis); > } catch (IOException e) { > // nothing can be done about this > } catch (ClassNotFoundException e) { > // ditto > } > {code} -- This message was sent by Atlassian JIRA (v6.3.15#6346)