as Alex suggested
updated vm-snapshot branch, commit ebca6890fd

1. remove snapshotting/revertting state from VM state machine
2  prevent VM state change if there are active vm snapshot tasks
3  change VMSnapshotService interface, except for ListVMSnapshotCmd,
need some time to replace it in QueryService, maybe after merging to
master
4  remove unused methods and fix some typos

Regards
Mice

2013/2/1 Mice Xia <mice_...@tcloudcomputing.com>:
> Hi, Alex,
>
> Thanks for your feedbacks, please see my comments inline.
>
> - VM states is designed for VM lifecycle.  Snapshot is not part of VM life 
> cycle so therefore the state should not be there.  I think it make sense to 
> add attributes to VM that says "Do Not Change State" and  who changed the VM 
> to that state.  Then virtualmachinemanager must obey that until the external 
> caller changes the attribute to now you can change state.  The would make 
> more sense and decouples snapshotting from vm lifecycle management.  
> Snapshotting then has it's own state (which I see it does already).  If we 
> want to reflect that a vm snapshot is being taken of a VM, that's a function 
> of the apiresponse module that gathers up everything about a vm but it 
> shouldn't be changed in the vm states.
>
> [mice] the reason that I added snapshotting/reverting state is that VM could 
> be in suspend/pause state during snapshoting/reverting, which is difficult to 
> be categorized into existing states; and during the process, VM should not be 
> allowed to take any operations; and by adding new states to VM, the 
> implementation seems more 'natural' and only minimum codes are changed to 
> virtualmachinemanager.
> Of course there are some other ways to prevent operations, such as check if 
> associated snapshots are in snapshotting/reverting states either in each 
> method (start/stop/migrate/delete...) or hook stateTransitTo(), but in this 
> way, it does not reflect VM's real state in hypervisor and more existing 
> codes will be touched.
>
> -  Does VM Revert operation work in the following way: Stop VM, restore to 
> snapshot, and run VM?  Shouldn't this be orchestration inside snapshot 
> manager?
>
> [mice] if a running VM is reverted to a memory enabled snapshot, current 
> implementation is running--> reverting-->running
> If a stopped VM is reverted to memory disabled snapshot: 
> stopped-->reverting->stopped
> If a running VM is reverted to a memory disabled snapshot: running--(Stop 
> VM)-->stopped-->reverting--> stopped
> If a stopped VM is reverted to a memory enabled snapshot: stopped--(Start 
> VM)-->running->reverting-->running
>
> These logics are implemented in snapshot manager.
>
> - Does VM snapshot interfere with volume snapshot?  Volume snapshot today 
> makes the assumption that it is the only code that's making snapshots and can 
> break if there are additional snapshots in between.  This is bad design in 
> volume snapshot but unfortunately that's how it's design.
>
> [mice] about volume snapshot, for xensever, if parent VHD cannot be found, it 
> will take a full volume snapshot (this indeed break current semantics but it 
> still works)
> For vmware, the volume snapshot is always a full one.
>
> - VMSnapshotService follows the other services in passing the cmds to the 
> service.  That's really a bad practice that we should stop.  Cmds are really 
> translations between over-the-wire api and java interface.  They shouldn't 
> have been passed to down to the java interface.
> [
> mice] I'll change it
>
> A small note: Would it be better to call it VM restore than VM revert?  
> Revert really should be RevertTo which I think is in the code but is not 
> consistent.  Some places it's just REVERT (for example, the event is just 
> revert).
>
> [mice] there is already RESTORE, which is restoring a destroyed VM to 
> stopped. RevertTo is fine with me.
>
> -Mice
>
>
> -----Original Message-----
> From: Alex Huang [mailto:alex.hu...@citrix.com]
> Sent: Friday, February 01, 2013 9:24 AM
> To: CloudStack DeveloperList
> Cc: Mice Xia
> Subject: RE: [MERGE] Support VM Snapshot
>
> Hi Mice,
>
> Sorry it took so long to review this.  Wanted to as soon as I saw it on the 
> list but was sick and didn't get a chance.  In general, I think the code is 
> excellent.  I'm impressed how much Cloudstack internal code in touch and how 
> comfortable the changes look.  Nicely done!
>
> I have a few comments:
> - VM states is designed for VM lifecycle.  Snapshot is not part of VM life 
> cycle so therefore the state should not be there.  I think it make sense to 
> add attributes to VM that says "Do Not Change State" and  who changed the VM 
> to that state.  Then virtualmachinemanager must obey that until the external 
> caller changes the attribute to now you can change state.  The would make 
> more sense and decouples snapshotting from vm lifecycle management.  
> Snapshotting then has it's own state (which I see it does already).  If we 
> want to reflect that a vm snapshot is being taken of a VM, that's a function 
> of the apiresponse module that gathers up everything about a vm but it 
> shouldn't be changed in the vm states.
> -  Does VM Revert operation work in the following way: Stop VM, restore to 
> snapshot, and run VM?  Shouldn't this be orchestration inside snapshot 
> manager?
> - Does VM snapshot interfere with volume snapshot?  Volume snapshot today 
> makes the assumption that it is the only code that's making snapshots and can 
> break if there are additional snapshots in between.  This is bad design in 
> volume snapshot but unfortunately that's how it's design.
> - VMSnapshotService follows the other services in passing the cmds to the 
> service.  That's really a bad practice that we should stop.  Cmds are really 
> translations between over-the-wire api and java interface.  They shouldn't 
> have been passed to down to the java interface.
>
> A small note: Would it be better to call it VM restore than VM revert?  
> Revert really should be RevertTo which I think is in the code but is not 
> consistent.  Some places it's just REVERT (for example, the event is just 
> revert).
>
> --Alex
>
>> -----Original Message-----
>> From: Chiradeep Vittal
>> Sent: Wednesday, January 30, 2013 4:44 PM
>> To: CloudStack DeveloperList
>> Cc: Alex Huang
>> Subject: Re: [MERGE] Support VM Snapshot
>>
>> Can we get Alex to review this? He is the designer of the state machine.
>>
>> On 1/30/13 5:26 AM, "Murali Reddy" <murali.re...@citrix.com> wrote:
>>
>> >On 30/01/13 2:24 PM, "Mice Xia" <mice_...@tcloudcomputing.com> wrote:
>> >
>> >>Agreed.
>> >>Adding VM states are likely to have some side-effects, but for
>> >>moveVMToUser case, does it explicitly reject other transient states
>> >>such as stating/stopping/migrating?
>> >>
>> >>-Mice
>> >
>> >No, it just accepts any state other than 'Running' (though it should
>> >have checked for the valid states in which VM can move to other user).
>> >
>> >I am just saying, there could such VM state based assumptions, you
>> >might want to check.
>> >
>

Reply via email to