On Jul 24, 2013, at 10:34 AM, Richard Newman <[email protected]> wrote:
> 2. Device management. Storage requires a fairly strong model of which devices > are connected to the account, when they were last active, what data they've > seen, what capabilities they have, and perhaps other things. Some of this > might be storable in storage itself, but not all -- for example, when a token > is invalidated or a device is removed from a device management UI, this list > needs to be updated. (And a device management UI of course requires such a > list to exist outside of storage, because you might not be using our storage!) > > Some of this begins to morph into service discovery and management -- to have > a list of connected devices, with subsets 'active' for different services. > (Maybe I don't want my reading list active on my work computer.) > > https://bugzilla.mozilla.org/show_bug.cgi?id=821532 covers some of these. > We've anticipated some of this in the auth/key server, but haven't worked through the details. We track currently "active" devices with a long lived session token that the client uses to authenticate itself with auth/key server (e.g., refreshing the signature on the clients public key, which is required to generate assertions for authenticated to the storage server). Having a valid active session token means you're "attached". Changing or reseting your password invalidates all active, valid session tokens. There are lots of details to work out here, but I think this is a good start. > 3. Service discovery and management. This is pretty wooly, but you can > imagine the user scenarios -- when I set up a new machine with just my > username and password, it needs to get my Sync account definition, my Dropbox > credentials for backup, my Pocket account name, etc. > We anticipate the auth/key server will help with this. > (Even if we don't sync third-party-service credentials, we need a service > identifier so the user can log in.) > > * Version negotiation. We need versioning at the protocol level, at the > storage level, and at the data model level. Sync has the first two, but lacks > the third, and it has no concept of negotiation at all -- because negotiation > requires external device management. (Sync stores its client descriptors > inside the system itself!) > What does storage level versioning mean? > I assert that we need data model version negotiation. Experience has shown > that we do not fix or extend our data model for fear of a flag day and > partitioning of devices, and that has two negative effects: firstly, that we > can't later fix bugs we don't know about now; secondly, that we *must* fix > issues we do know about *before* ship, because we can't fix them later. > Neither is good for the schedule. > > See https://bugzilla.mozilla.org/show_bug.cgi?id=825731 for a little sketch > of this. The algorithm for negotiation is fairly obvious, but this needs to > have some integration with the data model. Here's Chromium's take on it: http://www.chromium.org/developers/design-documents/sync/sync-data-best-practices Which probably requires field level encryption to work well. Dropbox File API doesn't work so well with that either, since it's more natural to write/read whole records. New Datastore API would be more friendly to per-field encryption. Warner and I worked though the "no data model versions" option, but it got put on the back burner. What you suggest in the bug is reasonable. -chris
_______________________________________________ Sync-dev mailing list [email protected] https://mail.mozilla.org/listinfo/sync-dev

