Hi Mike, Is there any use case to have a more generic signature for updateStoragePool API ?
e.g void updateStoragePool(StoragePool storagePool, Map<E,V> updateDetails); // not too sure of what should be E & V as of now. To start with E & V can be String types or Enums for better static checks. instead of below void updateCapacity(StoragePool storagePool, Long capacityBytes, Long capacityIops); Regards, Amit *CloudByte Inc.* <http://www.cloudbyte.com/> On Fri, Jun 20, 2014 at 10:37 AM, Mike Tutkowski < mike.tutkow...@solidfire.com> wrote: > I just wanted to update those who are interested in this thread about work > I've done on this over the past couple days. > > This gist is that I've added a new method to the PrimaryDataStoreLifeCycle > interface that has the following signature (this code is not yet checked > in): > > void updateCapacity(StoragePool storagePool, Long capacityBytes, Long > capacityIops); > > This method can be invoked from StorageManagerImpl when the > updateStoragePool API is called. > > This gives the storage plug-in that backs the primary storage in question > an opportunity to update the backend storage it represents, if that makes > sense to do in your particular case (for example, changing the size and/or > IOPS of a volume). > > There is a related enhancement to the resizeVolume API that I plan to > tackle next week. That one will be particularly useful for managed storage > plug-ins. > > Also, I have been collecting input on the generic key/value proposal here: > > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=42566111 > > That may turn into a considerable amount of work. I was initially thinking > it could be fit into 4.5, but it might be 4.6. > > Thanks for any feedback! > > > On Thu, Jun 12, 2014 at 11:09 PM, Mike Tutkowski < > mike.tutkow...@solidfire.com> wrote: > >> As I think about this more, there are two situations we should cover: >> >> 1) Non-managed storage that has control over IOPS. >> >> When you invoke the createStoragePool API, you can pass in capacityIops. >> >> We should support modifying capacityIops via the updateStoragePool API. >> >> 2) Managed storage that has control over IOPS. >> >> In this environment, there is a 1:1 mapping between a SAN volume and a >> CloudStack volume. >> >> This is where we need to augment the resizeVolume API to accept - in a >> similar fashion to size - a new value for Min and/or Max IOPS. >> >> For example, a resizeVolume can be initiated by simply selecting a new >> Disk Offering. >> >> In this situation, the size and IOPS are part of the new Disk Offering >> (i.e. neither size nor IOPS can be marked as custom) and when the resize >> method of the storage plug-in is invoked, it will have a chance to change >> the size and/or IOPS. >> >> I would say we should perform a bit of analysis in the CloudStack volume >> logic to NOT stop resize from being invoked on the storage plug-in IF the >> volume size is the same, but the IOPS are different. This way the volume >> can be online as long as the user is only changing the IOPS of the volume. >> >> I also think it's only a problem for XenServer for the VDI to have its >> size changed dynamically. >> >> I plan to draw a flowchart for this soon. Once I do that I think it will >> be easier to talk in detail. >> >> Thanks! >> >> >> On Thu, Jun 12, 2014 at 12:59 PM, Mike Tutkowski < >> mike.tutkow...@solidfire.com> wrote: >> >>> From what I understand about the resizeVolume API, to change the size of >>> a given volume, you must either: >>> >>> 1) pass in a new Disk Offering (if the current Disk Offering the volume >>> uses does not allow for a custom size) >>> >>> or >>> >>> 2) pass in the ID of the volume and a new size (if the current Disk >>> Offering the volume uses does allow for a custom size) >>> >>> Either way, if you are shrinking the volume's size, you then have to >>> pass in 'true' for the 'shrinkok' parameter. >>> >>> One thing we should do is support this same concept with IOPS. At the >>> time being, both Min and Max IOPS can be custom (set by user) or non custom >>> (set by admin). This is a direct parallel to custom size or non-custom >>> size. If the user is using a non-custom IOPS setting and wants to switch to >>> a custom IOPS setting, he should be able to do so by switching to a Disk >>> Offering with custom IOPS. Of course we should support doing this while the >>> volume is attached. >>> >>> If arbitrary key/value pairs can be associated with Disk Offerings, then >>> you should be able to get the new key/value pairs by switching to a new >>> Disk Offering. We'd want to allow this to work with the volume in the >>> attached state, as well. >>> >>> Perhaps we should allow this all to happen online (volume attached) >>> UNLESS doing what we're about to do will change the size of the volume. >>> Then we can fail the OP and tell them to detach the volume and re-run the >>> OP. >>> >>> What are you thoughts on that? >>> >>> Also, I think volumeResize only works for data disks at the time being. >>> >>> In my mind, volumeResize is a bit of a misnomer now. We are really >>> allowing the user to resize their Disk Offering now in terms of not only >>> size, but IOPS, and even arbitrary key/value pairs. This is still all done >>> by selecting a new Disk Offering (or - if you have a custom size or custom >>> IOPS disk offering already - by passing in the ID of the volume and the new >>> size and/or IOPS). >>> >>> Let's brainstorm on this a bit and see which way makes sense to go. >>> >>> Thanks! >>> >>> >>> On Thu, Jun 12, 2014 at 9:48 AM, Punith S <punit...@cloudbyte.com> >>> wrote: >>> >>>> sure mike. >>>> >>>> and i have one question, >>>> >>>> which existing volume api are we gonna use for changing disk >>>> offerings(properties) dynamically ? >>>> since resize api will not allow unless the disk is detached ! >>>> >>>> thanks. >>>> >>>> >>>> On Thu, Jun 12, 2014 at 11:37 AM, Mike Tutkowski < >>>> mike.tutkow...@solidfire.com> wrote: >>>> >>>>> Sounds good - let me give some thought as to how we should break up >>>>> the work. >>>>> >>>>> My GSoC student from Tunisia will be helping us, as well. >>>>> >>>>> >>>>> On Wed, Jun 11, 2014 at 8:34 AM, Punith S <punit...@cloudbyte.com> >>>>> wrote: >>>>> >>>>>> yes it sounds good, thanks for the proposal mike, >>>>>> >>>>>> yeah right now i have implemented prototype of my proposal, since its >>>>>> not generic we shall implement your proposal for 4.5. >>>>>> on the other hand, for 4.5 i'm supporting nfs protocol and resize >>>>>> feature for managed storage in xenserver, now trying to implement >>>>>> snapshot >>>>>> and support root disk for vm's. >>>>>> and yes if we can club together, i can start working on this proposal >>>>>> for data disk and get the prototype ready. >>>>>> what do you think ? >>>>>> >>>>>> thanks. >>>>>> >>>>>> >>>>>> On Wed, Jun 11, 2014 at 3:53 AM, Mike Tutkowski < >>>>>> mike.tutkow...@solidfire.com> wrote: >>>>>> >>>>>>> I'll send out a [PROPOSAL] e-mail so others who may not be following >>>>>>> this e-mail thread have a better chance to comment on the feature. >>>>>>> >>>>>>> >>>>>>> On Tue, Jun 10, 2014 at 2:58 PM, Mike Tutkowski < >>>>>>> mike.tutkow...@solidfire.com> wrote: >>>>>>> >>>>>>>> Here is that design document I was referring to, Punith: >>>>>>>> >>>>>>>> >>>>>>>> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=42566111 >>>>>>>> >>>>>>>> I've been working with a student in Tunisia who is participating in >>>>>>>> Google Summer of Code (GSoC) (I'm his mentor). >>>>>>>> >>>>>>>> He'll be working on part of this as will I. (He is also working on >>>>>>>> another related task not listed here.) >>>>>>>> >>>>>>>> Feel free to join us, if you have time available, as we can divide >>>>>>>> out coding and testing among the three of us. >>>>>>>> >>>>>>>> Talk to you later! >>>>>>>> Mike >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Jun 10, 2014 at 10:18 AM, Mike Tutkowski < >>>>>>>> mike.tutkow...@solidfire.com> wrote: >>>>>>>> >>>>>>>>> I plan to draw up a design document surrounding generic key/value >>>>>>>>> pairs today. >>>>>>>>> >>>>>>>>> Perhaps you can take a look at it when you have time, Punith? >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tue, Jun 10, 2014 at 10:06 AM, Mike Tutkowski < >>>>>>>>> mike.tutkow...@solidfire.com> wrote: >>>>>>>>> >>>>>>>>>> Hi Punith, >>>>>>>>>> >>>>>>>>>> Yeah, I hear you about the number of permutations involved. >>>>>>>>>> >>>>>>>>>> Traditionally Compute and Disk Offerings have been immutable. It >>>>>>>>>> makes it easier from an accounting point of view for chargeback and >>>>>>>>>> billing. >>>>>>>>>> >>>>>>>>>> You should definitely feel free to extend the CloudStack API. I >>>>>>>>>> think NetApp did this for one of their storage features in the >>>>>>>>>> recent past. >>>>>>>>>> This way vendor-specific capabilities can be more easily offered >>>>>>>>>> without >>>>>>>>>> making it look like all vendors support those particular features. >>>>>>>>>> >>>>>>>>>> I do not yet have any code in master related to generic >>>>>>>>>> keys/values. I'm still designing this. >>>>>>>>>> >>>>>>>>>> How does your schedule look for the 4.5 release? Do you think you >>>>>>>>>> might have available cycles to help out with this generic key/value >>>>>>>>>> implementation? >>>>>>>>>> >>>>>>>>>> Talk to you later! >>>>>>>>>> Mike >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Tue, Jun 10, 2014 at 7:09 AM, Punith S <punit...@cloudbyte.com >>>>>>>>>> > wrote: >>>>>>>>>> >>>>>>>>>>> hi mike, >>>>>>>>>>> >>>>>>>>>>> thanks for the reply, i like your approach which is a very >>>>>>>>>>> generic way and also we only need to do a few changes to the current >>>>>>>>>>> cloudstack, >>>>>>>>>>> >>>>>>>>>>> but on the other hand we are tying every property of the vendor >>>>>>>>>>> to a disk offering through key/value pairs, since we offer lot of >>>>>>>>>>> properties like i mentioned, this can create a lot of permutation >>>>>>>>>>> combinations of disk offerings, for say if i need to turn >>>>>>>>>>> deduplication On >>>>>>>>>>> for a specific volume , should i have to create a new disk offering >>>>>>>>>>> having >>>>>>>>>>> current properties with deduplication On? >>>>>>>>>>> >>>>>>>>>>> is this approach already implemented in the current master ? >>>>>>>>>>> >>>>>>>>>>> and also like you mentioned about exposing a new api, is it okay >>>>>>>>>>> if i expose our own api in my util by extending the PlugableService >>>>>>>>>>> like in >>>>>>>>>>> network plugins ? >>>>>>>>>>> >>>>>>>>>>> thanks. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Tue, Jun 10, 2014 at 1:17 AM, Mike Tutkowski < >>>>>>>>>>> mike.tutkow...@solidfire.com> wrote: >>>>>>>>>>> >>>>>>>>>>>> Allow me to follow this up with more detail (with regards to >>>>>>>>>>>> what Chris and I talked about): >>>>>>>>>>>> >>>>>>>>>>>> As you are aware, today the way you associate a Compute >>>>>>>>>>>> Offering (CO) or a Disk Offering (DO) with a Primary Storage (PS) >>>>>>>>>>>> is via >>>>>>>>>>>> storage tagging. >>>>>>>>>>>> >>>>>>>>>>>> This has some benefits and drawbacks. >>>>>>>>>>>> >>>>>>>>>>>> One benefit is being able to have some level of vendor >>>>>>>>>>>> independence from the point of view of the CO or DO. For example, >>>>>>>>>>>> if the >>>>>>>>>>>> storage tag of a DO is "Fast", then this can be satisfied by PS >>>>>>>>>>>> that >>>>>>>>>>>> describes itself as "Fast", regardless of vendor. >>>>>>>>>>>> >>>>>>>>>>>> A major drawback with the storage-tagging approach, however, is >>>>>>>>>>>> that you are not easily able to leverage vendor-specific features, >>>>>>>>>>>> which is >>>>>>>>>>>> often why you bought storage from the vendor in question to begin >>>>>>>>>>>> with. >>>>>>>>>>>> >>>>>>>>>>>> Ideally we do not want to add each vendor's features into the >>>>>>>>>>>> system as properties that can be seen by the admin regardless of >>>>>>>>>>>> whether or >>>>>>>>>>>> not the underlying storage he's actually using supports the >>>>>>>>>>>> feature in >>>>>>>>>>>> question. >>>>>>>>>>>> >>>>>>>>>>>> This coarse approach, however, was sort of business as usual >>>>>>>>>>>> when I started in with CloudStack 1.5 years ago. >>>>>>>>>>>> >>>>>>>>>>>> That being the case, when I added QoS options to CS, I did so >>>>>>>>>>>> in a way where the admin would see Min IOPS and Max IOPS options >>>>>>>>>>>> regardless >>>>>>>>>>>> of whether or not his storage actually supported those controls (to >>>>>>>>>>>> mitigate this a bit in the GUI, the admin has to explicitly select >>>>>>>>>>>> "Storage >>>>>>>>>>>> QoS" from a combobox). >>>>>>>>>>>> >>>>>>>>>>>> We leverage the same use model with Hypervisor QoS: The admin >>>>>>>>>>>> sees these options regardless of whether or not they actually >>>>>>>>>>>> apply on the >>>>>>>>>>>> hypervisor where the VM gets deployed. >>>>>>>>>>>> >>>>>>>>>>>> Going forward, we want to implement a more fine-grain and >>>>>>>>>>>> generic approach. >>>>>>>>>>>> >>>>>>>>>>>> We would like to have a storage provider field for the CO and >>>>>>>>>>>> DO windows (this equates to the name of one and only one storage >>>>>>>>>>>> provider). >>>>>>>>>>>> If the admin inputs a specific storage provider and does not use >>>>>>>>>>>> the >>>>>>>>>>>> storage tags field, he can enter in an arbitrary number of >>>>>>>>>>>> key/value pairs >>>>>>>>>>>> in another text field (perhaps we would provide a nice entry >>>>>>>>>>>> dialog to make >>>>>>>>>>>> this easier in the GUI). These key value pairs can be passed into >>>>>>>>>>>> the >>>>>>>>>>>> storage driver when it's asked to create (or update) a volume and >>>>>>>>>>>> the >>>>>>>>>>>> storage driver can decide what each and every key/value pair means. >>>>>>>>>>>> >>>>>>>>>>>> What do you think about this approach? >>>>>>>>>>>> >>>>>>>>>>>> Thanks >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Mon, Jun 9, 2014 at 1:14 PM, Mike Tutkowski < >>>>>>>>>>>> mike.tutkow...@solidfire.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Punith, >>>>>>>>>>>>> >>>>>>>>>>>>> This kind of a feature is something Chris Suich and I >>>>>>>>>>>>> discussed a while back. >>>>>>>>>>>>> >>>>>>>>>>>>> We talked about leveraging arbitrary key/value pairs to make >>>>>>>>>>>>> this happen (OpenStack does something similar). The key/value >>>>>>>>>>>>> pairs would >>>>>>>>>>>>> be vendor specific. >>>>>>>>>>>>> >>>>>>>>>>>>> If we take a key/value approach, we might be able to make this >>>>>>>>>>>>> all work the way things work today when the user wants to change >>>>>>>>>>>>> an >>>>>>>>>>>>> existing Compute Offering and/or Disk Offering. >>>>>>>>>>>>> >>>>>>>>>>>>> For example, the user would pick a new Compute Offering (with >>>>>>>>>>>>> presumably has different key/value pairs) and CloudStack could >>>>>>>>>>>>> inform the >>>>>>>>>>>>> applicable storage provider, who could update the volume in >>>>>>>>>>>>> question. >>>>>>>>>>>>> >>>>>>>>>>>>> This way we don't need to introduce a new API command and the >>>>>>>>>>>>> use model for the user doesn't really change. >>>>>>>>>>>>> >>>>>>>>>>>>> What are you thoughts on this? >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks, >>>>>>>>>>>>> Mike >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Mon, Jun 9, 2014 at 8:08 AM, Punith S < >>>>>>>>>>>>> punit...@cloudbyte.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> hi guys, >>>>>>>>>>>>>> >>>>>>>>>>>>>> since most of the third party storage providers have been >>>>>>>>>>>>>> implementing 1:1 mapping(managed storage) between a >>>>>>>>>>>>>> volume(dataset) and a >>>>>>>>>>>>>> vm disk(vdi/vmdk) for guaranteeing the Qos, i would like to >>>>>>>>>>>>>> propose a new >>>>>>>>>>>>>> feature to dynamically change the volume properties supported by >>>>>>>>>>>>>> storage >>>>>>>>>>>>>> vendors such as IOPS, Deduplication, Compression, Grace, >>>>>>>>>>>>>> Syncronization, >>>>>>>>>>>>>> Latency etc, depending on properties and features supported by >>>>>>>>>>>>>> respective >>>>>>>>>>>>>> storage vendors. hence providing more flexibility for users. >>>>>>>>>>>>>> >>>>>>>>>>>>>> in case of using default cloudstack storage provider, we can >>>>>>>>>>>>>> change the properties of the vdi/vmdk files apart from resizing >>>>>>>>>>>>>> the >>>>>>>>>>>>>> volume(vdi/vmdk). >>>>>>>>>>>>>> >>>>>>>>>>>>>> changes in management server include, >>>>>>>>>>>>>> >>>>>>>>>>>>>> new async web api ChangeVolumePropertiesCmd, >>>>>>>>>>>>>> new method in VolumeApiService for vo and dao validation >>>>>>>>>>>>>> implementations. >>>>>>>>>>>>>> new method in VolumeServiceManager for supporting callback >>>>>>>>>>>>>> and calling the respective storage provider driver's >>>>>>>>>>>>>> implementation. >>>>>>>>>>>>>> new method in PrimaryDataStoreDriver interface for >>>>>>>>>>>>>> implementing respective features according to their storage >>>>>>>>>>>>>> product. >>>>>>>>>>>>>> >>>>>>>>>>>>>> changes in UI include, >>>>>>>>>>>>>> new changing volume properties widget in volume section, >>>>>>>>>>>>>> showing different properties depending upon listed storage >>>>>>>>>>>>>> providers. >>>>>>>>>>>>>> >>>>>>>>>>>>>> any suggestions and feedbacks ? >>>>>>>>>>>>>> >>>>>>>>>>>>>> thanks >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> regards, >>>>>>>>>>>>>> >>>>>>>>>>>>>> punith s >>>>>>>>>>>>>> cloudbyte.com >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> *Mike Tutkowski* >>>>>>>>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>>>>>>>>>> e: mike.tutkow...@solidfire.com >>>>>>>>>>>>> o: 303.746.7302 >>>>>>>>>>>>> Advancing the way the world uses the cloud >>>>>>>>>>>>> <http://solidfire.com/solution/overview/?video=play>*™* >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> *Mike Tutkowski* >>>>>>>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>>>>>>>>> e: mike.tutkow...@solidfire.com >>>>>>>>>>>> o: 303.746.7302 >>>>>>>>>>>> Advancing the way the world uses the cloud >>>>>>>>>>>> <http://solidfire.com/solution/overview/?video=play>*™* >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> regards, >>>>>>>>>>> >>>>>>>>>>> punith s >>>>>>>>>>> cloudbyte.com >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> *Mike Tutkowski* >>>>>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>>>>>>> e: mike.tutkow...@solidfire.com >>>>>>>>>> o: 303.746.7302 >>>>>>>>>> Advancing the way the world uses the cloud >>>>>>>>>> <http://solidfire.com/solution/overview/?video=play>*™* >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> *Mike Tutkowski* >>>>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>>>>>> e: mike.tutkow...@solidfire.com >>>>>>>>> o: 303.746.7302 >>>>>>>>> Advancing the way the world uses the cloud >>>>>>>>> <http://solidfire.com/solution/overview/?video=play>*™* >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> *Mike Tutkowski* >>>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>>>>> e: mike.tutkow...@solidfire.com >>>>>>>> o: 303.746.7302 >>>>>>>> Advancing the way the world uses the cloud >>>>>>>> <http://solidfire.com/solution/overview/?video=play>*™* >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> *Mike Tutkowski* >>>>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>>>> e: mike.tutkow...@solidfire.com >>>>>>> o: 303.746.7302 >>>>>>> Advancing the way the world uses the cloud >>>>>>> <http://solidfire.com/solution/overview/?video=play>*™* >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> regards, >>>>>> >>>>>> punith s >>>>>> cloudbyte.com >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> *Mike Tutkowski* >>>>> *Senior CloudStack Developer, SolidFire Inc.* >>>>> e: mike.tutkow...@solidfire.com >>>>> o: 303.746.7302 >>>>> Advancing the way the world uses the cloud >>>>> <http://solidfire.com/solution/overview/?video=play>*™* >>>>> >>>> >>>> >>>> >>>> -- >>>> regards, >>>> >>>> punith s >>>> cloudbyte.com >>>> >>> >>> >>> >>> -- >>> *Mike Tutkowski* >>> *Senior CloudStack Developer, SolidFire Inc.* >>> e: mike.tutkow...@solidfire.com >>> o: 303.746.7302 >>> Advancing the way the world uses the cloud >>> <http://solidfire.com/solution/overview/?video=play>*™* >>> >> >> >> >> -- >> *Mike Tutkowski* >> *Senior CloudStack Developer, SolidFire Inc.* >> e: mike.tutkow...@solidfire.com >> o: 303.746.7302 >> Advancing the way the world uses the cloud >> <http://solidfire.com/solution/overview/?video=play>*™* >> > > > > -- > *Mike Tutkowski* > *Senior CloudStack Developer, SolidFire Inc.* > e: mike.tutkow...@solidfire.com > o: 303.746.7302 > Advancing the way the world uses the cloud > <http://solidfire.com/solution/overview/?video=play>*™* >