Snapshot as full objects
Currently there isn't a lot you can do with Snapshots in Cinder. You can create them. You can clone a volume from them. You can delete them.
The proposal is to make Snapshots first class Cinder objects by:
- defining a "snapshot replicate" method which can replicate a snapshot to another storage backend with the same type of Volume Driver.
- Optionally allowing the Volume Driver to direct storage-backend to storage-backend transfer of snapshots.
- Allowing a snapshot to be dependent on a prior snapshot of the same volume stored on the same backend.
- Allowing Volumes to be dependent on the snapshot they were cloned from.
- Allowing time consuming operations involved in creating/replicating a snapshot to be tracked in the Snapshot status.
The states of a snapshot as created using ZFS are very simple:
- Full Snapshot: as created.
- Pending Delete: the user has deleted this snapshot but it is still referenced by a later incremental snapshot.
- Inbound: This snapshot has been created on this backend as a target of a snapshot replication. The snapshot is not yet usable, however.
Other Volume Drivers may need to identify additional states. For example, an implementation might have a "Creating" state where a snapshot is in the process of being created, but where it cannot yet be used to clone a new volume.
To be confirmed: I suspect that an optional flag indicating that this was a temporary snapshot which would be imminently deleted would be useful on snapshot create. An implementation which just journaled the updates to the volume while the original volume served as a read-only volume would be able to omit the step of starting to replicate the original volume when it new that the state of having a snapshot was only temporary.
This is part of the CERSS initiative.