On Aug 12, 2013, at 4:26 AM, Ryan Kelly <[email protected]> wrote:

> 
> Hi All,
> 
> 
> Here's a quick take on how version-negotiation might look in practice.
> I'm deliberately proposing a very blunt and inelegant instrument, in an
> attempt to surface what our minimal needs really are.
> 
> Version negotiation is handled at the Firefox Accounts layer,

+1

> via an API
> that lets you list and inspect all the devices attached to the account.
> You query the endpoint, and get a set of devices with names and version
> strings:
> 
>  GET /account/devices
> 
>  {
>    "<device-uuid>": {"name": "Ryan's Laptop", "version", "A.B.X"},
>    "<device-uuid>": {"name": "Ryan's Phone", "version", "A.B.Y"},
>  }
> 
> Each device is responsible for registering itself when it connects to
> the account, and for keeping its details up-to-date.
> 
> We then manage a future protocol or format update as follows:
> 
>  1) We ship FxAccounts + SyncX.Y, without solving all the big thorny
>     storage problems that we'd really like to solve.
> 
>  2) There's a user-visible flag-day, during which they manually
>     transfer all their devices over the Firefox Accounts.
> 
>  3) Sometime later we ship FxAccounts + TreeSync, and there is
>     much rejoicing.
> 
>  4) TreeSync enabled devices check their peers through the device
>     management api, and delay upgrading to TreeSync until they are
>     all at some minimal version that's capable of supporting it.
> 
>  5) The user eventually upgrades all their devices, and their data
>     is transparently migrated into TreeSync without another flag-day.
> 
>  6) Many years from now, we can finally turn off the original storage
>     servers.

+1

> It's a blunt instrument, but ISTM that this would work OK.
> 
> What I like about putting this in the Firefox Accounts layer, is that it
> doesn't block on any other decisions.  

+1

> We could ship this layer on top
> of Sync1.1, or Sync2.0, or CouchDB, or whatever happens to be ready at
> the time, and we'd have a way to dig ourselves out of whatever mess
> we've made (if any!)

+1

> More generally: if this really is the only other
> absolutely-must-have-before-flag-day feature, then let's get it nailed
> down ASAP.
> 
> Thoughts?

I'm four on the positive side for an approach like this.  The only missing bit 
would seem to be the server knowing what "version" of storage you're on.  A 
connected client can say "oh look, all versions of a users device support 
fancy-new storage back end, and I'm back on crufty sync X.Y, let me migrate".

Then other devices come on line and say "oh look!  I've got a local crufty 
version of data, but the database was updated, let me ditch this old code-path 
and re-sync with the new hotness".

Is this the general idea you're thinking about for how we can iterate data 
storage in the future?  If so, I like it.

lloyd

> 
>  Cheers,
> 
>    Ryan
> _______________________________________________
> Sync-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/sync-dev

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

Reply via email to