Left to do:
- Decide, finish, and document how to perform session writes.
- MediaWiki\Session\SessionBackend passes WRITE_SYNC with a comment " write to all datacenters". However this is at odds with RESTBagOStuff and RFC: Session Storage API which state that only a local quorum is expected. We instead rely on "sticky DC" cookies to pin a userthe few seconds around session replication, and thus don't need that to be immediate in the same web request. Either this parameter needs to be removed, or otherwise the other two parts reconciled with a change in direction.
- Decide, finish, and document how to perform session deletions.
- RESTBagOStuff::doDelete() states "TODO: respect WRITE_SYNC (e.g. EACH_QUORUM)". Either do this, or decide otherwise. See RFC: Session Storage API in which it states that Kask /delete is synchronous across DCs.
- MediaWiki\Session\SessionBackend uses store->delete() in two places: "unpresist" and "resetId". Neither of these actually pass WRITE_SYNC currently, which is at odds with the previous point. I suspect that we do need sync deletes, but that we expected Kask to handle this transparently and thus didn't bother having MW specify this in its call. Parameter must be added then, or otherwise reconciled with the decision of the previous point.
- If deletes require waited-for cross-dc replication, document this in the SessionManager class doc as a requirement of the storage backend for future reference. Both for developers to discover this, as well as for sysadmins (e.g. third parties) to know what and how to configure their own session backend.
- RESTBagOStuff::doAdd and ::doIncr states "TODO: respect WRITE_SYNC (e.g. EACH_QUORUM)". Either do, or explain why not and remove.
- Update SessionManager class doc as-needed.
- Resolve T206016: Create a service for session storage which currently has one unresolved subtask: