"As I mentioned previously, I am very reluctant for any feature to come
into master that can exhaust resources."

Just wanted to mention that, worst case, the SAN would fail creation of the
volume before allowing a new volume to break the system.


On Fri, Jun 14, 2013 at 11:35 AM, Mike Tutkowski <
mike.tutkow...@solidfire.com> wrote:

> Hi John,
>
> Are you thinking we add a column on to the storage pool table, IOPS_Count,
> where we add and subtract committed IOPS?
>
> That is easy enough.
>
> How do you want to determine what the SAN is capable of supporting IOPS
> wise? Remember we're dealing with a dynamic SAN here...as you add storage
> nodes to the cluster, the number of IOPS increases. Do we have a thread we
> can use to query external devices like this SAN to update the supported
> number of IOPS?
>
> Also, how do you want to enforce the IOPS limit? Do we pass in an
> overcommit ration to the plug-in when it's created? We would need to store
> this in the storage_pool table, as well, I believe.
>
> We should also get Wei involved in this as his feature will need similar
> functionality.
>
> Also, we should do this FAST as we have only two weeks left and many of us
> will be out for several days for the CS Collab Conference.
>
> Thanks
>
>
> On Fri, Jun 14, 2013 at 10:46 AM, John Burwell <jburw...@basho.com> wrote:
>
>> Mike,
>>
>> Querying the SAN only indicates the number of IOPS currently in use.  The
>> allocator needs to check the number of IOPS committed which is tracked by
>> CloudStack.  For 4.2, we should be able to query the number of IOPS
>> committed to a DataStore, and determine whether or not the number requested
>> can be fulfilled by that device.  It seems to be that a
>> DataStore#getCommittedIOPS() : Long method would be sufficient.
>>  DataStore's that don't support provisioned IOPS would return null.
>>
>> As I mentioned previously, I am very reluctant for any feature to come
>> into master that can exhaust resources.
>>
>> Thanks,
>> -John
>>
>> On Jun 13, 2013, at 9:27 PM, Mike Tutkowski <mike.tutkow...@solidfire.com>
>> wrote:
>>
>> > Yeah, I'm not sure I could come up with anything near an accurate
>> > assessment of how many IOPS are currently available on the SAN (or even
>> a
>> > total number that are available for volumes). Not sure if there's yet an
>> > API call for that.
>> >
>> > If I did know this number (total number of IOPS supported by the SAN),
>> we'd
>> > still have to keep track of the total number of volumes we've created
>> from
>> > CS on the SAN in terms of their IOPS. Also, if an admin issues an API
>> call
>> > directly to the SAN to tweak the number of IOPS on a given volume or
>> set of
>> > volumes (not supported from CS, but supported via the SolidFire API),
>> our
>> > numbers in CS would be off.
>> >
>> > I'm thinking verifying sufficient number of IOPS is a really good idea
>> for
>> > a future release.
>> >
>> > For 4.2 I think we should stick to having the allocator detect if
>> storage
>> > QoS is desired and if the storage pool in question supports that
>> feature.
>> >
>> > If you really are over provisioned on your SAN in terms of IOPS or
>> > capacity, the SAN can let the admin know in several different ways
>> (e-mail,
>> > SNMP, GUI).
>> >
>> >
>> > On Thu, Jun 13, 2013 at 7:02 PM, John Burwell <jburw...@basho.com>
>> wrote:
>> >
>> >> Mike,
>> >>
>> >> Please see my comments in-line below.
>> >>
>> >> Thanks,
>> >> -John
>> >>
>> >> On Jun 13, 2013, at 6:09 PM, Mike Tutkowski <
>> mike.tutkow...@solidfire.com>
>> >> wrote:
>> >>
>> >>> Comments below in red.
>> >>>
>> >>> Thanks
>> >>>
>> >>>
>> >>> On Thu, Jun 13, 2013 at 3:58 PM, John Burwell <jburw...@basho.com>
>> >> wrote:
>> >>>
>> >>>> Mike,
>> >>>>
>> >>>> Overall, I agree with the steps to below for 4.2.  However, we may
>> want
>> >> to
>> >>>> throw an exception if we can not fulfill a requested QoS.  If the
>> user
>> >> is
>> >>>> expecting that the hypervisor will provide a particular QoS, and
>> that is
>> >>>> not possible, it seems like we should inform them rather than
>> silently
>> >>>> ignoring their request.
>> >>>>
>> >>>
>> >>> Sure, that sounds reasonable.
>> >>>
>> >>> We'd have to come up with some way for the allocators to know about
>> the
>> >>> requested storage QoS and then query the candidate drivers.
>> >>>
>> >>> Any thoughts on how we might do that?
>> >>>
>> >>>
>> >>>>
>> >>>> To collect my thoughts from previous parts of the thread, I am
>> >>>> uncomfortable with the idea that the management server can
>> overcommit a
>> >>>> resource.  You had mentioned querying the device for available IOPS.
>> >> While
>> >>>> that would be nice, it seems like we could fall back to a max IOPS
>> and
>> >>>> overcommit factor manually calculated and entered by the
>> >>>> administrator/operator.  I think such threshold and allocation rails
>> >> should
>> >>>> be added for both provisioned IOPS and throttled I/O -- it is a basic
>> >>>> feature of any cloud orchestration platform.
>> >>>>
>> >>>
>> >>> Are you thinking this ability would make it into 4.2? Just curious
>> what
>> >>> release we're talking about here. For the SolidFire SAN, you might
>> have,
>> >>> say, four separate storage nodes to start (200,000 IOPS) and then
>> later
>> >> add
>> >>> a new node (now you're at 250,000 IOPS). CS would have to have a way
>> to
>> >>> know that the number of supported IOPS has increased.
>> >>
>> >> Yes, I think we need some *basic*/conservative rails in 4.2.  For
>> example,
>> >> we may only support expanding capacity in 4.2, and not handle any
>> >> re-balance scenarios --  node failure, addition, etc.   Extrapolating a
>> >> bit, the throttled I/O enhancement seems like it needs a similar set of
>> >> rails defined per host.
>> >>
>> >>>
>> >>>
>> >>>>
>> >>>> For 4.3, I don't like the idea that a QoS would be expressed in a
>> >>>> implementation specific manner.  I think we need to arrive at a
>> general
>> >>>> model that can be exploited by the allocators and planners.  We
>> should
>> >>>> restrict implementation specific key-value pairs (call them details,
>> >>>> extended data, whatever) to information that is unique to the driver
>> and
>> >>>> would provide no useful information to the management server's
>> >>>> orchestration functions.  A resource QoS does not seem to fit those
>> >>>> criteria.
>> >>>>
>> >>>
>> >>> I wonder if this would be a good discussion topic for Sunday's CS
>> Collab
>> >>> Conf hack day that Joe just sent out an e-mail about?
>> >>
>> >> Yes, it would -- I will put something in the wiki topic.  It will also
>> be
>> >> part of my talk on Monday -- How to Run from Zombie which include some
>> of
>> >> my opinions on the topic.
>> >>
>> >>>
>> >>>
>> >>>>
>> >>>> Thanks,
>> >>>> -John
>> >>>>
>> >>>> On Jun 13, 2013, at 5:44 PM, Mike Tutkowski <
>> >> mike.tutkow...@solidfire.com>
>> >>>> wrote:
>> >>>>
>> >>>>> So, here's my suggestion for 4.2:
>> >>>>>
>> >>>>> Accept the values as they are currently required (four new fields
>> for
>> >>>> Wei's
>> >>>>> feature or two new fields for mine).
>> >>>>>
>> >>>>> The Add Disk Offering dialog needs three new radio buttons:
>> >>>>>
>> >>>>> 1) No QoS
>> >>>>>
>> >>>>> 2) Hypervisor QoS
>> >>>>>
>> >>>>> 3) Storage Qos
>> >>>>>
>> >>>>> The admin needs to specify storage tags that only map to storage
>> that
>> >>>>> supports Storage QoS.
>> >>>>>
>> >>>>> The admin needs to be aware for Hypervisor QoS that unless all
>> >>>> hypervisors
>> >>>>> in use support the new fields, they may not be enforced.
>> >>>>>
>> >>>>> Post 4.3:
>> >>>>>
>> >>>>> Come up with a way to more generally enter these parameters
>> (probably
>> >>>> just
>> >>>>> key/value pairs sent to the drivers).
>> >>>>>
>> >>>>> Have the drivers expose their feature set so the allocators can
>> >> consider
>> >>>>> them more fully and throw an exception if there is not a sufficient
>> >>>> match.
>> >>>>>
>> >>>>>
>> >>>>> On Thu, Jun 13, 2013 at 3:31 PM, Mike Tutkowski <
>> >>>>> mike.tutkow...@solidfire.com> wrote:
>> >>>>>
>> >>>>>> My thinking is, for 4.2, while not ideal, we will need to put some
>> >>>> burden
>> >>>>>> on the admin to configure a Disk Offering in a way that makes
>> sense.
>> >> For
>> >>>>>> example, if he wants to use storage QoS with supported Min and Max
>> >>>> values,
>> >>>>>> he'll have to put in a storage tag that references the SolidFire
>> >> primary
>> >>>>>> storage (plug-in). If he puts in a storage tag that doesn't, then
>> he's
>> >>>> not
>> >>>>>> going to get the Min and Max feature. We could add help text to the
>> >>>> pop-up
>> >>>>>> dialog that's displayed when you click in the Min and Max text
>> fields.
>> >>>>>>
>> >>>>>> Same idea for Wei's feature.
>> >>>>>>
>> >>>>>> Not idea, true...perhaps we can brainstorm on a more comprehensive
>> >>>>>> approach for post 4.2.
>> >>>>>>
>> >>>>>> Maybe in the future we could have the drivers advertise their
>> >>>> capabilities
>> >>>>>> and if the allocator feels a request is not being satisfied (say
>> Min
>> >> was
>> >>>>>> entered, but it not's supported by any storage plug-in) it can
>> throw
>> >> an
>> >>>>>> exception.
>> >>>>>>
>> >>>>>>
>> >>>>>> On Thu, Jun 13, 2013 at 3:19 PM, Mike Tutkowski <
>> >>>>>> mike.tutkow...@solidfire.com> wrote:
>> >>>>>>
>> >>>>>>> Comments below in red.
>> >>>>>>>
>> >>>>>>> Thanks
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> On Thu, Jun 13, 2013 at 2:54 PM, John Burwell <jburw...@basho.com
>> >
>> >>>> wrote:
>> >>>>>>>
>> >>>>>>>> Mike,
>> >>>>>>>>
>> >>>>>>>> Please see my comment in-line below.
>> >>>>>>>>
>> >>>>>>>> Thanks,
>> >>>>>>>> -John
>> >>>>>>>>
>> >>>>>>>> On Jun 13, 2013, at 1:22 AM, Mike Tutkowski <
>> >>>>>>>> mike.tutkow...@solidfire.com> wrote:
>> >>>>>>>>
>> >>>>>>>>> Hi John,
>> >>>>>>>>>
>> >>>>>>>>> I've put comments below in red.
>> >>>>>>>>>
>> >>>>>>>>> Thanks!
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> On Wed, Jun 12, 2013 at 10:51 PM, John Burwell <
>> jburw...@basho.com
>> >>>
>> >>>>>>>> wrote:
>> >>>>>>>>>
>> >>>>>>>>>> Mike,
>> >>>>>>>>>>
>> >>>>>>>>>> First and foremost, we must ensure that these two features are
>> >>>>>>>> mutually
>> >>>>>>>>>> exclusive in 4.2.  We don't want to find a configuration that
>> >>>>>>>> contains both
>> >>>>>>>>>> hypervisor and storage IOPS guarantees that leads to
>> >>>> non-deterministic
>> >>>>>>>>>> operations.
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> Agreed
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>> Restricting QoS expression to be either hypervisor or storage
>> >>>> oriented
>> >>>>>>>>>> solves the problem in short term.  As I understand storage
>> tags,
>> >> we
>> >>>>>>>> have no
>> >>>>>>>>>> means of expressing this type of mutual exclusion.  I wasn't
>> >>>>>>>> necessarily
>> >>>>>>>>>> intending that we implement this allocation model in 4.3, but
>> >>>> instead,
>> >>>>>>>>>> determine if this type model would be one we would want to
>> support
>> >>>> in
>> >>>>>>>> the
>> >>>>>>>>>> future.  If so, I would encourage us to ensure that the data
>> model
>> >>>> and
>> >>>>>>>>>> current implementation would not preclude evolution in that
>> >>>>>>>> direction.  My
>> >>>>>>>>>> view is that this type of allocation model is what user's
>> expect
>> >> of
>> >>>>>>>> "cloud"
>> >>>>>>>>>> systems -- selecting the best available resource set to
>> fulfill  a
>> >>>>>>>> set of
>> >>>>>>>>>> system requirements.
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> I believe we have meet your requirement here in that what we've
>> >>>>>>>> implemented
>> >>>>>>>>> should not make refinement difficult in the future. If we don't
>> >>>> modify
>> >>>>>>>>> allocators for 4.2, but we do for 4.3, we've made relatively
>> simple
>> >>>>>>>> changes
>> >>>>>>>>> to enhance the current functioning of the system.
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>> Looking through both patches, I have to say that the aggregated
>> >> result
>> >>>>>>>> seems a bit confusing.  There are six new attributes for
>> throttled
>> >>>> I/O and
>> >>>>>>>> two for provisioned IOPS with no obvious grouping.  My concern is
>> >> not
>> >>>>>>>> technical, but rather, about maintainability.   At minimum,
>> Javadoc
>> >>>> should
>> >>>>>>>> be added explaining the two sets of attributes and their mutual
>> >>>> exclusion.
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>> I agree: We need JavaDoc to explain them and their mutual
>> exclusion.
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>>
>> >>>>>>>> The other part that is interesting is that throttled I/O provides
>> >> both
>> >>>>>>>> an IOPS and byte measured QoS as a rate where provisioned IOPS
>> uses
>> >> a
>> >>>>>>>> range.  In order to select the best available resource to
>> fulfill a
>> >>>> QoS, we
>> >>>>>>>> would need to have the QoS expression normalized in terms of
>> units
>> >>>> (IOPS or
>> >>>>>>>> bytes) and their expression (rate vs. range).  If we want to
>> >> achieve a
>> >>>>>>>> model like I described, I think we would need to resolve this
>> issue
>> >>>> in 4.2
>> >>>>>>>> to ensure a viable migration path.
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> I think we're not likely to be able to normalize the input for
>> 4.2.
>> >>>> Plus
>> >>>>>>> people probably want to input the data in terms they're familiar
>> with
>> >>>> for
>> >>>>>>> the products in question.
>> >>>>>>>
>> >>>>>>> Ideally we would fix the way we do storage tagging and let the
>> user
>> >>>> send
>> >>>>>>> key/value pairs to each vendor that could be selected due to a
>> given
>> >>>>>>> storage tag. I'm still not sure that would solve it because what
>> >>>> happens if
>> >>>>>>> you change the storage tag of a given Primary Storage after having
>> >>>> created
>> >>>>>>> a Disk Offering?
>> >>>>>>>
>> >>>>>>> Basically storage tagging is kind of a mess and we should re-think
>> >> it.
>> >>>>>>>
>> >>>>>>> Also, we need to have a way for the drivers to expose their
>> supported
>> >>>>>>> feature sets so the allocators can make good choices.
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> As I think through the implications of these requirements and
>> >>>> reflect
>> >>>>>>>> on
>> >>>>>>>>>> the reviews, I don't understand why they haven't already
>> impacted
>> >>>> the
>> >>>>>>>>>> allocators and planners.  As it stands, the current provisioned
>> >> IOPS
>> >>>>>>>> has no
>> >>>>>>>>>> checks to ensure that the volumes are allocated to devices that
>> >> have
>> >>>>>>>>>> capacity to fulfill the requested QoS.  Therefore, as I
>> understand
>> >>>> the
>> >>>>>>>>>> current patch, we can overcommit storage resources --
>> potentially
>> >>>>>>>> causing
>> >>>>>>>>>> none of the QoS obligations from being fulfilled.  It seems to
>> me
>> >>>>>>>> that a
>> >>>>>>>>>> DataStore supporting provisioned IOPS should express the
>> maximum
>> >>>> IOPS
>> >>>>>>>> which
>> >>>>>>>>>> it can support and some type of overcommitment factor.  This
>> >>>>>>>> information
>> >>>>>>>>>> should be used by the storage allocators to determine the
>> device
>> >>>> best
>> >>>>>>>> able
>> >>>>>>>>>> to support the resources needs of a volume.  It seems that a
>> >> similar
>> >>>>>>>> set of
>> >>>>>>>>>> considerations would need to be added to the Hypervisor layer
>> >> which
>> >>>>>>>>>> allocating a VM to a host to prevent oversubscription.
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> Yeah, for this first release, we just followed the path that was
>> >>>>>>>> previously
>> >>>>>>>>> established for other properties you see on dialogs in CS: Just
>> >>>> because
>> >>>>>>>>> they're there doesn't mean the vendor your VM is deployed to
>> >> supports
>> >>>>>>>> them.
>> >>>>>>>>> It is then up to the admin to make sure he inputs, say, a
>> storage
>> >> tag
>> >>>>>>>> that
>> >>>>>>>>> confines the deployment only to storage that supports the
>> selected
>> >>>>>>>>> features. This is not ideal, but it's kind of the way CloudStack
>> >>>> works
>> >>>>>>>>> today.
>> >>>>>>>>
>> >>>>>>>> I understand the tag functionality, and the need for the
>> >> administrator
>> >>>>>>>> to very carefully construct offerings.  My concern is that we
>> over
>> >>>>>>>> guarantee a resource's available IOPS.  For the purposes of
>> >>>> illustration,
>> >>>>>>>> let's say we have a SolidFire, and the max IOPS for that device
>> is
>> >>>> 100000.
>> >>>>>>>> We also know that we can safely oversubscribe by 50%.  Therefore,
>> >> we
>> >>>>>>>> need to ensure that we don't allocate more than 150,000
>> guaranteed
>> >>>> IOPS
>> >>>>>>>> from that device.  Intuitively, it seems like the DataStore
>> >>>> configuration
>> >>>>>>>> should have a max assignable IOPS and overcommitment factor.  As
>> we
>> >>>>>>>> allocate volumes and attach VMs, we need to ensure that guarantee
>> >>>> more IOPS
>> >>>>>>>> exceed the configured maximum for a DataStore.  Does that make
>> >> sense?
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>> I think that's a good idea for a future enhancement. I'm not even
>> >> sure
>> >>>> I
>> >>>>>>> can query the SAN to find out how many IOPS safely remain. I'd
>> have
>> >> to
>> >>>> get
>> >>>>>>> all of the min values for all of the volumes on the SAN and total
>> >> them
>> >>>> up,
>> >>>>>>> I suppose, and subtract it from the total (user facing) supported
>> >> IOPS
>> >>>> of
>> >>>>>>> the system.
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> Another question occurs to me -- should we allow non-QoS
>> resources
>> >>>> to
>> >>>>>>>> be
>> >>>>>>>>>> assigned to hosts/storage devices that ensure QoS?  For
>> >> provisioned
>> >>>>>>>> IOPS, I
>> >>>>>>>>>> think a side effect of the current implementation is SolidFire
>> >>>> volumes
>> >>>>>>>>>> always have a QoS.  However, for hypervisor throttled I/O, it
>> >> seems
>> >>>>>>>>>> entirely possible for non-QoS VMs to allocated side-by-side
>> with
>> >> QoS
>> >>>>>>>> VMs.
>> >>>>>>>>>> In this scenario, a greedy, unbounded VM could potentially
>> starve
>> >>>> out
>> >>>>>>>> the
>> >>>>>>>>>> other VMs on the host -- preventing the QoSes defined the
>> >> collocated
>> >>>>>>>> VMs
>> >>>>>>>>>> from being fulfilled.
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> You can make SolidFire volumes (inside and outside of CS) and
>> not
>> >>>>>>>> specify
>> >>>>>>>>> IOPS. You'll still get guaranteed IOPS, but it will be at the
>> >>>> defaults
>> >>>>>>>> we
>> >>>>>>>>> choose. Unless you over-provision IOPS on a SolidFire SAN, you
>> will
>> >>>>>>>> have
>> >>>>>>>>> your Mins met.
>> >>>>>>>>>
>> >>>>>>>>> It sounds like you're perhaps looking for a storage tags
>> exclusions
>> >>>>>>>> list,
>> >>>>>>>>> which might be nice to have at some point (i.e. don't deploy my
>> >>>> volume
>> >>>>>>>> to
>> >>>>>>>>> storage with these following tags).
>> >>>>>>>>
>> >>>>>>>> I don't like the idea of a storage tags exclusion list as it
>> would
>> >>>>>>>> complicate component assembly.  It would require a storage
>> plugin to
>> >>>>>>>> anticipate all of the possible component assemblies and determine
>> >> the
>> >>>>>>>> invalid relationships.  I prefer that drivers express their
>> >>>> capabilities
>> >>>>>>>> which can be matched to a set of requested requirements.
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>> I'm not sure why a storage plug-in would care about inclusion or
>> >>>>>>> exclusion lists. It just needs to advertise its functionality in a
>> >> way
>> >>>> the
>> >>>>>>> allocator understands.
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> I agree with your assessment of Hypervisor QoS. Since it only
>> >> limits
>> >>>>>>>> IOPS,
>> >>>>>>>>> it does not solve the Noisy Neighbor problem. Only a system with
>> >>>>>>>> guaranteed
>> >>>>>>>>> minimum IOPS does this.
>> >>>>>>>>
>> >>>>>>>> As I said, for SolidFire, it sounds like this problem does not
>> >> exist.
>> >>>>>>>> However, I am concerned with the more general case as we
>> supported
>> >>>> more
>> >>>>>>>> devices with provisioned IOPS.
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>> Post 4.2 we need to investigate a way to pass vendor-specific
>> values
>> >> to
>> >>>>>>> drivers. Min and Max and pretty industry standard for provisioned
>> >>>> IOPS, but
>> >>>>>>> what if you break them out by read and write or do something
>> else? We
>> >>>> need
>> >>>>>>> a more general mechanism.
>> >>>>>>>
>> >>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> In my opinion,  we need to ensure that hypervisor throttled I/O
>> >> and
>> >>>>>>>>>> storage provisioned IOPS are mutually exclusive per volume.
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> Agreed
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>> We also need to understand the implications of these QoS
>> >> guarantees
>> >>>> on
>> >>>>>>>>>> operation of the system to ensure that the underlying hardware
>> >>>>>>>> resources
>> >>>>>>>>>> can fulfill them.  Given the time frame, we will likely be
>> forced
>> >> to
>> >>>>>>>> make
>> >>>>>>>>>> compromises to achieve these goals, and refine the
>> implementation
>> >> in
>> >>>>>>>> 4.3.
>> >>>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> I agree, John. I also think you've come up with some great ideas
>> >> for
>> >>>>>>>> 4.3. :)
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> Thanks,
>> >>>>>>>>>> -John
>> >>>>>>>>>>
>> >>>>>>>>>> On Jun 12, 2013, at 11:35 PM, Mike Tutkowski <
>> >>>>>>>> mike.tutkow...@solidfire.com>
>> >>>>>>>>>> wrote:
>> >>>>>>>>>>
>> >>>>>>>>>>> Hi,
>> >>>>>>>>>>>
>> >>>>>>>>>>> Yeah, Alex, I think that's the way we were planning (with
>> storage
>> >>>>>>>> tags).
>> >>>>>>>>>> I
>> >>>>>>>>>>> believe John was just throwing out an idea that - in addition
>> to
>> >>>>>>>> storage
>> >>>>>>>>>>> tags - we could look into these allocators (storage QoS being
>> >>>>>>>> preferred,
>> >>>>>>>>>>> then hypervisor QoS if storage QoS is not available, but
>> >> hypervisor
>> >>>>>>>> QoS
>> >>>>>>>>>> is).
>> >>>>>>>>>>>
>> >>>>>>>>>>> I think John's concern is that you can enter in values for
>> Wei's
>> >>>> and
>> >>>>>>>> my
>> >>>>>>>>>>> feature that are not honored by other vendors (at least yet),
>> so
>> >> he
>> >>>>>>>> was
>> >>>>>>>>>>> hoping - in addition to storage tags - for the allocators to
>> >> prefer
>> >>>>>>>> these
>> >>>>>>>>>>> vendors when these fields are filled in. As it stands today in
>> >>>>>>>>>> CloudStack,
>> >>>>>>>>>>> we already have this kind of an issue with other features
>> (fields
>> >>>> in
>> >>>>>>>>>>> dialogs for features that not all vendors support). Perhaps
>> post
>> >>>> 4.2
>> >>>>>>>> we
>> >>>>>>>>>>> could look into generic name/value pairs (this is how
>> OpenStack
>> >>>>>>>> addresses
>> >>>>>>>>>>> the issue).
>> >>>>>>>>>>>
>> >>>>>>>>>>> Honestly, I think we're too late in the game (two weeks until
>> >> code
>> >>>>>>>>>> freeze)
>> >>>>>>>>>>> to go too deeply down that path in 4.2.
>> >>>>>>>>>>>
>> >>>>>>>>>>> It's probably better if we - at least for 4.2 - keep Wei's
>> fields
>> >>>>>>>> and my
>> >>>>>>>>>>> fields as is, make sure only one or the other feature has data
>> >>>>>>>> entered
>> >>>>>>>>>> for
>> >>>>>>>>>>> it (or neither), and call it good for 4.2.
>> >>>>>>>>>>>
>> >>>>>>>>>>> Then let's step back and look into a more general-purpose
>> design
>> >>>>>>>> that can
>> >>>>>>>>>>> be applied throughout CloudStack where we have these
>> situations.
>> >>>>>>>>>>>
>> >>>>>>>>>>> What do you think?
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> On Wed, Jun 12, 2013 at 5:21 PM, John Burwell <
>> >> jburw...@basho.com>
>> >>>>>>>>>> wrote:
>> >>>>>>>>>>>
>> >>>>>>>>>>>> Mike,
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> I just published my review @
>> >> https://reviews.apache.org/r/11479/.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> I apologize for the delay,
>> >>>>>>>>>>>> -John
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> On Jun 12, 2013, at 12:43 PM, Mike Tutkowski <
>> >>>>>>>>>> mike.tutkow...@solidfire.com>
>> >>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>> No problem, John.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> I still want to re-review it by myself before coming up
>> with a
>> >>>> new
>> >>>>>>>>>> patch
>> >>>>>>>>>>>>> file.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Also, maybe I should first wait for Wei's changes to be
>> checked
>> >>>> in
>> >>>>>>>> and
>> >>>>>>>>>>>>> merge those into mine before generating a new patch file?
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> On Wed, Jun 12, 2013 at 10:40 AM, John Burwell <
>> >>>> jburw...@basho.com
>> >>>>>>>>>
>> >>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Mike,
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> I just realized that I forgot to publish my review.  I am
>> >>>> offline
>> >>>>>>>> ATM,
>> >>>>>>>>>>>>>> but I will publish it in the next couple of hours.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Do you plan to update your the patch in Review Board?
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Sorry for the oversight,
>> >>>>>>>>>>>>>> -John
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> On Jun 12, 2013, at 2:26 AM, Mike Tutkowski
>> >>>>>>>>>>>>>> <mike.tutkow...@solidfire.com> wrote:
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Hi Edison, John, and Wei (and whoever else is reading
>> this :)
>> >>>> ),
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Just an FYI that I believe I have implemented all the
>> areas
>> >> we
>> >>>>>>>> wanted
>> >>>>>>>>>>>>>>> addressed.
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> I plan to review the code again tomorrow morning or
>> >> afternoon,
>> >>>>>>>> then
>> >>>>>>>>>>>> send
>> >>>>>>>>>>>>>> in
>> >>>>>>>>>>>>>>> another patch.
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> Thanks for all the work on this everyone!
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> On Tue, Jun 11, 2013 at 12:29 PM, Mike Tutkowski <
>> >>>>>>>>>>>>>>> mike.tutkow...@solidfire.com> wrote:
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> Sure, that sounds good.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> On Tue, Jun 11, 2013 at 12:11 PM, Wei ZHOU <
>> >>>>>>>> ustcweiz...@gmail.com>
>> >>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Hi Mike,
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> It looks the two feature do not have many conflicts in
>> Java
>> >>>>>>>> code,
>> >>>>>>>>>>>>>> except
>> >>>>>>>>>>>>>>>>> the cloudstack UI.
>> >>>>>>>>>>>>>>>>> If you do not mind, I will merge disk_io_throttling
>> branch
>> >>>> into
>> >>>>>>>>>>>> master
>> >>>>>>>>>>>>>>>>> this
>> >>>>>>>>>>>>>>>>> week, so that you can develop based on it.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> -Wei
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> 2013/6/11 Mike Tutkowski <mike.tutkow...@solidfire.com>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Hey John,
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> The SolidFire patch does not depend on the object_store
>> >>>>>>>> branch,
>> >>>>>>>>>> but
>> >>>>>>>>>>>> -
>> >>>>>>>>>>>>>> as
>> >>>>>>>>>>>>>>>>>> Edison mentioned - it might be easier if we merge the
>> >>>>>>>> SolidFire
>> >>>>>>>>>>>> branch
>> >>>>>>>>>>>>>>>>> into
>> >>>>>>>>>>>>>>>>>> the object_store branch before object_store goes into
>> >>>> master.
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> I'm not sure how the disk_io_throttling fits into this
>> >> merge
>> >>>>>>>>>>>> strategy.
>> >>>>>>>>>>>>>>>>>> Perhaps Wei can chime in on that.
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> On Tue, Jun 11, 2013 at 11:07 AM, John Burwell <
>> >>>>>>>>>> jburw...@basho.com>
>> >>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Mike,
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> We have a delicate merge dance to perform.  The
>> >>>>>>>>>> disk_io_throttling,
>> >>>>>>>>>>>>>>>>>>> solidfire, and object_store appear to have a number of
>> >>>>>>>>>> overlapping
>> >>>>>>>>>>>>>>>>>>> elements.  I understand the dependencies between the
>> >>>> patches
>> >>>>>>>> to
>> >>>>>>>>>> be
>> >>>>>>>>>>>> as
>> >>>>>>>>>>>>>>>>>>> follows:
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>  object_store <- solidfire -> disk_io_throttling
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Am I correct that the device management aspects of
>> >>>> SolidFire
>> >>>>>>>> are
>> >>>>>>>>>>>>>>>>> additive
>> >>>>>>>>>>>>>>>>>>> to the object_store branch or there are circular
>> >> dependency
>> >>>>>>>>>> between
>> >>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>> branches?  Once we understand the dependency graph, we
>> >> can
>> >>>>>>>>>>>> determine
>> >>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>> best approach to land the changes in master.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Thanks,
>> >>>>>>>>>>>>>>>>>>> -John
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> On Jun 10, 2013, at 11:10 PM, Mike Tutkowski <
>> >>>>>>>>>>>>>>>>>> mike.tutkow...@solidfire.com>
>> >>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> Also, if we are good with Edison merging my code into
>> >> his
>> >>>>>>>> branch
>> >>>>>>>>>>>>>>>>> before
>> >>>>>>>>>>>>>>>>>>>> going into master, I am good with that.
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> We can remove the StoragePoolType.Dynamic code after
>> his
>> >>>>>>>> merge
>> >>>>>>>>>> and
>> >>>>>>>>>>>>>>>>> we
>> >>>>>>>>>>>>>>>>>> can
>> >>>>>>>>>>>>>>>>>>>> deal with Burst IOPS then, as well.
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> On Mon, Jun 10, 2013 at 9:08 PM, Mike Tutkowski <
>> >>>>>>>>>>>>>>>>>>>> mike.tutkow...@solidfire.com> wrote:
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> Let me make sure I follow where we're going here:
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> 1) There should be NO references to hypervisor code
>> in
>> >>>> the
>> >>>>>>>>>>>> storage
>> >>>>>>>>>>>>>>>>>>>>> plug-ins code (this includes the default storage
>> >> plug-in,
>> >>>>>>>> which
>> >>>>>>>>>>>>>>>>>>> currently
>> >>>>>>>>>>>>>>>>>>>>> sends several commands to the hypervisor in use
>> >> (although
>> >>>>>>>> it
>> >>>>>>>>>> does
>> >>>>>>>>>>>>>>>>> not
>> >>>>>>>>>>>>>>>>>>> know
>> >>>>>>>>>>>>>>>>>>>>> which hypervisor (XenServer, ESX(i), etc.) is
>> actually
>> >> in
>> >>>>>>>> use))
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> 2) managed=true or managed=false can be placed in
>> the
>> >> url
>> >>>>>>>> field
>> >>>>>>>>>>>> (if
>> >>>>>>>>>>>>>>>>>> not
>> >>>>>>>>>>>>>>>>>>>>> present, we default to false). This info is stored
>> in
>> >> the
>> >>>>>>>>>>>>>>>>>>>>> storage_pool_details table.
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> 3) When the "attach" command is sent to the
>> hypervisor
>> >> in
>> >>>>>>>>>>>>>>>>> question, we
>> >>>>>>>>>>>>>>>>>>>>> pass the managed property along (this takes the
>> place
>> >> of
>> >>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>> StoragePoolType.Dynamic check).
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> 4) execute(AttachVolumeCommand) in the hypervisor
>> >> checks
>> >>>>>>>> for
>> >>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>> managed
>> >>>>>>>>>>>>>>>>>>>>> property. If true for an attach, the necessary
>> >> hypervisor
>> >>>>>>>> data
>> >>>>>>>>>>>>>>>>>>> structure is
>> >>>>>>>>>>>>>>>>>>>>> created and the rest of the attach command executes
>> to
>> >>>>>>>> attach
>> >>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>> volume.
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> 5) When execute(AttachVolumeCommand) is invoked to
>> >>>> detach a
>> >>>>>>>>>>>> volume,
>> >>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>> same check is made. If managed, the hypervisor data
>> >>>>>>>> structure
>> >>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>> removed.
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> 6) I do not see an clear way to support Burst IOPS
>> in
>> >> 4.2
>> >>>>>>>>>> unless
>> >>>>>>>>>>>>>>>>> it is
>> >>>>>>>>>>>>>>>>>>>>> stored in the volumes and disk_offerings table. If
>> we
>> >>>> have
>> >>>>>>>> some
>> >>>>>>>>>>>>>>>>> idea,
>> >>>>>>>>>>>>>>>>>>>>> that'd be cool.
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> Thanks!
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> On Mon, Jun 10, 2013 at 8:58 PM, Mike Tutkowski <
>> >>>>>>>>>>>>>>>>>>>>> mike.tutkow...@solidfire.com> wrote:
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>> "+1 -- Burst IOPS can be implemented while avoiding
>> >>>>>>>>>>>> implementation
>> >>>>>>>>>>>>>>>>>>>>>> attributes.  I always wondered about the details
>> >> field.
>> >>>> I
>> >>>>>>>>>> think
>> >>>>>>>>>>>>>>>>> we
>> >>>>>>>>>>>>>>>>>>> should
>> >>>>>>>>>>>>>>>>>>>>>> beef up the description in the documentation
>> regarding
>> >>>> the
>> >>>>>>>>>>>>>>>>> expected
>> >>>>>>>>>>>>>>>>>>> format
>> >>>>>>>>>>>>>>>>>>>>>> of the field.  In 4.1, I noticed that the details
>> are
>> >>>> not
>> >>>>>>>>>>>>>>>>> returned on
>> >>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>> createStoratePool updateStoragePool, or
>> >> listStoragePool
>> >>>>>>>>>>>> response.
>> >>>>>>>>>>>>>>>>>> Why
>> >>>>>>>>>>>>>>>>>>>>>> don't we return it?  It seems like it would be
>> useful
>> >>>> for
>> >>>>>>>>>>>> clients
>> >>>>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>>>> be
>> >>>>>>>>>>>>>>>>>>>>>> able to inspect the contents of the details field."
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>> Not sure how this would work storing Burst IOPS
>> here.
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>> Burst IOPS need to be variable on a Disk
>> >>>> Offering-by-Disk
>> >>>>>>>>>>>> Offering
>> >>>>>>>>>>>>>>>>>>>>>> basis. For each Disk Offering created, you have to
>> be
>> >>>>>>>> able to
>> >>>>>>>>>>>>>>>>>> associate
>> >>>>>>>>>>>>>>>>>>>>>> unique Burst IOPS. There is a disk_offering_details
>> >>>> table.
>> >>>>>>>>>> Maybe
>> >>>>>>>>>>>>>>>>> it
>> >>>>>>>>>>>>>>>>>>> could
>> >>>>>>>>>>>>>>>>>>>>>> go there?
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>> I'm also not sure how you would accept the Burst
>> IOPS
>> >> in
>> >>>>>>>> the
>> >>>>>>>>>> GUI
>> >>>>>>>>>>>>>>>>> if
>> >>>>>>>>>>>>>>>>>>> it's
>> >>>>>>>>>>>>>>>>>>>>>> not stored like the Min and Max fields are in the
>> DB.
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> --
>> >>>>>>>>>>>>>>>>>>>>> *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>
>> >>>>>>>>>>>>>>>> *™*
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> --
>> >>>>>>>>>>>>>>> *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>
>> >>>>>>>>> *™*
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> --
>> >>>>>>> *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>
>> >>> *™*
>> >>
>> >>
>> >
>> >
>> > --
>> > *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>
*™*

Reply via email to