-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
consider volume_services_id
instead of volume_id
on #182
#185
Comments
I don't feel like that makes any sense. It's a reference to the volume resource, not some sideband service. Can we elaborate on the thinking here? |
I just didn't want to loose a comment from @jainvipin here #182 (comment) |
@glimchb @benlwalker - my thought was that middle-end objects specifies a set of service applied to a given namespace/volume. Saying that this is a volume reference is not reflecting that this is a middle end object that is identifying a set of services (e.g. crypto) applied on a given volume. May be there is a better word to capture that but certainly leaving it as volume will be confusing, because it doesn't refer to the volume. |
I was thinking like in linux kernel... you have block device, on top you can add crypto and result is still block device... so instead of block we calling this here apply crypto and new volume is created with crypto thoughts ? |
The way most block storage stacks work (Windows, Linux, SPDK, etc.) is by building IO pipelines consisting of a stack of "block devices". The block devices have types (NVMe, SCSI, crypto, raid). Some block devices represent physical storage. Some block devices represent remote storage. Some block devices are purely virtual and can only be layered on top of other block devices (crypto, raid). OPI is simply using this long established model and calling the objects that get stacked "volumes". To build a volume that does inline encryption of data, you'd layer a CryptoVolume on top of an NVMeVolume, for example. You assign the top-level volume_id into a subsystem when you create a namespace. Note also that the stacks do not need to be linear. RAID would aggregate, a partition splits, etc. That's why each layer has to return their own new volume(s). |
@benlwalker this leads to a question I had - |
It could, but more likely what'll happen for the partition/logical volume case is you'll call an API to provision some sort of "manager" object, associated with a backing volume. Then you'd ask the manager to provision volumes for you, giving you one volume_id at a time. That's because other than very simple splitting, the creation and destruction of volumes is dynamic and on-going. |
Thanks for this insight @benlwalker and thank you for your patience! This also begs a question, where do we indicate this stacking of multiple services applied to a remote NVMe volume in them iddleend APIs? |
works ? |
@glimchb - the way I see the sequence:
Isn't this confusing to the user as to which volume_id is referring to what object? |
@jainvipin Please propose how you would do arbitrary layering, where the order of the layering matters and it isn't always 1:1 and not all layers always exist. I think if you do that, you'll quickly see that the handles all have to be the same type and interchangeable like Boris outlined. |
@benlwalker - you may be right, let me think over something that may look better. If not we go with what we have. |
see #182 (comment)
The text was updated successfully, but these errors were encountered: