You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geode.apache.org by "ASF subversion and git services (JIRA)" <ji...@apache.org> on 2017/05/25 14:46:04 UTC

[jira] [Commented] (GEODE-2954) Old client gets null memberID in cache listener

    [ 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)