I wonder if this technique is only going to work for NFS?

In the block world, the VDI we take a snapshot of on the SR will lead to
the creation of another VDI and a block system cannot just snapshot the
hypervisor snapshot - it needs to snapshot the entire volume (which is
analogous to the SR).


On Thu, Oct 10, 2013 at 6:29 AM, SuichII, Christopher <
chris.su...@netapp.com> wrote:

> Multivendor snapshotting:
> The case with two storage providers is a bit trickier and is one that we
> are still working on. I believe there are a couple options on the table:
>
> -Give both storage providers the option to take the snapshot and fail if
> either one fails or cannot take the snapshot
> -Give both storage providers the option to take the snapshot and use the
> hypervisor/default if either one fails or cannot take the snapshot
> -Fall back to using the hypervisor/default if the VM has volumes on
> storage managed by different providers
>
> The only purpose of the hypervisor snapshot is to give storage providers a
> consistent volume to take their snapshot against. Once that snapshot is
> taken, the hypervisor snapshot is pushed back into the parent or active VM
> (essentially removing the fact the hypervisor snapshot ever existed).
>
>
> Quiescing:
> This is something that has been debated a lot. Ultimately, one reason for
> having drivers perform the quiescing is because we don't know how every
> storage provider will want to work. As far as I've ever known, any storage
> provider that wants to create the snapshots themselves will want the VM to
> be quiesced through the hypervisor. However, there may be some storage
> provider that has some way of taking snapshots (that we don't know about)
> that doesn't require the VM to be quiesced. In that case, we wouldn't want
> them to be forced into having the VM quiesced before they're asked to take
> the snapshot.
>
>
> Two snapshot methods:
> I believe the main reason for this is that storage drivers may want to
> take the snapshot differently depending on whether it is a single volume
> snapshot or an entire VM snapshot. Again, erring on the side of flexibility
> so that things don't have to change when a new storage provider comes along
> with different requirements.
>
>
> --
> Chris Suich
> chris.su...@netapp.com
> NetApp Software Engineer
> Data Center Platforms – Cloud Solutions
> Citrix, Cisco & Red Hat
>
> On Oct 10, 2013, at 1:40 AM, Mike Tutkowski <mike.tutkow...@solidfire.com>
> wrote:
>
> > "The work flow will be: createVMSnapshot api -> VMSnapshotManagerImpl:
> > creatVMSnapshot -> VMSnapshotStrategy: takeVMSnapshot -> storage
> > driver:takeVMSnapshot"
> >
> > I also think it's a bit weird for the storage driver to have any
> knowledge
> > of VM snapshots.
> >
> > I would think another part of the system would quiesce (or not) the VM in
> > question and then the takeSnapshot method would be called on the driver.
> >
> > I might have missed something...why does the driver "care" if the
> snapshot
> > to be taken is going to be in a consistent state or not (I understand why
> > the user care, but not the storage driver)? Why is that not a problem for
> > some other part of the system that is aware of hypervisor snapshots?
> > Shouldn't the driver just take a snapshot (or snapshots) as it is
> > instructed to do (regardless of whether or not a VM is quiesced)?
> >
> > Basically I'm wondering why we need two "take snapshot" methods on the
> > driver.
> >
> >
> > On Wed, Oct 9, 2013 at 11:24 PM, Mike Tutkowski <
> > mike.tutkow...@solidfire.com> wrote:
> >
> >> Yeah, I'm not really clear how the snapshot strategy works if you have
> >> multiple vendors that implement that interface either.
> >>
> >>
> >> On Wed, Oct 9, 2013 at 10:12 PM, Darren Shepherd <
> >> darren.s.sheph...@gmail.com> wrote:
> >>
> >>> Edison,
> >>>
> >>> I would lean toward doing the coarse grain interface only.  I'm having
> >>> a hard time seeing how the whole flow is generic and makes sense for
> >>> everyone.  With starting with the coarse grain you have the advantage
> >>> in that you avoid possible upfront over engineering/over design that
> >>> could wreak havoc down the line.  If you implement the
> >>> VMSnapshotStrategy and find that it really is useful to other
> >>> implementations, you can then implement the fine grain interface later
> >>> to allow others to benefit from it.
> >>>
> >>> Darren
> >>>
> >>> On Wed, Oct 9, 2013 at 8:54 PM, Mike Tutkowski
> >>> <mike.tutkow...@solidfire.com> wrote:
> >>>> Hey guys,
> >>>>
> >>>> I haven't been giving this thread much attention, but am reviewing it
> >>>> somewhat now.
> >>>>
> >>>> I'm not really clear how this would work if, say, a VM has two data
> >>> disks
> >>>> and they are not being provided by the same vendor.
> >>>>
> >>>> Can someone clarify that for me?
> >>>>
> >>>> My understanding for how this works today is that it doesn't matter.
> For
> >>>> XenServer, a VDI is on an SR, which could be supported by storage
> >>> vendor X.
> >>>> Another VDI could be on another SR, supported by storage vendor Y.
> >>>>
> >>>> In this case, a new VDI appears on each SR after a hypervisor
> snapshot.
> >>>>
> >>>> Same idea for VMware.
> >>>>
> >>>> I don't really know how (or if) this works for KVM.
> >>>>
> >>>> I'm not clear how this multi-vendor situation would play out in this
> >>>> pluggable approach.
> >>>>
> >>>> Thanks!
> >>>>
> >>>>
> >>>> On Tue, Oct 8, 2013 at 4:43 PM, Edison Su <edison...@citrix.com>
> wrote:
> >>>>
> >>>>>
> >>>>>
> >>>>>> -----Original Message-----
> >>>>>> From: Darren Shepherd [mailto:darren.s.sheph...@gmail.com]
> >>>>>> Sent: Tuesday, October 08, 2013 2:54 PM
> >>>>>> To: dev@cloudstack.apache.org
> >>>>>> Subject: Re: [DISCUSS] Pluggable VM snapshot related operations?
> >>>>>>
> >>>>>> A hypervisor snapshot will snapshot memory also.  So determining
> >>> whether
> >>>>> The memory is optional for hypervisor vm snapshot, a.k.a, the
> >>> "Disk-only
> >>>>> snapshots":
> >>>>>
> >>>
> http://support.citrix.com/proddocs/topic/xencenter-61/xs-xc-vms-snapshots-about.html
> >>>>> It's supported by both xenserver/kvm/vmware.
> >>>>>
> >>>>>> do to the hypervisor snapshot from the quiesce option does not seem
> >>>>>> proper.
> >>>>>>
> >>>>>> Sorry, for all the questions, I'm trying to get to the point of
> >>>>> understand if this
> >>>>>> functionality makes sense at this point of code or if maybe their is
> >>> a
> >>>>> different
> >>>>>> approach.  This is what I'm seeing, what if we state it this way
> >>>>>>
> >>>>>> 1) VM snapshot, AFAIK, are not backed up today and exist solely on
> >>>>> primary.
> >>>>>> What if we added a backup phase to VM snapshots that can be
> >>> optionally
> >>>>>> supported by the storage providers to possibly backup the VM
> snapshot
> >>>>>> volumes.
> >>>>> It's not about backup vm snapshot, it's about how to take vm
> snapshot.
> >>>>> Usually, take/revert vm snapshot is handled by hypervisor itself, but
> >>> in
> >>>>> NetApp(or other storage vendor) case,
> >>>>> They want to change the default behavior of hypervisor-base vm
> >>> snapshot.
> >>>>>
> >>>>> Some examples:
> >>>>> 1. take hypervisor based vm snapshots, on primary storage, hypervisor
> >>> will
> >>>>> maintain the snapshot chain.
> >>>>> 2. take vm snapshot through NetApp:
> >>>>>     a. first, quiesce VM if user specified. There is no separate API
> >>> to
> >>>>> quiesce VM on the hypervisor, so here we will
> >>>>> take a VM snapshot through hypervisor API call, hypervisor will take
> >>>>> volume snapshot  on each volume of the VM. Let's say, on the primary
> >>>>> storage, the disk chain looks like:
> >>>>>           base-image
> >>>>>                    |
> >>>>>                    V
> >>>>>                Parent disk
> >>>>>            /                         \
> >>>>>          V                            V
> >>>>>        Current disk        snapshot-a
> >>>>>     b. from snapshot-a, find out its parent disk, then take snapshot
> >>>>> through NetApp
> >>>>>     c. un- quiesce VM, here, go to hypervisor, delete snapshot
> >>>>> "snapshot-a", hypervisor should be able to consolidate current disk
> and
> >>>>> "parent disk" into one disk, thus from hypervisor point of view
> >>>>> , there is always, at most, only one snapshot for the VM.
> >>>>>    For revert VM snapshot, as long as the VM is stopped, NetApp can
> >>>>> revert the snapshot created on NetApp storage easily, and
> efficiently.
> >>>>>   The benefit of this whole process, as Chris pointed out, if the
> >>>>> snapshot chain is quite long, hypervisor based VM snapshot will get
> >>>>> performance hit.
> >>>>>
> >>>>>>
> >>>>>> 2) Additionally you want to be able to backup multiple disks at
> once,
> >>>>>> regardless of VM snapshot.  Why don't we add the ability to put
> >>>>> volumeIds in
> >>>>>> snapshot cmd that if the storage provider supports it will get a
> >>> batch of
> >>>>>> volumeIds.
> >>>>>>
> >>>>>> Now I know we talked about 2 and there was some concerns about it
> >>> (mostly
> >>>>>> from me), but I think we could work through those concerns (forgot
> >>> what
> >>>>>> they were...).  Right now I just get the feeling we are shoehorning
> >>> some
> >>>>>> functionality into VM snapshot that isn't quite the right fit.  The
> >>> "no
> >>>>> quiesce"
> >>>>>> flow just doesn't seem to make sense to me.
> >>>>>
> >>>>>
> >>>>> Not sure above NetApp proposed work flow makes sense to you or to
> other
> >>>>> body or not. If this work flow is only specific to NetApp, then we
> >>> don't
> >>>>> need to enforce the whole process for everybody.
> >>>>>
> >>>>>>
> >>>>>> Darren
> >>>>>>
> >>>>>> On Tue, Oct 8, 2013 at 2:05 PM, SuichII, Christopher
> >>>>>> <chris.su...@netapp.com> wrote:
> >>>>>>> Whether the hypervisor snapshot happens depends on whether the
> >>>>>> 'quiesce' option is specified with the snapshot request. If a user
> >>>>> doesn't care
> >>>>>> about the consistency of their backup, then the hypervisor
> >>>>> snapshot/quiesce
> >>>>>> step can be skipped altogether. This of course is not the case if
> the
> >>>>> default
> >>>>>> provider is being used, in which case a hypervisor snapshot is the
> >>> only
> >>>>> way of
> >>>>>> creating a backup since it can't be offloaded to the storage driver.
> >>>>>>>
> >>>>>>> --
> >>>>>>> Chris Suich
> >>>>>>> chris.su...@netapp.com
> >>>>>>> NetApp Software Engineer
> >>>>>>> Data Center Platforms - Cloud Solutions Citrix, Cisco & Red Hat
> >>>>>>>
> >>>>>>> On Oct 8, 2013, at 4:57 PM, Darren Shepherd
> >>>>>>> <darren.s.sheph...@gmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Who is going to decide whether the hypervisor snapshot should
> >>>>>>>> actually happen or not? Or how?
> >>>>>>>>
> >>>>>>>> Darren
> >>>>>>>>
> >>>>>>>> On Tue, Oct 8, 2013 at 12:38 PM, SuichII, Christopher
> >>>>>>>> <chris.su...@netapp.com> wrote:
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> Chris Suich
> >>>>>>>>> chris.su...@netapp.com
> >>>>>>>>> NetApp Software Engineer
> >>>>>>>>> Data Center Platforms - Cloud Solutions Citrix, Cisco & Red Hat
> >>>>>>>>>
> >>>>>>>>> On Oct 8, 2013, at 2:24 PM, Darren Shepherd
> >>>>>> <darren.s.sheph...@gmail.com> wrote:
> >>>>>>>>>
> >>>>>>>>>> So in the implementation, when we say "quiesce" is that actually
> >>>>>>>>>> being implemented as a VM snapshot (memory and disk).  And then
> >>>>>>>>>> when you say "unquiesce" you are talking about deleting the VM
> >>>>>> snapshot?
> >>>>>>>>>
> >>>>>>>>> If the VM snapshot is not going to the hypervisor, then yes, it
> >>> will
> >>>>>> actually be a hypervisor snapshot. Just to be clear, the unquiesce
> is
> >>>>> not quite
> >>>>>> a delete - it is a collapse of the VM snapshot and the active VM
> back
> >>>>> into one
> >>>>>> file.
> >>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> In NetApp, what are you snapshotting?  The whole netapp volume
> >>> (I
> >>>>>>>>>> don't know the correct term), a file on NFS, an iscsi volume?  I
> >>>>>>>>>> don't know a whole heck of a lot about the netapp snapshot
> >>>>>> capabilities.
> >>>>>>>>>
> >>>>>>>>> Essentially we are using internal APIs to create file level
> >>> backups
> >>>>> - don't
> >>>>>> worry too much about the terminology.
> >>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> I know storage solutions can snapshot better and faster than
> >>>>>>>>>> hypervisors can with COW files.  I've personally just been
> >>> always
> >>>>>>>>>> perplexed on whats the best way to implement it.  For storage
> >>>>>>>>>> solutions that are block based, its really easy to have the
> >>> storage
> >>>>>>>>>> doing the snapshot.  For shared file systems, like NFS, its
> >>> seems
> >>>>>>>>>> way more complicated as you don't want to snapshot the entire
> >>>>>>>>>> filesystem in order to snapshot one file.
> >>>>>>>>>
> >>>>>>>>> With filesystems like NFS, things are certainly more complicated,
> >>>>> but that
> >>>>>> is taken care of by our controller's operating system, Data ONTAP,
> >>> and we
> >>>>>> simply use APIs to communicate with it.
> >>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Darren
> >>>>>>>>>>
> >>>>>>>>>> On Tue, Oct 8, 2013 at 11:10 AM, SuichII, Christopher
> >>>>>>>>>> <chris.su...@netapp.com> wrote:
> >>>>>>>>>>> I can comment on the second half.
> >>>>>>>>>>>
> >>>>>>>>>>> Through storage operations, storage providers can create
> >>> backups
> >>>>>> much faster than hypervisors and over time, their snapshots are more
> >>>>>> efficient than the snapshot chains that hypervisors create. It is
> >>> true
> >>>>> that a VM
> >>>>>> snapshot taken at the storage level is slightly different as it
> >>> would be
> >>>>> psuedo-
> >>>>>> quiesced, not have it's memory snapshotted. This is accomplished
> >>> through
> >>>>>> hypervisor snapshots:
> >>>>>>>>>>>
> >>>>>>>>>>> 1) VM snapshot request (lets say VM 'A'
> >>>>>>>>>>> 2) Create hypervisor snapshot (optional) -VM 'A' is
> >>> snapshotted,
> >>>>>>>>>>> creating active VM 'A*'
> >>>>>>>>>>> -All disk traffic now goes to VM 'A*' and A is a snapshot of
> >>> 'A*'
> >>>>>>>>>>> 3) Storage driver(s) take snapshots of each volume
> >>>>>>>>>>> 4) Undo hypervisor snapshot (optional) -VM snapshot 'A' is
> >>> rolled
> >>>>>>>>>>> back into VM 'A*' so the hypervisor snapshot no longer exists
> >>>>>>>>>>>
> >>>>>>>>>>> Now, a couple notes:
> >>>>>>>>>>> -The reason this is optional is that not all users necessarily
> >>>>> care about
> >>>>>> the memory or disk consistency of their VMs and would prefer faster
> >>>>>> snapshots to consistency.
> >>>>>>>>>>> -Preemptively, yes, we are actually taking hypervisor snapshots
> >>>>> which
> >>>>>> means there isn't actually a performance of taking storage snapshots
> >>> when
> >>>>>> quiescing the VM. However, the performance gain will come both
> during
> >>>>>> restoring the VM and during normal operations as described above.
> >>>>>>>>>>>
> >>>>>>>>>>> Although you can think of it as a poor man's VM snapshot, I
> >>> would
> >>>>>> think of it more as a consistent multi-volume snapshot. Again, the
> >>>>> difference
> >>>>>> being that this snapshot was not truly quiesced like a hypervisor
> >>>>> snapshot
> >>>>>> would be.
> >>>>>>>>>>>
> >>>>>>>>>>> --
> >>>>>>>>>>> Chris Suich
> >>>>>>>>>>> chris.su...@netapp.com
> >>>>>>>>>>> NetApp Software Engineer
> >>>>>>>>>>> Data Center Platforms - Cloud Solutions Citrix, Cisco & Red Hat
> >>>>>>>>>>>
> >>>>>>>>>>> On Oct 8, 2013, at 1:47 PM, Darren Shepherd
> >>>>>> <darren.s.sheph...@gmail.com> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> My only comment is that having the return type as boolean and
> >>>>>>>>>>>> using to that indicate quiesce behaviour seems obscure and
> >>> will
> >>>>>>>>>>>> probably lead to a problem later.  Your basically saying the
> >>>>>>>>>>>> result of the takeVMSnapshot will only ever need to
> >>> communicate
> >>>>>>>>>>>> back whether unquiesce needs to happen.  Maybe some result
> >>>>>> object
> >>>>>>>>>>>> would be more extensible.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Actually, I think I have more comments.  This seems a bit odd
> >>> to
> >>>>> me.
> >>>>>>>>>>>> Why would a storage driver in ACS implement a VM snapshot
> >>>>>>>>>>>> functionality?  VM snapshot is a really a hypervisor
> >>> orchestrated
> >>>>>>>>>>>> operation.  So it seems like were trying to implement a poor
> >>> mans
> >>>>>>>>>>>> VM snapshot.  Maybe if I understood what NetApp was trying to
> >>> do
> >>>>>>>>>>>> it would make more sense, but its all odd.  To do a proper VM
> >>>>>>>>>>>> snapshot you need to snapshot memory and disk at the exact
> >>> same
> >>>>>>>>>>>> time.  How are we going to do that if ACS is orchestrating
> >>> the VM
> >>>>>>>>>>>> snapshot and delegating to storage providers.  Its not like
> >>> you
> >>>>>>>>>>>> are going to pause the VM.... or are you?
> >>>>>>>>>>>>
> >>>>>>>>>>>> Darren
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Mon, Oct 7, 2013 at 11:59 AM, Edison Su <
> >>> edison...@citrix.com>
> >>>>>> wrote:
> >>>>>>>>>>>>> I created a design document page at
> >>>>>>
> >>> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Pluggable+VM+s
> >>>>>> napshot+related+operations, feel free to add items on it.
> >>>>>>>>>>>>> And a new branch "pluggable_vm_snapshot" is created.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>> From: SuichII, Christopher [mailto:chris.su...@netapp.com]
> >>>>>>>>>>>>>> Sent: Monday, October 07, 2013 10:02 AM
> >>>>>>>>>>>>>> To: <dev@cloudstack.apache.org>
> >>>>>>>>>>>>>> Subject: Re: [DISCUSS] Pluggable VM snapshot related
> >>> operations?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I'm a fan of option 2 - this gives us the most flexibility
> >>> (as
> >>>>>>>>>>>>>> you stated). The option is given to completely override the
> >>> way
> >>>>>>>>>>>>>> VM snapshots work AND storage providers are given to
> >>>>>>>>>>>>>> opportunity to work within the default VM snapshot workflow.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I believe this option should satisfy your concern, Mike. The
> >>>>>>>>>>>>>> snapshot and quiesce strategy would be in charge of
> >>>>>> communicating with the hypervisor.
> >>>>>>>>>>>>>> Storage providers should be able to leverage the default
> >>>>>>>>>>>>>> strategies and simply perform the storage operations.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> I don't think it should be much of an issue that new method
> >>> to
> >>>>>>>>>>>>>> the storage driver interface may not apply to everyone. In
> >>> fact,
> >>>>>> that is already the case.
> >>>>>>>>>>>>>> Some methods such as un/maintain(), attachToXXX() and
> >>>>>>>>>>>>>> takeSnapshot() are already not implemented by every driver -
> >>>>>>>>>>>>>> they just return false when asked if they can handle the
> >>>>> operation.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> --
> >>>>>>>>>>>>>> Chris Suich
> >>>>>>>>>>>>>> chris.su...@netapp.com
> >>>>>>>>>>>>>> NetApp Software Engineer
> >>>>>>>>>>>>>> Data Center Platforms - Cloud Solutions Citrix, Cisco & Red
> >>> Hat
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Oct 5, 2013, at 12:11 AM, Mike Tutkowski
> >>>>>>>>>>>>>> <mike.tutkow...@solidfire.com>
> >>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Well, my first thought on this is that the storage driver
> >>>>>>>>>>>>>>> should not be telling the hypervisor to do anything. It
> >>> should
> >>>>>>>>>>>>>>> be responsible for creating/deleting volumes, snapshots,
> >>> etc.
> >>>>> on
> >>>>>> its storage system only.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On Fri, Oct 4, 2013 at 5:57 PM, Edison Su <
> >>>>> edison...@citrix.com>
> >>>>>> wrote:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> In 4.2, we added VM snapshot for Vmware/Xenserver. The
> >>>>>>>>>>>>>>>> current workflow will be like the following:
> >>>>>>>>>>>>>>>> createVMSnapshot api -> VMSnapshotManagerImpl:
> >>>>>>>>>>>>>>>> creatVMSnapshot -> send CreateVMSnapshotCommand to
> >>>>>> hypervisor to create vm snapshot.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> If anybody wants to change the workflow, then need to
> >>> either
> >>>>>>>>>>>>>>>> change VMSnapshotManagerImpl directly or subclass
> >>>>>> VMSnapshotManagerImpl.
> >>>>>>>>>>>>>>>> Both are not the ideal choice, as VMSnapshotManagerImpl
> >>>>>>>>>>>>>>>> should be able to handle different ways to take vm
> >>> snapshot,
> >>>>>> instead of hard code.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> The requirements for the pluggable VM snapshot coming
> >>> from:
> >>>>>>>>>>>>>>>> Storage vendor may have their optimization, such as
> >>> NetApp.
> >>>>>>>>>>>>>>>> VM snapshot can be implemented in a totally different
> >>> way(For
> >>>>>>>>>>>>>>>> example, I could just send a command to guest VM, to tell
> >>> my
> >>>>>>>>>>>>>>>> application to flush disk and hold disk write, then come
> >>> to
> >>>>>>>>>>>>>>>> hypervisor to
> >>>>>>>>>>>>>> take a volume snapshot).
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> If we agree on enable pluggable VM snapshot, then we can
> >>>>>> move
> >>>>>>>>>>>>>>>> on discuss how to implement it.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> The possible options:
> >>>>>>>>>>>>>>>> 1. coarse grained interface. Add a VMSnapshotStrategy
> >>>>>>>>>>>>>>>> interface, which has the following interfaces:
> >>>>>>>>>>>>>>>> VMSnapshot takeVMSnapshot(VMSnapshot vmSnapshot);
> >>>>>> Boolean
> >>>>>>>>>>>>>>>> revertVMSnapshot(VMSnapshot vmSnapshot); Boolean
> >>>>>>>>>>>>>>>> DeleteVMSnapshot(VMSnapshot vmSnapshot);
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> The work flow will be: createVMSnapshot api ->
> >>>>>>>>>>>>>> VMSnapshotManagerImpl:
> >>>>>>>>>>>>>>>> creatVMSnapshot -> VMSnapshotStrategy: takeVMSnapshot
> >>>>>>>>>>>>>>>> VMSnapshotManagerImpl will manage VM state, do the sanity
> >>>>>>>>>>>>>>>> check, then will handle over to VMSnapshotStrategy.
> >>>>>>>>>>>>>>>> In VMSnapshotStrategy implementation, it may just send a
> >>>>>>>>>>>>>>>> Create/revert/delete VMSnapshotCommand to hypervisor
> >>>>>> host, or
> >>>>>>>>>>>>>>>> do anything special operations.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> 2. fine-grained interface. Not only add a
> >>> VMSnapshotStrategy
> >>>>>>>>>>>>>>>> interface, but also add certain methods on the storage
> >>> driver.
> >>>>>>>>>>>>>>>> The VMSnapshotStrategy interface will be the same as
> >>> option 1.
> >>>>>>>>>>>>>>>> Will add the following methods on storage driver:
> >>>>>>>>>>>>>>>> /* volumesBelongToVM  is the list of volumes of the VM
> >>> that
> >>>>>>>>>>>>>>>> created on this storage, storage vendor can either take
> >>> one
> >>>>>>>>>>>>>>>> snapshot for this volumes in one shot, or take snapshot
> >>> for
> >>>>>> each volume separately
> >>>>>>>>>>>>>>>>   The pre-condition: vm is unquiesced.
> >>>>>>>>>>>>>>>>   It will return a Boolean to indicate, do need
> >>> unquiesce vm
> >>>>> or
> >>>>>> not.
> >>>>>>>>>>>>>>>>   In the default storage driver, it will return false.
> >>>>>>>>>>>>>>>> */
> >>>>>>>>>>>>>>>> boolean takeVMSnapshot(List<VolumeInfo>
> >>>>>> volumesBelongToVM,
> >>>>>>>>>>>>>>>> VMSnapshot vmSnapshot); Boolean
> >>>>>>>>>>>>>>>> revertVMSnapshot(List<VolumeInfo> volumesBelongToVM,
> >>>>>>>>>>>>>>>> VMSnapshot vmSnapshot); Boolean
> >>>>>>>>>>>>>>>> deleteVMSnapshot(List<VolumeInfo> volumesBelongToVM,
> >>>>>>>>>>>>>>>> VMSnapshot vmSNapshot);
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> The work flow will be: createVMSnapshot api ->
> >>>>>>>>>>>>>> VMSnapshotManagerImpl:
> >>>>>>>>>>>>>>>> creatVMSnapshot -> VMSnapshotStrategy: takeVMSnapshot ->
> >>>>>>>>>>>>>>>> storage driver:takeVMSnapshot In the implementation of
> >>>>>>>>>>>>>>>> VMSnapshotStrategy's takeVMSnapshot, the pseudo code
> >>>>>> looks like:
> >>>>>>>>>>>>>>>>   HypervisorHelper.quiesceVM(vm);
> >>>>>>>>>>>>>>>>   val volumes = vm.getVolumes();
> >>>>>>>>>>>>>>>>   val maps = new Map[driver, list[VolumeInfo]]();
> >>>>>>>>>>>>>>>>   Volumes.foreach(volume => maps.put(volume.getDriver,
> >>>>>> volume ::
> >>>>>>>>>>>>>>>> maps.get(volume.getdriver())))
> >>>>>>>>>>>>>>>>   val needUnquiesce = true;
> >>>>>>>>>>>>>>>>    maps.foreach((driver, volumes) => needUnquiesce  =
> >>>>>>>>>>>>>>>> needUnquiesce && driver.takeVMSnapshot(volumes))
> >>>>>>>>>>>>>>>>  if (needUnquiesce ) {
> >>>>>>>>>>>>>>>>   HypervisorHelper.unquiesce(vm); }
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> By default, the quiesceVM in HypervisorHelper will
> >>> actually
> >>>>>>>>>>>>>>>> take vm snapshot through hypervisor.
> >>>>>>>>>>>>>>>> Does above logic makes senesce?
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> The pros of option 1 is that: it's simple, no need to
> >>> change
> >>>>>>>>>>>>>>>> storage driver interfaces. The cons is that each storage
> >>>>>>>>>>>>>>>> vendor need to implement a strategy, maybe they will do
> >>> the
> >>>>>> same thing.
> >>>>>>>>>>>>>>>> The pros of option 2 is that, storage driver won't need to
> >>>>>>>>>>>>>>>> worry about how to quiesce/unquiesce vm. The cons is
> >>> that, it
> >>>>>>>>>>>>>>>> will add these methods on each storage drivers, so it
> >>> assumes
> >>>>>>>>>>>>>>>> that this work flow will work for everybody.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> So which option we should take? Or if you have other
> >>> options,
> >>>>>>>>>>>>>>>> please let's know.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>> *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>
> >>>>>>>>>>>>>>> *(tm)*
> >>>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> *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