On Wed, Jan 4, 2017 at 7:00 AM, John Ferlan <jferlan@xxxxxxxxxx> wrote: > > [...] > >>>> We don't anticipate a need for this. >>>> >>>>> 4. There's no VxHS Storage Pool support in this patch (OK actually an >>>>> additional set of patches in order to support). That would be expected >>>>> especially for a networked storage environment. You'll note there are >>>>> src/storage/storage_backend_{iscsi|gluster|rbd}.{c|h} files that manage >>>>> iSCSI, Gluster, and RBD protocol specific things. For starters, create, >>>>> delete, and refresh - especially things that a stat() wouldn't >>>>> necessarily return (capacity, allocation, type a/k/a target.format). >>>>> Perhaps even the ability to upload/download and wipe volumes in the >>>>> pool. Having a pool is a bit more work, but look at the genesis of >>>>> existing storage_backend_*.c files to get a sense for what needs to change. >>>>> >>>> >>>> VxHS does not need the Storage Pool functionality. Do we still need to >>>> implement this? >>>> >>> >>> It's something that's expected. See my reasoning above. >>> >> >> Some explanation is in order - >> >> HyperScale is not designed to be used as a stand-alone independent >> storage. It is designed only to be used in the OpenStack environment >> with all the related Cinder/Nova changes in place. Therefore, we do >> not have a need for most of the above-mentioned functions from >> libvirt/qemu. >> >> Even in the OpenStack environment, we do not support creating storage >> volumes independent of a guest VM. A VxHS storage volume can only be >> created for a particular guest VM. With this scheme, a user does not >> have to manage storage pools separately. VxHS automatically configures >> and consumes the direct attached SSD/HDD on the OpenStack compute when >> enabled. After this, all the requests to add storage to guest VMs are >> forwarded by OpenStack directly to the hyperscale daemon on the >> compute, and it takes care of creating the underlying storage etc. > > And how does that volume creation occur? It would seem that there's some > command that does that. That's "independent" of libvirt, so in order for > a guest to use that storage - it'd need to be created first anyway. I > then assume as part of guest vm destruction you must somehow destroy the > volume too. Synchronizing with creation and ensuring deletion would seem > to be fairly important tasks and would seemingly be something you'd like > to have more integrated with the environment. > We have hooks in nova that trap volume creation/deletion request. Then we send messages to our service running on every compute to carry out the necessary steps to create/delete the volume. > So what about hotplug? Can someone add in VxHS storage to a guest after > it's started? > Yes, we do support hot-plugging. We use OpenStack nova framework to generate a config for the new volume and attach_device it to a running guest. > And migration? Can the guest be migrated? I haven't crawled through > that code recently, but I know there'd be changes to either allow or not > based on the storage type. > We do support storage migration. We simulate shared storage on top of direct-attached storage, therefore libvirt/qemu can assume shared storage for the purpose of migration. >> >> The role of libvirt is limited to opening the volume specified in the >> guest XML file. Volume creation, deletion etc is done by the VxHS >> daemon in response to messages from the OpenStack controller. Our >> OpenStack orchestration code (Nova) is responsible for updating the >> guest XML with correct volume information for libvirt to use. A >> regular user (libvirt) is not expected to know about what volume IDs >> exist on any given host. A regular user also does not have a volume >> device node on the local compute to query. The only way to get to a >> volume is via the network using the server IP-port address. >> >> > > For me having the storage pool is a more complete solution. You don't > have to support all the storage backend volume functions (build, create, > upload, download, wipe, resize, etc.), but knowing what volumes exist > and can be used for a domain is nice. It's also nice to know how much > storage exists (allocation, capacity, physical). It also allows a single > point of authentication - the pool authenticates at startup (see the > iSCSI and RBD code) and then the domains can use storage from the pool. > > From a guest view point, rather than having to provide: > > <source protocol='vxhs' name='eb90327c-8302-4725-9e1b-4e85ed4dc251'> > <host name='192.168.0.1' port='9999'/> > </source> > <auth username='user'> > <secret type='vxfs' usage='somestring'/> > </auth> > > you'd have: > > <source pool='pool-name' volume='vol-name'/> > > The "host" and "auth" would be part of the <pool> definition. Having to > discover the available 'names' ends up being the difference it seems for > vxhs since your model would seem to be create storage, create/start > guest, destroy guest, destroy storage. I think there's value in being > able to use the libvirt storage API's especially w/r/t integrating the > volume and guest management. > Would it be OK to consider adding storage pool functionality to vxhs after Nova starts using it? > John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list