> On June 30, 2017, 2:56 p.m., Galen O'Sullivan wrote:
> > I've been looking at this with @WireBaron, and we're wondering whether a 
> > client membership ID can still get sent with a zeroed UUID if it's passed 
> > between two Gemfire 9.1 servers as a result of client queue replication 
> > failover. We tried to write a test and failed.
> > 
> > The basic idea is something like this:
> > * start two servers, an interested client and an event-creating client.
> >   One server is running 9.0 and the other 9.1 .
> > * put a couple of events in the system via the 9.0 server (should be fine 
> > with either).
> > * kill the 9.0 server and add a new 9.1 server to the system.
> >   At this point, if we're understanding client queue replication correctly, 
> > the new server should receive a copy of the queue from the other 9.1 server.
> > * Check the same events on the new server to see if they've lost the UUID.
> > 
> > Does that sound reasonable to you?
> > 
> > I'm not sure how to trigger failures in the right order to verify this 
> > isn't an issue, but I think it's reasonably plausible that during rolling 
> > upgrades someone could encounter the issue. It would require an old client 
> > to get a queue from a new version server that has been passed that queue by 
> > another new version server.
> > 
> > If that's not possible to trigger, or you can't test it and are confident 
> > that the scenario we described won't happen, then go ahead and ship it.

Please use Geode version numbers.

I modified my new test to do as you described and it passed, as I expected it 
to.  During image transfer the first 1.2.0 server would just transmit the 
membershipID bytes in its toData method since the target is a 1.2.0 server.  
The second server would preserve the UUID bytes when sending the eventID to the 
1.0.0 client.


- Bruce


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/60570/#review179384
-----------------------------------------------------------


On June 30, 2017, 3:02 p.m., Bruce Schuchardt wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/60570/
> -----------------------------------------------------------
> 
> (Updated June 30, 2017, 3:02 p.m.)
> 
> 
> Review request for geode, Alexander Murmann, Barry Oglesby, Galen O'Sullivan, 
> Hitesh Khamesra, and Brian Rowe.
> 
> 
> Bugs: GEODE-3153
>     https://issues.apache.org/jira/browse/GEODE-3153
> 
> 
> Repository: geode
> 
> 
> Description
> -------
> 
> Another problem was found in backward-compatibility testing.  If a 1.0.0 
> client was receiving subscription events generated by a 1.0.0 peer "feeder" 
> member and the events were routed through a 1.0.0 server the client might see 
> duplicate events when the server is stopped and the client fails over to a 
> 1.2.0 server holding its redundant subscription queue.  This is especially 
> possible if a large "ack" period is established in the client.
> 
> The problem stems from the EventID deserialization/reserialization of the 
> memberID bytes when sending to a 1.0 client.  It was deserializing using 
> Version.CURRENT, which ignores the UUID bytes in the serialized ID.  Then it 
> serialized the identifier using the client's version, which includes the UUID 
> bytes but which are zero due to the version used in deserialization.
> 
> 
> Diffs
> -----
> 
>   
> geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
>  bc3d708da2ae9a8e386accb8d15e2ed49123241e 
>   geode-core/src/main/java/org/apache/geode/internal/Version.java 
> 557697159da644915e4ffe2405cdddc9ef37c5ac 
>   geode-core/src/main/java/org/apache/geode/internal/cache/EventID.java 
> 55c89f1f2e0800371dd4a30c4312c44f942a45ea 
>   
> geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ClientServerMiscBCDUnitTest.java
>  bc48d976096fafe2545e707da68dab5120ddca51 
>   
> geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ClientServerMiscDUnitTest.java
>  bfe4646b9abdf6075e8d30fab3d79924faade2aa 
>   
> geode-core/src/test/resources/org/apache/geode/codeAnalysis/sanctionedDataSerializables.txt
>  b69e004d63d74eccd5cd562ea269363ba3f2782e 
> 
> 
> Diff: https://reviews.apache.org/r/60570/diff/2/
> 
> 
> Testing
> -------
> 
> new unit tests, precheckin
> 
> 
> Thanks,
> 
> Bruce Schuchardt
> 
>

Reply via email to