[ https://issues.apache.org/jira/browse/CLOUDSTACK-9539?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15824500#comment-15824500 ]
ASF GitHub Bot commented on CLOUDSTACK-9539: -------------------------------------------- Github user nvazquez commented on a diff in the pull request: https://github.com/apache/cloudstack/pull/1727#discussion_r96294371 --- Diff: server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java --- @@ -707,16 +802,41 @@ private UserVm orchestrateRevertToVMSnapshot(Long vmSnapshotId) throws Insuffici throw new InvalidParameterValueException("There is other active vm snapshot tasks on the instance, please try again later"); } + revertUserVmDetailsFromVmSnapshot(userVm, vmSnapshotVo); + try { VMSnapshotStrategy strategy = findVMSnapshotStrategy(vmSnapshotVo); strategy.revertVMSnapshot(vmSnapshotVo); + updateUserVmServiceOffering(userVm, vmSnapshotVo); return userVm; } catch (Exception e) { s_logger.debug("Failed to revert vmsnapshot: " + vmSnapshotId, e); throw new CloudRuntimeException(e.getMessage()); } } + /** + * Update or add user vm details from vm snapshot for vms with custom service offerings + * @param userVm user vm + * @param vmSnapshotVo vm snapshot + */ + private void revertUserVmDetailsFromVmSnapshot(UserVmVO userVm, VMSnapshotVO vmSnapshotVo) { + ServiceOfferingVO serviceOfferingVO = _serviceOfferingDao.findById(vmSnapshotVo.getServiceOfferingId()); + if (serviceOfferingVO.isDynamic()) { + List<VMSnapshotDetailsVO> vmSnapshotDetails = _vmSnapshotDetailsDao.listDetails(vmSnapshotVo.getId()); + for (VMSnapshotDetailsVO detail : vmSnapshotDetails) { --- End diff -- Done, thanks! > Support changing Service offering for instance with VM Snapshots > ---------------------------------------------------------------- > > Key: CLOUDSTACK-9539 > URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9539 > Project: CloudStack > Issue Type: Bug > Security Level: Public(Anyone can view this level - this is the > default.) > Reporter: Nicolas Vazquez > Assignee: Nicolas Vazquez > > h3. Actual behaviour > CloudStack doesn't support changing service offering for vm instances which > have vm snapshots, they should be removed before changing service offering. > h3. Goal > Extend actual behaviour by supporting changing service offering for vms which > have vm snapshots. In that case, previously taken snapshots (if reverted) > should use previous service offering, future snapshots should use the newest. > h3. Proposed solution: > 1. Adding {{service_offering_id}} column on {{vm_snapshots}} table: This way > snapshot can be reverted to original state even though service offering can > be changed for vm instance. > NOTE: Existing vm snapshots are populated on update script by {{UPDATE > vm_snapshots s JOIN vm_instance v ON v.id = s.vm_id SET s.service_offering_id > = v.service_offering_id;}} > 2. New vm snapshots will use instance vm service offering id as > {{service_offering_id}} > 3. Revert to vm snapshots should use vm snapshot's {{service_offering_id}} > value. > h3. Example use case: > - Deploy vm using service offering A > - Take vm snapshot -> snap1 (service offering A) > - Stop vm > - Change vm service offering to B > - Revert to VM snapshot snap 1 > - Start vm > It is expected that vm has service offering A after last step -- This message was sent by Atlassian JIRA (v6.3.4#6332)