> -----Original Message----- > From: Marcus Sorensen [mailto:shadow...@gmail.com] > Sent: Friday, September 21, 2012 4:47 PM > To: cloudstack-dev@incubator.apache.org > Subject: Re: Review Request: resize volume initial implementation > > When you create an offering, you can select 'custom disk size' in the > offering, allowing the user to specify a size. It's possible that the > data disk was created with custom offering, so this particular > offering is not bound to a particular size and it would seem that > we're free to resize without switching between offerings. They also > may be trying to go between a custom and a static sized offering.
As long as we don't directly use diskoffering.getsize() as the volume size in the code(there is only one place storagemanagerImpl->movevolume), it's ok for me. > > On Fri, Sep 21, 2012 at 5:23 PM, Edison Su <edison...@citrix.com> wrote: > > > > > >> -----Original Message----- > >> From: Marcus Sorensen [mailto:shadow...@gmail.com] > >> Sent: Friday, September 21, 2012 8:34 AM > >> To: cloudstack-dev@incubator.apache.org > >> Subject: Re: Review Request: resize volume initial implementation > >> > >> Yeah, that was the point. If people are charging a price based on > disk > >> offering, then we don't want users creating any disk offering they > >> want. Isn't that the reason for disk offering? > >> > >> I guess if root admin can only create disk offerings, then the > >> proposal is correct, since we don't want to let users get around > that > >> by resize creating a disk offering. In the end users should only > ever > >> be able to have disks of sizes that the admin offers and should not > be > >> able to define offerings. > >> > >> So here is my new proposal logic: > >> > >> * Only resize data disks > >> > >> * resize based on an offering id, or size if custom offering > > > > What's the "custom offering" mean? Variable size? To make it simple, > how about just based on an offering id? > > > >> > >> * if current offering is custom sized, allow resize by simply > passing a > >> size > >> > >> * ok to migrate from custom offering to static size offering based > on > >> offerings available > >> > >> * ok to migrate from static size offering to custom size offering > >> based on offerings available > >> > >> * tags must match between old/new offerings > >> > >> * if migrating to a custom size, size MUST be passed > >> > >> On Fri, Sep 21, 2012 at 1:16 AM, Edison Su <edison...@citrix.com> > wrote: > >> > root admin defines the disk offerings that user can use. So user > can > >> only upgrade or downgrade disk offering to whatever admin defines. > It > >> is not flexible enough, but seems working. > >> > Only resize data disk is enough, I think. It's easy to recreate a > >> root disk than a data disk(copying a data on a big data disk to > another > >> place takes time, recreate a root disk is fast). If this assumption > is > >> valid, we can conclude that user may not want to recreate data disk > >> just because current data disk offering is too large or small. > >> > My 0.2$ > >> > > >> > Sent from my iPhone > >> > > >> > On Sep 20, 2012, at 8:57 PM, "Marcus Sorensen" > <shadow...@gmail.com> > >> wrote: > >> > > >> >> How about root volumes, maybe just leave those for root admin to > be > >> >> able to resize? Or leave them off altogether? > >> >> > >> >> On Thu, Sep 20, 2012 at 8:07 PM, Marcus Sorensen > >> <shadow...@gmail.com> wrote: > >> >>> OK, that has me thinking... so the existing implementation can > be > >> valid for > >> >>> offerings of custom size (the only time you would pass a size). > >> >>> > >> >>> Otherwise you just pass the resize API call a new disk offering, > >> and we make > >> >>> sure the tags are the same. This way people are still in control > of > >> which > >> >>> offerings are available and users can only resize between what > is > >> offered. > >> >>> But they will be required to create any offerings themselves. > >> >>> > >> >>> On Sep 20, 2012 7:50 PM, "Edison Su" <edison...@citrix.com> > wrote: > >> >>>> > >> >>>> > >> >>>> > >> >>>>> -----Original Message----- > >> >>>>> From: Marcus Sorensen [mailto:shadow...@gmail.com] > >> >>>>> Sent: Monday, September 17, 2012 8:54 AM > >> >>>>> To: cloudstack-dev@incubator.apache.org > >> >>>>> Subject: Re: Review Request: resize volume initial > implementation > >> >>>>> > >> >>>>> Just forwarded this because I realized I didn't reply all. > >> >>>>> > >> >>>>> We can create a new property for service offerings, a > 'resizable' > >> >>>>> checkbox. That will likely require a database schema change, > and > >> I'll > >> >>>>> need some help with that. > >> >>>>> > >> >>>>> Alternatively, we could check and only allow resizing on disk > >> >>>>> offerings that are of custom size. > >> >>>>> > >> >>>>> These will sort of suck for people who haven't planned well, > but > >> it > >> >>>>> keeps the resize feature from breaking what seems to be part > of > >> the > >> >>>>> point of the disk service offerings, which is to allow people > to > >> offer > >> >>>>> and bill for packaged storage sizes. > >> >>>> > >> >>>> How about use the following api call to change size of volume: > >> >>>> 1. create a new disk offering with a new size > >> >>>> 2. upgrade disk offering of a volume with the new disk offering. > >> If the > >> >>>> disk size is different, then resize the volume. > >> >>>> > >> >>>>> > >> >>>>> > >> >>>>> > >> >>>>> On Mon, Sep 17, 2012 at 9:42 AM, Marcus Sorensen > >> <shadow...@gmail.com> > >> >>>>> wrote: > >> >>>>>> ---------- Forwarded message ---------- > >> >>>>>> From: Marcus Sorensen <shadow...@gmail.com> > >> >>>>>> Date: Fri, Sep 14, 2012 at 8:17 AM > >> >>>>>> Subject: RE: Review Request: resize volume initial > >> implementation > >> >>>>>> To: Koushik Das <koushik....@citrix.com> > >> >>>>>> > >> >>>>>> > >> >>>>>> Thanks! Replies below. > >> >>>>>> > >> >>>>>> On Sep 14, 2012 4:12 AM, "Koushik Das" > <koushik....@citrix.com> > >> wrote: > >> >>>>>>> > >> >>>>>>> Some comments inline. > >> >>>>>>> > >> >>>>>>> -----Original Message----- > >> >>>>>>> From: Marcus Sorensen [mailto:nore...@reviews.apache.org] On > >> Behalf > >> >>>>> Of Marcus Sorensen > >> >>>>>>> Sent: Friday, September 14, 2012 6:09 AM > >> >>>>>>> To: Marcus Sorensen; cloudstack > >> >>>>>>> Subject: Review Request: resize volume initial > implementation > >> >>>>>>> > >> >>>>>>> > >> >>>>>>> ----------------------------------------------------------- > >> >>>>>>> This is an automatically generated e-mail. To reply, visit: > >> >>>>>>> https://reviews.apache.org/r/7099/ > >> >>>>>>> ----------------------------------------------------------- > >> >>>>>>> > >> >>>>>>> Review request for cloudstack. > >> >>>>>>> > >> >>>>>>> > >> >>>>>>> Description > >> >>>>>>> ------- > >> >>>>>>> > >> >>>>>>> Initial implementation of resize volumes. Works only for KVM > >> but can > >> >>>>> be easily used to add in other hypervisors. Works with > >> >>>>> local,sharedmountpoint,NFS,and CLVM storage. This is a > >> significant > >> >>>>> chunk of code and my first attempt at a new API call so please > >> let me > >> >>>>> know if there are any issues with where/how things are done. > >> >>>>>>> > >> >>>>>>> This KVM implementation includes a host script > >> "resizevolume.sh" > >> >>>>> because of several current limitations. 1) we don't seem to > have > >> java > >> >>>>> bindings for virStorageVolResize() or virDomainBlockResize(), > and > >> even > >> >>>>> if we did, virStorageVolResize() doesn't work for logical > volume > >> pools. > >> >>>>> It will presumably be awhile before that's patched and > available > >> on > >> >>>>> current distros. > >> >>>>>>> > >> >>>>>>> New API call is 'resizeVolume', with parameters: > >> >>>>>>> > >> >>>>>>> 'id' for volume id > >> >>>>>>> > >> >>>>>>> 'size' for new size, accepts things like 10G, 10240M, > 10485760K, > >> >>>>> 10737418240B or 10737418240 > >> >>>>>>> [Koushik] Should this be the delta instead of the new size? > >> >>>>>> > >> >>>>>> I like working in absolutes personally. A developer could > make > >> their > >> >>>>>> interface present deltas to the user. Actually there's no > reason > >> not > >> >>>>>> to accept either, I could do + for grow, - for shrink, and > >> neither > >> >>>>> for > >> >>>>>> absolute. > >> >>>>>> > >> >>>>>>> > >> >>>>>>> 'shrinkok' this one is a boolean that confirms the user is > ok > >> with > >> >>>>> the volume shrinking. I did this because it seems reasonable > that > >> >>>>> someone might want to give back storage, and since it's > >> potentially > >> >>>>> dangerous (users need to free up the end of the block device > that > >> they > >> >>>>> want to give back) there needs to be some sort of signoff. > This > >> can be > >> >>>>> disabled/removed if others think it's too much of a liability. > >> The code > >> >>>>> checks size twice, comparing the requested size once against > what > >> we > >> >>>>> think the volume size is per database, and once again > comparing > >> the > >> >>>>> actual qcow2/lv size against the requested size, both times > >> ensuring > >> >>>>> that shrinkok is true before continuing. > >> >>>>>>> [Koushik] I think this should be provided only if the volume > is > >> >>>>> usable after shrinking it. Also rather than asking user to > >> free/compact > >> >>>>> data it will be good if CS does the same using some tool. > >> >>>>>> > >> >>>>>> Both the qcow2 and lvm (raw) are usable after shrink, > provided > >> the > >> >>>>>> necessary precautions are taken to evacuate the end of the > >> device. I > >> >>>>>> think it would be fairly difficult to free up the space on > our > >> own as > >> >>>>>> the user could do any number of things with a volume. > >> >>>>>> > >> >>>>>>> > >> >>>>>>> If the resize succeeds, but libvirt fails to live update > qemu > >> of the > >> >>>>> new size (whether due to bug, non-virtio disks, or something > >> else), > >> >>>>> there's currently no indication other than that the API call > >> returns > >> >>>>> the new size as seen from libvirt, which itself should be an > >> indication > >> >>>>> that a powercycle is needed if the API call succeeds, the size > is > >> what > >> >>>>> was requested, and the host isn't seeing the new size. Perhaps > a > >> field > >> >>>>> should be added, like 'rebootrequired:true' to make it easy. > >> >>>>>>> > >> >>>>>>> One thing I haven't tackled at all is how to handle the > service > >> >>>>> offering fields. If someone has a service offering with a > static > >> 5GB > >> >>>>> discription like the default storage offerings have, that > won't > >> change. > >> >>>>> Suggestions welcome. Should we update the service offering to > >> custom, > >> >>>>> or could that mess up other things like tags? > >> >>>>>>> [Koushik] Some compute/disk offering can be created with a > >> range for > >> >>>>> disk size (low value, high value). As long as the resize > doesn't > >> result > >> >>>>> in going out of range, it should be allowed. > >> >>>>>> > >> >>>>>> So you're saying that only certain disk offerings should > allow > >> resize? > >> >>>>>> We'd need to add properties to the disk offerings, but that > >> should be > >> >>>>>> doable. I think it would cause problems though because few > >> people > >> >>>>>> think much about wanting to resize initially. I know for us > it's > >> >>>>>> mainly driven by wanting variable sized root disks (no > service > >> >>>>>> offering, correct?) and small templates. > >> >>>>>> > >> >>>>>>> > >> >>>>>>> Diffs > >> >>>>>>> ----- > >> >>>>>>> > >> >>>>>>> api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java > >> >>>>> e69de29 > >> >>>>>>> > api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java > >> >>>>> e69de29 > >> >>>>>>> api/src/com/cloud/api/ApiConstants.java 067ddf7 > >> >>>>>>> api/src/com/cloud/api/commands/ResizeVolumeCmd.java e69de29 > >> >>>>>>> api/src/com/cloud/event/EventTypes.java e84a403 > >> >>>>>>> api/src/com/cloud/storage/StorageService.java 4fb3b55 > >> >>>>>>> api/src/com/cloud/storage/Volume.java 6e8e48e > >> >>>>>>> client/tomcatconf/commands.properties.in e233694 > >> >>>>>>> > >> >>>>> > >> > plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtCo > >> >>>>> mputingResource.java 9312519 > >> >>>>>>> scripts/storage/qcow2/resizevolume.sh e69de29 > >> >>>>>>> server/src/com/cloud/storage/StorageManagerImpl.java > 83b2846 > >> >>>>>>> > >> >>>>>>> Diff: https://reviews.apache.org/r/7099/diff/ > >> >>>>>>> > >> >>>>>>> > >> >>>>>>> Testing > >> >>>>>>> ------- > >> >>>>>>> > >> >>>>>>> Tested CLVM,NFS,local,sharedmountpoint, qcow2 and lvm > formats > >> >>>>>>> > >> >>>>>>> create test volumes on above listed pools, attach to VM > >> instance > >> >>>>>>> > >> >>>>>>> within instance, format as ext4, populate with files, grow, > >> resize > >> >>>>> filesystem: pass > >> >>>>>>> > >> >>>>>>> within instance, format as ext4, populate with files, shrink > >> >>>>> filesystem, shrink volume, unmount, fsck, remount: pass > >> >>>>>>> > >> >>>>>>> try passing bad arguments to API call fails as expected > >> >>>>>>> > >> >>>>>>> try resizing as wrong user fails as expected > >> >>>>>>> > >> >>>>>>> force resizevolume.sh to fail through various means bubbles > the > >> >>>>> error up as expected, resets the volume state to Ready > >> >>>>>>> > >> >>>>>>> > >> >>>>>>> Thanks, > >> >>>>>>> > >> >>>>>>> Marcus Sorensen > >> >>>>>>>