I realized that I haven't explicitly articulated this list, and there might be things I'm missing.
Here's my view of the ecosystem in which storage operates. 1. Identity provider, keyserver, et al. I think y'all have a good handle on this. 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. 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. (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!) 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. What am I missing? -R _______________________________________________ Sync-dev mailing list [email protected] https://mail.mozilla.org/listinfo/sync-dev

