Concurrent modifications happen (both from user input and due to user 
activity), and a system not specifically designed to address this (and races, 
and offlining, and other kinds of timing/conflict issues) will *at sufficient 
usage* suffer from a background hum of user dissatisfaction.

You're specifically proposing that we build and ship a system we *know* to be 
less reliable than Firefox Sync, just to get to market sooner and move some 
complexity around. I don't think avoiding domain-specific reconciling buys us 
anything worth a constant hiss of avoidable data loss.


> The same scenario applies for passwords. They very rarely change, and they 
> tend to change in a linear fashion. The chances that I independently change a 
> password to two different values while not syncing just with the right timing 
> is simply irrelevant.

I think you're assuming that sync records contain only user-entered data, and 
only change when users act on them. That's at odds with the data we record to 
provide our user experience, which is part of the data we sync. That's what I 
was alluding to when I mentioned timestamps, which are eminently reconcilable 
and automatically change with some frequency.

Perhaps a good example of user-entered data is bookmark structure. If you dump 
something in your toolbar on your tablet, and do *anything* to your toolbar on 
your desktop, you have a conflict in whatever record or records defines the 
toolbar structure.


>> (We especially cannot do this if there's structure involved, because 
>> consistency spans individual records; conflict resolution requires an 
>> understanding of the data model. Achieving consistency is a big motivator 
>> for the *Sync proposals.)
> 
> Consistency by definition cannot be achieved if you have non-zero latency and 
> disconnected operation.

I think you and I are talking about different definitions of consistency.

For the kind of consistency we care about here -- stable modification of sets 
of records -- you need a shared store, an atomic write primitive, the right 
data model, for the server to not alter the contents of content-addressable 
records, and for clients to retry when the atomic write fails due to a conflict.

What you can't have is one client saying "folder X contains items A, B, C", and 
another client having just uploaded "folder X contains items A, D", and for the 
server's magic reconciling approach to silently orphan B and C. A client 
(probably the first) needs to know so that it can do something sane -- merge 
the items, for example.


>> Furthermore, a sync implementation already needs to do client-side 
>> content-based data merging if it wants to support setup without blowing away 
>> your local data. So it's not like this is a significant additional 
>> requirement.
> 
> There is no clear user stories on this for the MVP. Without such a hard 
> requirement a "Setting up sync with an existing account will delete all local 
> bookmarks. Yes/No." is a perfectly fine solution for the first shipping 
> version when we detect a 2nd device being linked.

If it's not in the list, I suspect that's because nobody considered that 
scenario in drafting the MVP. It's not in any "not-MVP" list I've seen.

As a user, I expect that setting up Sync on my phone doesn't delete the data on 
my desktop or phone, instead merging everything together in a way that makes 
sense.


>> And at the extreme, where a data type *does* admit to a "don't bother" 
>> reconciling technique, that's trivial to implement on the client: a client 
>> downloading a server record that 'conflicts' will just apply it over their 
>> local record. No conflict.
> 
> We managed to not have an acceptable sync solution for many years. If these 
> things were trivial, we wouldn't be at this juncture today.

>From my perspective, the reasons we don't have an acceptable sync solution are 
>(a) we didn't rewrite Weave before it shipped in Fx4, and thus were baked into 
>a fundamentally limited protocol and were stuck maintaining a Labs codebase, 
>(b) we were never adequately resourced to build something new while still 
>keeping the old one from cracking (and adding features to it, and porting it 
>to Android!), and (c) each abortive attempt at a redesign included backward 
>compatibility or extensive code reuse requirements. Until it was too late.

In short: we don't have an acceptable Sync solution because we were too busy 
working on the unacceptable one to build anything else.

That's water under the bridge, but I think it's important context.

Now that's we've organizationally said "let it burn and build something else", 
I very much want PiCL to avoid sliding down the same slope of expedient 
decision making, which will ultimately result in us shipping something that's 
more "labsy" and less "producty". That'll kill us in the long run.

PiCL is our one shot at building the replacement for Sync. We should make sure 
it's not Weave.

I understand that you're very focused on getting to market. I don't see much 
value in getting to market with a solution that's worse than what we have, and 
doesn't let us do better without another rewrite. If we do that, we'll stay DFL.

I've spent the last two and a half years fielding bugs and user reports that 
shine very bright lights on edge case assumptions, not to mention building a 
brand new Sync 1.1 client from the ground up and seeing all the design flaws 
anew. My focus is on making sure we ship something that won't make us bleed to 
death from paper cuts or axe wounds.

-R
_______________________________________________
Sync-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/sync-dev

Reply via email to