Author: ericwa
Date: Mon Mar 24 08:23:37 2014
New Revision: 10625
URL: http://svn.gna.org/viewcvs/etoile?rev=10625&view=rev
Log:
COSynchronizerClient: turn an assertion into a warning, for when messages from
the server arrive out of order.
Modified:
trunk/Etoile/Frameworks/CoreObject/Synchronization/COSynchronizerClient.m
Modified:
trunk/Etoile/Frameworks/CoreObject/Synchronization/COSynchronizerClient.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Synchronization/COSynchronizerClient.m?rev=10625&r1=10624&r2=10625&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Synchronization/COSynchronizerClient.m
(original)
+++ trunk/Etoile/Frameworks/CoreObject/Synchronization/COSynchronizerClient.m
Mon Mar 24 08:23:37 2014
@@ -121,15 +121,35 @@
- (void) handleRevisionsFromServer: (NSArray *)revs
{
ETUUID *lastServerRevUUID = [self lastRevisionUUIDFromServer];
- _lastRevisionUUIDFromServer = [[revs lastObject] revisionUUID];
-
+
NSUInteger i = [revs indexOfObjectPassingTest: ^(id obj, NSUInteger
idx, BOOL *stop)
{
COSynchronizerRevision
*revision = obj;
return
[revision.parentRevisionUUID isEqual: lastServerRevUUID];
}];
- ETAssert(i != NSNotFound);
+ if (i == NSNotFound)
+ {
+ NSLog(@"COSynchronizerClient: Ignoring push from server, it
seems to be an old message that arrived late");
+
+ // FIXME: write unit test for this case:
+ //
+ // - add outline item 1 on server
+ // - Rename "outline item 1" to "foo" on server, leave field
editor open (so the change isn't sent to the client)
+ // - add outline item 2 on client
+ // - end field editor on server
+ //
+ // The server processses the "add outline item 2 on client",
which is waiting in a buffer.
+ // Then server sends out the 'Rename "outline item 1" to "foo"'
revision (which the client should ignore)
+ // and server also sends the merged revision, which the client
should accept.
+ //
+ // If the messages arrive out of order, so the merged (good)
revision arrives at the client before the stale 'Rename "outline item 1" to
"foo"' revision,
+ // we get to this case.
+
+ return;
+ }
+
+ _lastRevisionUUIDFromServer = [[revs lastObject] revisionUUID];
NSArray *revsToUse = [revs subarrayWithRange: NSMakeRange(i, [revs
count] - i)];
_______________________________________________
Etoile-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/etoile-cvs