Implement "plan 1" for dataset sharing: "ephemeral RO snapshots".
You can now simultaneously RW and RO map a dataset because all the RO mappings use copies (clones) of a snapshot. Only a single RW mapping of course. When the RW mapping swaps out it automatically creates a new snapshot. So there is currently no user control over when a version of the dataset is "published", it just happens everytime you swapout an experiment with a RW mapping. A new RW mapping does not affect current RO mappings of course as they continue to use whatever snapshot they were created with. New RO mappings with get the most recent snapshot, which we currently track in the DB via the per-lease attribute "last_snapshot". You can also now declare a lease to be "exclusive use" by setting the "exclusive_use" lease attribute (via modlease). This means that it follows the old semantics of only one mapping at a time, whether it be RO or RW. This is an alternative to the "simultaneous_ro_datasets" sitevar which enforces the old behavior globally. Primarily, I put this attribute in to prevent an unexpected failure in the snapshot/clone path from wreaking havoc over time. I don't know if there is any value in exposing this to the user.