> Presumably, with this approach, if an older client overwrites the new field, 
> then nothing bad happens. And we eventually converge on everyone supporting 
> the new field as clients upgrade.

Old clients will do one of three things:

1. Upload a new record that’s missing fields. New clients will shrug, sigh, and 
go on with their day. We’ll probably want to have slightly smarter record 
application logic than usual, to avoid throwing away local data unnecessarily — 
e.g., if a client record goes from saying it’s a Windows machine to having no 
opinion, we shouldn’t clear our local platform note.


2. Upload a modified record and preserve the fields.

This is only bad if somehow the additional fields should have been updated or 
invalidated — for example, if an old client changes a password but leaves the 
old password change timestamp intact.

Desktop Sync does scary things like mutate JSON bodies returned from the 
server, but I don’t think it does so for engine records, so this should not 
occur. Android doesn’t do such things at all, so it definitely won’t occur 
there.


3. Barf when processing records with additional fields. I’m confident that this 
won’t happen on any of our platforms.

The primary concern is that this is *very* lossy in a transition period — all 
existing records, and any record uploaded by an old client, will be missing the 
fields we’d like them to have. But this is strictly less painful than a version 
bump, which would throw away existing records and lock out old clients, so 
we’re taking the best option of a bad bunch.



It sounds like we have consensus, so I’ll move forward with bolting bits on to 
support the work we’re doing.

Thanks, all!
_______________________________________________
Sync-dev mailing list
Sync-dev@mozilla.org
https://mail.mozilla.org/listinfo/sync-dev

Reply via email to