Remove .java.orig file

Left over from somebodies editor?


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/227509be
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/227509be
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/227509be

Branch: refs/heads/master
Commit: 227509be46f765b724c1d2d858dc8b244bdbf330
Parents: 04f378b
Author: Wido den Hollander <[email protected]>
Authored: Tue Aug 13 16:25:09 2013 +0200
Committer: Wido den Hollander <[email protected]>
Committed: Tue Aug 13 16:25:09 2013 +0200

----------------------------------------------------------------------
 .../vm/snapshot/VMSnapshotManagerImpl.java.orig | 913 -------------------
 1 file changed, 913 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/227509be/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java.orig
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java.orig 
b/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java.orig
deleted file mode 100644
index b258fa7..0000000
--- a/server/src/com/cloud/vm/snapshot/VMSnapshotManagerImpl.java.orig
+++ /dev/null
@@ -1,913 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package com.cloud.vm.snapshot;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import org.apache.cloudstack.api.command.user.vmsnapshot.ListVMSnapshotCmd;
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.CreateVMSnapshotAnswer;
-import com.cloud.agent.api.CreateVMSnapshotCommand;
-import com.cloud.agent.api.DeleteVMSnapshotAnswer;
-import com.cloud.agent.api.DeleteVMSnapshotCommand;
-import com.cloud.agent.api.RevertToVMSnapshotAnswer;
-import com.cloud.agent.api.RevertToVMSnapshotCommand;
-import com.cloud.agent.api.VMSnapshotTO;
-import com.cloud.agent.api.to.VolumeTO;
-import com.cloud.configuration.dao.ConfigurationDao;
-import com.cloud.event.ActionEvent;
-import com.cloud.event.EventTypes;
-import com.cloud.event.UsageEventUtils;
-import com.cloud.exception.AgentUnavailableException;
-import com.cloud.exception.ConcurrentOperationException;
-import com.cloud.exception.InsufficientCapacityException;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.exception.OperationTimedoutException;
-import com.cloud.exception.ResourceAllocationException;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.host.Host;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.hypervisor.HypervisorGuruManager;
-import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
-import com.cloud.projects.Project.ListProjectResourcesCriteria;
-import com.cloud.service.dao.ServiceOfferingDao;
-import com.cloud.storage.DiskOfferingVO;
-import com.cloud.storage.GuestOSVO;
-import com.cloud.storage.Snapshot;
-import com.cloud.storage.SnapshotVO;
-import com.cloud.storage.StoragePool;
-import com.cloud.storage.VolumeVO;
-import com.cloud.storage.dao.DiskOfferingDao;
-import com.cloud.storage.dao.GuestOSDao;
-import com.cloud.storage.dao.SnapshotDao;
-import com.cloud.storage.dao.VolumeDao;
-import com.cloud.user.Account;
-import com.cloud.user.AccountManager;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.user.dao.UserDao;
-import com.cloud.uservm.UserVm;
-import com.cloud.utils.DateUtil;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.Ternary;
-import com.cloud.utils.component.ManagerBase;
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.Filter;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.Transaction;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.fsm.NoTransitionException;
-import com.cloud.utils.fsm.StateMachine2;
-import com.cloud.vm.UserVmVO;
-import com.cloud.vm.VMInstanceVO;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachine.State;
-import com.cloud.vm.VirtualMachineManager;
-import com.cloud.vm.VirtualMachineProfile;
-import com.cloud.vm.dao.UserVmDao;
-import com.cloud.vm.dao.VMInstanceDao;
-import com.cloud.vm.snapshot.dao.VMSnapshotDao;
-
-@Component
-@Local(value = { VMSnapshotManager.class, VMSnapshotService.class })
-public class VMSnapshotManagerImpl extends ManagerBase implements 
VMSnapshotManager, VMSnapshotService {
-    private static final Logger s_logger = 
Logger.getLogger(VMSnapshotManagerImpl.class);
-    String _name;
-    @Inject VMSnapshotDao _vmSnapshotDao;
-    @Inject VolumeDao _volumeDao;
-    @Inject AccountDao _accountDao;
-    @Inject VMInstanceDao _vmInstanceDao;
-    @Inject UserVmDao _userVMDao;
-    @Inject HostDao _hostDao;
-    @Inject UserDao _userDao;
-    @Inject AgentManager _agentMgr;
-    @Inject HypervisorGuruManager _hvGuruMgr;
-    @Inject AccountManager _accountMgr;
-    @Inject GuestOSDao _guestOSDao;
-    @Inject PrimaryDataStoreDao _storagePoolDao;
-    @Inject SnapshotDao _snapshotDao;
-    @Inject VirtualMachineManager _itMgr;
-    @Inject DataStoreManager dataStoreMgr;
-    @Inject ConfigurationDao _configDao;
-    @Inject HypervisorCapabilitiesDao _hypervisorCapabilitiesDao;
-    @Inject DiskOfferingDao _diskOfferingDao;
-    @Inject ServiceOfferingDao _serviceOfferingDao;
-    int _vmSnapshotMax;
-    int _wait;
-    StateMachine2<VMSnapshot.State, VMSnapshot.Event, VMSnapshot> 
_vmSnapshottateMachine ;
-
-    @Override
-    public boolean configure(String name, Map<String, Object> params) throws 
ConfigurationException {
-        _name = name;
-        if (_configDao == null) {
-            throw new ConfigurationException(
-                    "Unable to get the configuration dao.");
-        }
-
-        _vmSnapshotMax = 
NumbersUtil.parseInt(_configDao.getValue("vmsnapshot.max"), VMSNAPSHOTMAX);
-        
-        String value = _configDao.getValue("vmsnapshot.create.wait");
-        _wait = NumbersUtil.parseInt(value, 1800);
-
-        _vmSnapshottateMachine   = VMSnapshot.State.getStateMachine();
-        return true;
-    }
-
-    @Override
-    public boolean start() {
-        return true;
-    }
-
-    @Override
-    public boolean stop() {
-        return true;
-    }
-
-    @Override
-    public List<VMSnapshotVO> listVMSnapshots(ListVMSnapshotCmd cmd) {
-        Account caller = getCaller();
-        List<Long> permittedAccounts = new ArrayList<Long>();
-
-        boolean listAll = cmd.listAll();
-        Long id = cmd.getId();
-        Long vmId = cmd.getVmId();
-        
-        String state = cmd.getState();
-        String keyword = cmd.getKeyword();
-        String name = cmd.getVmSnapshotName();
-        String accountName = cmd.getAccountName();
-
-        Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(
-                cmd.getDomainId(), cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll,
-                false);
-        Long domainId = domainIdRecursiveListProject.first();
-        Boolean isRecursive = domainIdRecursiveListProject.second();
-        ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
-
-        Filter searchFilter = new Filter(VMSnapshotVO.class, "created", false, 
cmd.getStartIndex(), cmd.getPageSizeVal());
-        SearchBuilder<VMSnapshotVO> sb = _vmSnapshotDao.createSearchBuilder();
-        _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
-
-        sb.and("vm_id", sb.entity().getVmId(), SearchCriteria.Op.EQ);
-        sb.and("domain_id", sb.entity().getDomainId(), SearchCriteria.Op.EQ);
-        sb.and("status", sb.entity().getState(), SearchCriteria.Op.IN);
-        sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
-        sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
-        sb.and("display_name", sb.entity().getDisplayName(), 
SearchCriteria.Op.EQ);
-        sb.and("account_id", sb.entity().getAccountId(), SearchCriteria.Op.EQ);
-        sb.done();
-
-        SearchCriteria<VMSnapshotVO> sc = sb.create();
-        _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
-
-        if (accountName != null && cmd.getDomainId() != null) {
-            Account account = _accountMgr.getActiveAccountByName(accountName, 
cmd.getDomainId());
-            sc.setParameters("account_id", account.getId());
-        }
-
-        if (vmId != null) {
-            sc.setParameters("vm_id", vmId);
-        }
-
-        if (domainId != null) {
-            sc.setParameters("domain_id", domainId);
-        }
-
-        if (state == null) {
-            VMSnapshot.State[] status = { VMSnapshot.State.Ready, 
VMSnapshot.State.Creating, VMSnapshot.State.Allocated,
-                    VMSnapshot.State.Error, VMSnapshot.State.Expunging, 
VMSnapshot.State.Reverting };
-            sc.setParameters("status", (Object[]) status);
-        } else {
-            sc.setParameters("state", state);
-        }
-
-        if (name != null) {
-            sc.setParameters("display_name", name);
-        }
-
-        if (keyword != null) {
-            SearchCriteria<VMSnapshotVO> ssc = 
_vmSnapshotDao.createSearchCriteria();
-            ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
-            ssc.addOr("display_name", SearchCriteria.Op.LIKE, "%" + keyword + 
"%");
-            ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + 
"%");
-            sc.addAnd("name", SearchCriteria.Op.SC, ssc);
-        }
-
-        if (id != null) {
-            sc.setParameters("id", id);
-        }
-
-        return _vmSnapshotDao.search(sc, searchFilter);
-    
-    }
-
-    protected Account getCaller(){
-        return CallContext.current().getCallingAccount();
-    }
-    
-    @Override
-    public VMSnapshot allocVMSnapshot(Long vmId, String vsDisplayName, String 
vsDescription, Boolean snapshotMemory)
-            throws ResourceAllocationException {
-
-        Account caller = getCaller();
-
-        // check if VM exists
-        UserVmVO userVmVo = _userVMDao.findById(vmId);
-        if (userVmVo == null) {
-            throw new InvalidParameterValueException("Creating VM snapshot 
failed due to VM:" + vmId + " is a system VM or does not exist");
-        }
-
-        // check hypervisor capabilities
-        
if(!_hypervisorCapabilitiesDao.isVmSnapshotEnabled(userVmVo.getHypervisorType(),
 "default"))
-            throw new InvalidParameterValueException("VM snapshot is not 
enabled for hypervisor type: " + userVmVo.getHypervisorType());
-
-        // parameter length check
-        if(vsDisplayName != null && vsDisplayName.length()>255)
-            throw new InvalidParameterValueException("Creating VM snapshot 
failed due to length of VM snapshot vsDisplayName should not exceed 255");
-        if(vsDescription != null && vsDescription.length()>255)
-            throw new InvalidParameterValueException("Creating VM snapshot 
failed due to length of VM snapshot vsDescription should not exceed 255");
-        
-        // VM snapshot display name must be unique for a VM
-        String timeString = 
DateUtil.getDateDisplayString(DateUtil.GMT_TIMEZONE, new Date(), 
DateUtil.YYYYMMDD_FORMAT);
-        String vmSnapshotName = userVmVo.getInstanceName() + "_VS_" + 
timeString;
-        if (vsDisplayName == null) {
-            vsDisplayName = vmSnapshotName;
-        }
-        if(_vmSnapshotDao.findByName(vmId,vsDisplayName) != null){
-            throw new InvalidParameterValueException("Creating VM snapshot 
failed due to VM snapshot with name" + vsDisplayName + "  already exists");
-        }
-        
-        // check VM state
-        if (userVmVo.getState() != VirtualMachine.State.Running && 
userVmVo.getState() != VirtualMachine.State.Stopped) {
-            throw new InvalidParameterValueException("Creating vm snapshot 
failed due to VM:" + vmId + " is not in the running or Stopped state");
-        }
-        
-        if(snapshotMemory && userVmVo.getState() == 
VirtualMachine.State.Stopped){
-            throw new InvalidParameterValueException("Can not snapshot memory 
when VM is in stopped state");
-        }
-        
-        // for KVM, only allow snapshot with memory when VM is in running state
-        if(userVmVo.getHypervisorType() == HypervisorType.KVM && 
userVmVo.getState() == State.Running && !snapshotMemory){
-            throw new InvalidParameterValueException("KVM VM does not allow to 
take a disk-only snapshot when VM is in running state");
-        }
-        
-        // check access
-        _accountMgr.checkAccess(caller, null, true, userVmVo);
-
-        // check max snapshot limit for per VM
-        if (_vmSnapshotDao.findByVm(vmId).size() >= _vmSnapshotMax) {
-            throw new CloudRuntimeException("Creating vm snapshot failed due 
to a VM can just have : " + _vmSnapshotMax
-                    + " VM snapshots. Please delete old ones");
-        }
-
-        // check if there are active volume snapshots tasks
-        List<VolumeVO> listVolumes = _volumeDao.findByInstance(vmId);
-        for (VolumeVO volume : listVolumes) {
-            List<SnapshotVO> activeSnapshots = 
_snapshotDao.listByInstanceId(volume.getInstanceId(), Snapshot.State.Creating,
-                    Snapshot.State.CreatedOnPrimary, Snapshot.State.BackingUp);
-            if (activeSnapshots.size() > 0) {
-                throw new CloudRuntimeException(
-                        "There is other active volume snapshot tasks on the 
instance to which the volume is attached, please try again later.");
-            }
-        }
-        
-        // check if there are other active VM snapshot tasks
-        if (hasActiveVMSnapshotTasks(vmId)) {
-            throw new CloudRuntimeException("There is other active vm snapshot 
tasks on the instance, please try again later");
-        }
-        
-        VMSnapshot.Type vmSnapshotType = VMSnapshot.Type.Disk;
-        if(snapshotMemory && userVmVo.getState() == 
VirtualMachine.State.Running)
-            vmSnapshotType = VMSnapshot.Type.DiskAndMemory;
-        
-        try {
-            VMSnapshotVO vmSnapshotVo = new 
VMSnapshotVO(userVmVo.getAccountId(), userVmVo.getDomainId(), vmId, 
vsDescription, vmSnapshotName,
-                    vsDisplayName, userVmVo.getServiceOfferingId(), 
vmSnapshotType, null);
-            VMSnapshot vmSnapshot = _vmSnapshotDao.persist(vmSnapshotVo);
-            if (vmSnapshot == null) {
-                throw new CloudRuntimeException("Failed to create snapshot for 
vm: " + vmId);
-            }
-            return vmSnapshot;
-        } catch (Exception e) {
-            String msg = e.getMessage();
-            s_logger.error("Create vm snapshot record failed for vm: " + vmId 
+ " due to: " + msg);
-        }
-        return null;
-    }
-
-    @Override
-    public String getName() {
-        return _name;
-    }
-
-    @Override
-    @ActionEvent(eventType = EventTypes.EVENT_VM_SNAPSHOT_CREATE, 
eventDescription = "creating VM snapshot", async = true)
-    public VMSnapshot creatVMSnapshot(Long vmId, Long vmSnapshotId) {
-        UserVmVO userVm = _userVMDao.findById(vmId);
-        if (userVm == null) {
-            throw new InvalidParameterValueException("Create vm to snapshot 
failed due to vm: " + vmId + " is not found");
-        }
-        VMSnapshotVO vmSnapshot = _vmSnapshotDao.findById(vmSnapshotId);
-        if(vmSnapshot == null){
-            throw new CloudRuntimeException("VM snapshot id: " + vmSnapshotId 
+ " can not be found");
-        }
-        Long hostId = pickRunningHost(vmId);
-        try {
-            vmSnapshotStateTransitTo(vmSnapshot, 
VMSnapshot.Event.CreateRequested);
-        } catch (NoTransitionException e) {
-            throw new CloudRuntimeException(e.getMessage());
-        }
-        return createVmSnapshotInternal(userVm, vmSnapshot, hostId);
-    }
-
-    protected VMSnapshot createVmSnapshotInternal(UserVmVO userVm, 
VMSnapshotVO vmSnapshot, Long hostId) {
-<<<<<<< HEAD
-        try {
-            CreateVMSnapshotAnswer answer = null;
-=======
-        CreateVMSnapshotAnswer answer = null;
-        try {
->>>>>>> acd2396... fix CLOUDSTACK-3591 add usage recording for VM snapshots
-            GuestOSVO guestOS = _guestOSDao.findById(userVm.getGuestOSId());
-            
-            // prepare snapshotVolumeTos
-            List<VolumeTO> volumeTOs = getVolumeTOList(userVm.getId());
-            
-            // prepare target snapshotTO and its parent snapshot (current 
snapshot)
-            VMSnapshotTO current = null;
-            VMSnapshotVO currentSnapshot = 
_vmSnapshotDao.findCurrentSnapshotByVmId(userVm.getId());
-            if (currentSnapshot != null)
-                current = getSnapshotWithParents(currentSnapshot);
-            VMSnapshotTO target = new VMSnapshotTO(vmSnapshot.getId(),  
vmSnapshot.getName(), vmSnapshot.getType(), null, vmSnapshot.getDescription(), 
false,
-                    current);
-            if (current == null)
-                vmSnapshot.setParent(null);
-            else
-                vmSnapshot.setParent(current.getId());
-
-            CreateVMSnapshotCommand ccmd = new 
CreateVMSnapshotCommand(userVm.getInstanceName(),target ,volumeTOs, 
guestOS.getDisplayName(),userVm.getState());
-            ccmd.setWait(_wait);
-            
-            answer = (CreateVMSnapshotAnswer) sendToPool(hostId, ccmd);
-            if (answer != null && answer.getResult()) {
-                processAnswer(vmSnapshot, userVm, answer, hostId);
-                s_logger.debug("Create vm snapshot " + vmSnapshot.getName() + 
" succeeded for vm: " + userVm.getInstanceName());
-            }else{
-                
-                String errMsg = "Creating VM snapshot: " + 
vmSnapshot.getName() + " failed";
-                if(answer != null && answer.getDetails() != null)
-                    errMsg = errMsg + " due to " + answer.getDetails();
-                s_logger.error(errMsg);
-                vmSnapshotStateTransitTo(vmSnapshot, 
VMSnapshot.Event.OperationFailed);
-                throw new CloudRuntimeException(errMsg);
-            }
-            return vmSnapshot;
-        } catch (Exception e) {
-            if(e instanceof AgentUnavailableException){
-                try {
-                    vmSnapshotStateTransitTo(vmSnapshot, 
VMSnapshot.Event.OperationFailed);
-                } catch (NoTransitionException e1) {
-                    s_logger.error("Cannot set vm snapshot state due to: " + 
e1.getMessage());
-                }
-            }
-            String msg = e.getMessage();
-            s_logger.error("Create vm snapshot " + vmSnapshot.getName() + " 
failed for vm: " + userVm.getInstanceName() + " due to " + msg);
-            throw new CloudRuntimeException(msg);
-        } finally{
-            if(vmSnapshot.getState() == VMSnapshot.State.Allocated){
-                s_logger.warn("Create vm snapshot " + vmSnapshot.getName() + " 
failed for vm: " + userVm.getInstanceName());
-                _vmSnapshotDao.remove(vmSnapshot.getId());
-            }
-            if(vmSnapshot.getState() == VMSnapshot.State.Ready && answer != 
null){
-                for (VolumeTO volumeTo : answer.getVolumeTOs()){
-                    
publishUsageEvent(EventTypes.EVENT_VM_SNAPSHOT_CREATE,vmSnapshot,userVm,volumeTo);
-                }
-            }
-        }
-    }
-
-    private void publishUsageEvent(String type, VMSnapshot vmSnapshot, UserVm 
userVm, VolumeTO volumeTo){
-        VolumeVO volume = _volumeDao.findById(volumeTo.getId());
-        Long diskOfferingId = volume.getDiskOfferingId();
-        Long offeringId = null;
-        if (diskOfferingId != null) {
-            DiskOfferingVO offering = 
_diskOfferingDao.findById(diskOfferingId);
-            if (offering != null
-                    && (offering.getType() == DiskOfferingVO.Type.Disk)) {
-                offeringId = offering.getId();
-            }
-        }
-        UsageEventUtils.publishUsageEvent(
-                type,
-                vmSnapshot.getAccountId(),
-                userVm.getDataCenterId(),
-                userVm.getId(),
-                vmSnapshot.getName(),
-                offeringId,     
-                volume.getId(), // save volume's id into templateId field
-                volumeTo.getChainSize(),
-                VMSnapshot.class.getName(), vmSnapshot.getUuid());       
-    }
-    
-    protected List<VolumeTO> getVolumeTOList(Long vmId) {
-        List<VolumeTO> volumeTOs = new ArrayList<VolumeTO>();
-        List<VolumeVO> volumeVos = _volumeDao.findByInstance(vmId);
-        
-        for (VolumeVO volume : volumeVos) {
-            StoragePool pool = 
(StoragePool)dataStoreMgr.getPrimaryDataStore(volume.getPoolId());
-            VolumeTO volumeTO = new VolumeTO(volume, pool);
-            volumeTOs.add(volumeTO);
-        }
-        return volumeTOs;
-    }
-
-    // get snapshot and its parents recursively
-    private VMSnapshotTO getSnapshotWithParents(VMSnapshotVO snapshot) {
-        Map<Long, VMSnapshotVO> snapshotMap = new HashMap<Long, 
VMSnapshotVO>();
-        List<VMSnapshotVO> allSnapshots = 
_vmSnapshotDao.findByVm(snapshot.getVmId());
-        for (VMSnapshotVO vmSnapshotVO : allSnapshots) {
-            snapshotMap.put(vmSnapshotVO.getId(), vmSnapshotVO);
-        }
-
-        VMSnapshotTO currentTO = convert2VMSnapshotTO(snapshot);
-        VMSnapshotTO result = currentTO;
-        VMSnapshotVO current = snapshot;
-        while (current.getParent() != null) {
-            VMSnapshotVO parent = snapshotMap.get(current.getParent());
-            currentTO.setParent(convert2VMSnapshotTO(parent));
-            current = snapshotMap.get(current.getParent());
-            currentTO = currentTO.getParent();
-        }
-        return result;
-    }
-
-    private VMSnapshotTO convert2VMSnapshotTO(VMSnapshotVO vo) {
-        return new VMSnapshotTO(vo.getId(), vo.getName(),  vo.getType(), 
vo.getCreated().getTime(), vo.getDescription(),
-                vo.getCurrent(), null);
-    }
-
-    protected boolean vmSnapshotStateTransitTo(VMSnapshotVO vsnp, 
VMSnapshot.Event event) throws NoTransitionException {
-        return _vmSnapshottateMachine.transitTo(vsnp, event, null, 
_vmSnapshotDao);
-    }
-    
-    @DB
-    protected void processAnswer(VMSnapshotVO vmSnapshot, UserVmVO  userVm, 
Answer as, Long hostId) {
-        final Transaction txn = Transaction.currentTxn();
-        try {
-            txn.start();
-            if (as instanceof CreateVMSnapshotAnswer) {
-                CreateVMSnapshotAnswer answer = (CreateVMSnapshotAnswer) as;
-                finalizeCreate(vmSnapshot, answer.getVolumeTOs());
-                vmSnapshotStateTransitTo(vmSnapshot, 
VMSnapshot.Event.OperationSucceeded);
-            } else if (as instanceof RevertToVMSnapshotAnswer) {
-                RevertToVMSnapshotAnswer answer = (RevertToVMSnapshotAnswer) 
as;
-                finalizeRevert(vmSnapshot, answer.getVolumeTOs());
-                vmSnapshotStateTransitTo(vmSnapshot, 
VMSnapshot.Event.OperationSucceeded);
-            } else if (as instanceof DeleteVMSnapshotAnswer) {
-                DeleteVMSnapshotAnswer answer = (DeleteVMSnapshotAnswer) as;
-                finalizeDelete(vmSnapshot, answer.getVolumeTOs());
-                _vmSnapshotDao.remove(vmSnapshot.getId());
-            }
-            txn.commit();
-        } catch (Exception e) {
-            String errMsg = "Error while process answer: " + as.getClass() + " 
due to " + e.getMessage();
-            s_logger.error(errMsg, e);
-            txn.rollback();
-            throw new CloudRuntimeException(errMsg);
-        } finally {
-            txn.close();
-        }
-    }
-
-    protected void finalizeDelete(VMSnapshotVO vmSnapshot, List<VolumeTO> 
VolumeTOs) {
-        // update volumes path
-        updateVolumePath(VolumeTOs);
-        
-        // update children's parent snapshots
-        List<VMSnapshotVO> children= 
_vmSnapshotDao.listByParent(vmSnapshot.getId());
-        for (VMSnapshotVO child : children) {
-            child.setParent(vmSnapshot.getParent());
-            _vmSnapshotDao.persist(child);
-        }
-        
-        // update current snapshot
-        VMSnapshotVO current = 
_vmSnapshotDao.findCurrentSnapshotByVmId(vmSnapshot.getVmId());
-        if(current != null && current.getId() == vmSnapshot.getId() && 
vmSnapshot.getParent() != null){
-            VMSnapshotVO parent = 
_vmSnapshotDao.findById(vmSnapshot.getParent());
-            parent.setCurrent(true);
-            _vmSnapshotDao.persist(parent);
-        }
-        vmSnapshot.setCurrent(false);
-        _vmSnapshotDao.persist(vmSnapshot);
-    }
-
-    protected void finalizeCreate(VMSnapshotVO vmSnapshot, List<VolumeTO> 
VolumeTOs) {
-        // update volumes path
-        updateVolumePath(VolumeTOs);
-        
-        vmSnapshot.setCurrent(true);
-        
-        // change current snapshot
-        if (vmSnapshot.getParent() != null) {
-            VMSnapshotVO previousCurrent = 
_vmSnapshotDao.findById(vmSnapshot.getParent());
-            previousCurrent.setCurrent(false);
-            _vmSnapshotDao.persist(previousCurrent);
-        }
-        _vmSnapshotDao.persist(vmSnapshot);
-    }
-
-    protected void finalizeRevert(VMSnapshotVO vmSnapshot, List<VolumeTO> 
volumeToList) {
-        // update volumes path
-        updateVolumePath(volumeToList);
-
-        // update current snapshot, current snapshot is the one reverted to
-        VMSnapshotVO previousCurrent = 
_vmSnapshotDao.findCurrentSnapshotByVmId(vmSnapshot.getVmId());
-        if(previousCurrent != null){
-            previousCurrent.setCurrent(false);
-            _vmSnapshotDao.persist(previousCurrent);
-        }
-        vmSnapshot.setCurrent(true);
-        _vmSnapshotDao.persist(vmSnapshot);
-    }
-
-    private void updateVolumePath(List<VolumeTO> volumeTOs) {
-        for (VolumeTO volume : volumeTOs) {
-            if (volume.getPath() != null) {
-                VolumeVO volumeVO = _volumeDao.findById(volume.getId());
-                volumeVO.setPath(volume.getPath());
-                volumeVO.setVmSnapshotChainSize(volume.getChainSize());
-                _volumeDao.persist(volumeVO);
-            }
-        }
-    }
-    
-    public VMSnapshotManagerImpl() {
-        
-    }
-    
-    protected Answer sendToPool(Long hostId, Command cmd) throws 
AgentUnavailableException, OperationTimedoutException {
-        long targetHostId = 
_hvGuruMgr.getGuruProcessedCommandTargetHost(hostId, cmd);
-        Answer answer = _agentMgr.send(targetHostId, cmd);
-        return answer;
-    }
-    
-    @Override
-    public boolean hasActiveVMSnapshotTasks(Long vmId){
-        List<VMSnapshotVO> activeVMSnapshots = 
_vmSnapshotDao.listByInstanceId(vmId,
-                VMSnapshot.State.Creating, 
VMSnapshot.State.Expunging,VMSnapshot.State.Reverting,VMSnapshot.State.Allocated);
-        return activeVMSnapshots.size() > 0;
-    }
-
-    @Override
-    @ActionEvent(eventType = EventTypes.EVENT_VM_SNAPSHOT_DELETE, 
eventDescription = "delete vm snapshots", async=true)
-    public boolean deleteVMSnapshot(Long vmSnapshotId) {
-        Account caller = getCaller();
-
-        VMSnapshotVO vmSnapshot = _vmSnapshotDao.findById(vmSnapshotId);
-        if (vmSnapshot == null) {
-            throw new InvalidParameterValueException("unable to find the vm 
snapshot with id " + vmSnapshotId);
-        }
-
-        _accountMgr.checkAccess(caller, null, true, vmSnapshot);
-        
-        // check VM snapshot states, only allow to delete vm snapshots in 
created and error state
-        if (VMSnapshot.State.Ready != vmSnapshot.getState() && 
VMSnapshot.State.Expunging != vmSnapshot.getState() && VMSnapshot.State.Error 
!= vmSnapshot.getState()) {
-            throw new InvalidParameterValueException("Can't delete the vm 
snapshotshot " + vmSnapshotId + " due to it is not in Created or Error, or 
Expunging State");
-        }
-        
-        // check if there are other active VM snapshot tasks
-        if (hasActiveVMSnapshotTasks(vmSnapshot.getVmId())) {
-            List<VMSnapshotVO> expungingSnapshots = 
_vmSnapshotDao.listByInstanceId(vmSnapshot.getVmId(), 
VMSnapshot.State.Expunging);
-            if(expungingSnapshots.size() > 0 && 
expungingSnapshots.get(0).getId() == vmSnapshot.getId())
-                s_logger.debug("Target VM snapshot already in expunging state, 
go on deleting it: " + vmSnapshot.getDisplayName());
-            else
-                throw new InvalidParameterValueException("There is other 
active vm snapshot tasks on the instance, please try again later");
-        }
-
-        if(vmSnapshot.getState() == VMSnapshot.State.Allocated){
-            return _vmSnapshotDao.remove(vmSnapshot.getId());
-        }else{
-            return deleteSnapshotInternal(vmSnapshot);
-        }
-    }
-
-    @DB
-    protected boolean deleteSnapshotInternal(VMSnapshotVO vmSnapshot) {
-        UserVmVO userVm = _userVMDao.findById(vmSnapshot.getVmId());
-        DeleteVMSnapshotAnswer answer = null;
-        try {
-            
vmSnapshotStateTransitTo(vmSnapshot,VMSnapshot.Event.ExpungeRequested);
-            Long hostId = pickRunningHost(vmSnapshot.getVmId());
-
-            // prepare snapshotVolumeTos
-            List<VolumeTO> volumeTOs = getVolumeTOList(vmSnapshot.getVmId());
-            
-            // prepare DeleteVMSnapshotCommand
-            String vmInstanceName = userVm.getInstanceName();
-            VMSnapshotTO parent = 
getSnapshotWithParents(vmSnapshot).getParent();
-            VMSnapshotTO vmSnapshotTO = new VMSnapshotTO(vmSnapshot.getId(), 
vmSnapshot.getName(), vmSnapshot.getType(),
-                    vmSnapshot.getCreated().getTime(), 
vmSnapshot.getDescription(), vmSnapshot.getCurrent(), parent);
-            GuestOSVO guestOS = _guestOSDao.findById(userVm.getGuestOSId());
-            DeleteVMSnapshotCommand deleteSnapshotCommand = new 
DeleteVMSnapshotCommand(vmInstanceName, vmSnapshotTO, 
volumeTOs,guestOS.getDisplayName());
-            
-            answer = (DeleteVMSnapshotAnswer) sendToPool(hostId, 
deleteSnapshotCommand);
-           
-            if (answer != null && answer.getResult()) {
-                processAnswer(vmSnapshot, userVm, answer, hostId);
-                s_logger.debug("Delete VM snapshot " + vmSnapshot.getName() + 
" succeeded for vm: " + userVm.getInstanceName());
-                return true;
-            } else {
-                s_logger.error("Delete vm snapshot " + vmSnapshot.getName() + 
" of vm " + userVm.getInstanceName() + " failed due to " + answer.getDetails());
-                return false;
-            }
-        } catch (Exception e) {
-            String msg = "Delete vm snapshot " + vmSnapshot.getName() + " of 
vm " + userVm.getInstanceName() + " failed due to " + e.getMessage();
-            s_logger.error(msg , e);
-            throw new CloudRuntimeException(e.getMessage());
-        } finally{
-            if(answer != null && answer.getResult()){
-                for (VolumeTO volumeTo : answer.getVolumeTOs()){
-                    
publishUsageEvent(EventTypes.EVENT_VM_SNAPSHOT_DELETE,vmSnapshot,userVm,volumeTo);
-                }
-            }
-        }
-    }
-
-    @Override
-    @ActionEvent(eventType = EventTypes.EVENT_VM_SNAPSHOT_REVERT, 
eventDescription = "revert to VM snapshot", async = true)
-    public UserVm revertToSnapshot(Long vmSnapshotId) throws 
InsufficientCapacityException, ResourceUnavailableException, 
ConcurrentOperationException {
-
-        // check if VM snapshot exists in DB
-        VMSnapshotVO vmSnapshotVo = _vmSnapshotDao.findById(vmSnapshotId);
-        if (vmSnapshotVo == null) {
-            throw new InvalidParameterValueException(
-                    "unable to find the vm snapshot with id " + vmSnapshotId);
-        }
-        Long vmId = vmSnapshotVo.getVmId();
-        UserVmVO userVm = _userVMDao.findById(vmId);
-        // check if VM exists
-        if (userVm == null) {
-            throw new InvalidParameterValueException("Revert vm to snapshot: "
-                    + vmSnapshotId + " failed due to vm: " + vmId
-                    + " is not found");
-        }
-        
-        // check if there are other active VM snapshot tasks
-        if (hasActiveVMSnapshotTasks(vmId)) {
-            throw new InvalidParameterValueException("There is other active vm 
snapshot tasks on the instance, please try again later");
-        }
-        
-        Account caller = getCaller();
-        _accountMgr.checkAccess(caller, null, true, vmSnapshotVo);
-
-        // VM should be in running or stopped states
-        if (userVm.getState() != VirtualMachine.State.Running
-                && userVm.getState() != VirtualMachine.State.Stopped) {
-            throw new InvalidParameterValueException(
-                    "VM Snapshot reverting failed due to vm is not in the 
state of Running or Stopped.");
-        }
-        
-        // if snapshot is not created, error out
-        if (vmSnapshotVo.getState() != VMSnapshot.State.Ready) {
-            throw new InvalidParameterValueException(
-                    "VM Snapshot reverting failed due to vm snapshot is not in 
the state of Created.");
-        }
-
-        UserVmVO vm = null;
-        Long hostId = null;
-        
-        // start or stop VM first, if revert from stopped state to running 
state, or from running to stopped
-        if(userVm.getState() == VirtualMachine.State.Stopped && 
vmSnapshotVo.getType() == VMSnapshot.Type.DiskAndMemory){
-            try {
-<<<<<<< HEAD
-                _itMgr.advanceStart(userVm.getUuid(), new 
HashMap<VirtualMachineProfile.Param, Object>());
-                vm = _userVMDao.findById(userVm.getId());
-                   hostId = vm.getHostId();
-               } catch (Exception e) {
-                   s_logger.error("Start VM " + userVm.getInstanceName() + " 
before reverting failed due to " + e.getMessage());
-                   throw new CloudRuntimeException(e.getMessage());
-               }
-        }else {
-            if(userVm.getState() == VirtualMachine.State.Running && 
vmSnapshotVo.getType() == VMSnapshot.Type.Disk){
-                try {
-                    _itMgr.advanceStop(userVm.getUuid(), true);
-=======
-                vm = _itMgr.advanceStart(userVm, new 
HashMap<VirtualMachineProfile.Param, Object>(), callerUser, owner);
-                hostId = vm.getHostId();
-            } catch (Exception e) {
-                s_logger.error("Start VM " + userVm.getInstanceName() + " 
before reverting failed due to " + e.getMessage());
-                throw new CloudRuntimeException(e.getMessage());
-            }
-        }else {
-            if(userVm.getState() == VirtualMachine.State.Running && 
vmSnapshotVo.getType() == VMSnapshot.Type.Disk){
-                try {
-                    _itMgr.advanceStop(userVm, true, callerUser, owner);
->>>>>>> acd2396... fix CLOUDSTACK-3591 add usage recording for VM snapshots
-                } catch (Exception e) {
-                    s_logger.error("Stop VM " + userVm.getInstanceName() + " 
before reverting failed due to " + e.getMessage());
-                    throw new CloudRuntimeException(e.getMessage());
-                }
-            }
-            hostId = pickRunningHost(userVm.getId());
-        }
-        
-        if(hostId == null)
-            throw new CloudRuntimeException("Can not find any host to revert 
snapshot " + vmSnapshotVo.getName());
-        
-        // check if there are other active VM snapshot tasks
-        if (hasActiveVMSnapshotTasks(userVm.getId())) {
-            throw new InvalidParameterValueException("There is other active vm 
snapshot tasks on the instance, please try again later");
-        }
-        
-        userVm = _userVMDao.findById(userVm.getId());
-        try {
-            vmSnapshotStateTransitTo(vmSnapshotVo, 
VMSnapshot.Event.RevertRequested);
-        } catch (NoTransitionException e) {
-            throw new CloudRuntimeException(e.getMessage());
-        }
-        return revertInternal(userVm, vmSnapshotVo, hostId);
-    }
-
-    private UserVm revertInternal(UserVmVO userVm, VMSnapshotVO vmSnapshotVo, 
Long hostId) {
-        try {
-            VMSnapshotVO snapshot = 
_vmSnapshotDao.findById(vmSnapshotVo.getId());
-            // prepare RevertToSnapshotCommand
-            List<VolumeTO> volumeTOs = getVolumeTOList(userVm.getId());
-            String vmInstanceName = userVm.getInstanceName();
-            VMSnapshotTO parent = getSnapshotWithParents(snapshot).getParent();
-<<<<<<< HEAD
-            VMSnapshotTO vmSnapshotTO = new VMSnapshotTO(snapshot.getId(), 
snapshot.getName(), snapshot.getType(),
-                       snapshot.getCreated().getTime(), 
snapshot.getDescription(), snapshot.getCurrent(), parent);
-=======
-            VMSnapshotTO vmSnapshotTO = new VMSnapshotTO(snapshot.getId(), 
snapshot.getName(), snapshot.getType(), 
-                    snapshot.getCreated().getTime(), 
snapshot.getDescription(), snapshot.getCurrent(), parent);
->>>>>>> acd2396... fix CLOUDSTACK-3591 add usage recording for VM snapshots
-            
-            GuestOSVO guestOS = _guestOSDao.findById(userVm.getGuestOSId());
-            RevertToVMSnapshotCommand revertToSnapshotCommand = new 
RevertToVMSnapshotCommand(vmInstanceName, vmSnapshotTO, volumeTOs, 
guestOS.getDisplayName());
-           
-            RevertToVMSnapshotAnswer answer = (RevertToVMSnapshotAnswer) 
sendToPool(hostId, revertToSnapshotCommand);
-            if (answer != null && answer.getResult()) {
-                processAnswer(vmSnapshotVo, userVm, answer, hostId);
-                s_logger.debug("RevertTo " + vmSnapshotVo.getName() + " 
succeeded for vm: " + userVm.getInstanceName());
-            } else {
-                String errMsg = "Revert VM: " + userVm.getInstanceName() + " 
to snapshot: "+ vmSnapshotVo.getName() + " failed";
-                if(answer != null && answer.getDetails() != null)
-                    errMsg = errMsg + " due to " + answer.getDetails();
-                s_logger.error(errMsg);
-                // agent report revert operation fails
-                vmSnapshotStateTransitTo(vmSnapshotVo, 
VMSnapshot.Event.OperationFailed);
-                throw new CloudRuntimeException(errMsg);
-            }
-        } catch (Exception e) {
-            if(e instanceof AgentUnavailableException){
-                try {
-                    vmSnapshotStateTransitTo(vmSnapshotVo, 
VMSnapshot.Event.OperationFailed);
-                } catch (NoTransitionException e1) {
-                    s_logger.error("Cannot set vm snapshot state due to: " + 
e1.getMessage());
-                }
-            }
-            // for other exceptions, do not change VM snapshot state, leave it 
for snapshotSync
-            String errMsg = "revert vm: " + userVm.getInstanceName() + " to 
snapshot " + vmSnapshotVo.getName() + " failed due to " + e.getMessage();
-            s_logger.error(errMsg);
-            throw new CloudRuntimeException(e.getMessage());
-        }
-        return userVm;
-    }
-
-
-    @Override
-    public VMSnapshot getVMSnapshotById(Long id) {
-        VMSnapshotVO vmSnapshot = _vmSnapshotDao.findById(id);
-        return vmSnapshot;
-    }
-
-    protected Long pickRunningHost(Long vmId) {
-        UserVmVO vm = _userVMDao.findById(vmId);
-        // use VM's host if VM is running
-        if(vm.getState() == State.Running)
-            return vm.getHostId();
-        
-        // check if lastHostId is available
-        if(vm.getLastHostId() != null){
-           HostVO lastHost =  _hostDao.findById(vm.getLastHostId());
-           if(lastHost.getStatus() == com.cloud.host.Status.Up && 
!lastHost.isInMaintenanceStates())
-               return lastHost.getId();
-        }
-        
-        List<VolumeVO> listVolumes = _volumeDao.findByInstance(vmId);
-        if (listVolumes == null || listVolumes.size() == 0) {
-            throw new InvalidParameterValueException("vmInstance has no 
volumes");
-        }
-        VolumeVO volume = listVolumes.get(0);
-        Long poolId = volume.getPoolId();
-        if (poolId == null) {
-            throw new InvalidParameterValueException("pool id is not found");
-        }
-        StoragePoolVO storagePool = _storagePoolDao.findById(poolId);
-        if (storagePool == null) {
-            throw new InvalidParameterValueException("storage pool is not 
found");
-        }
-        List<HostVO> listHost = 
_hostDao.listAllUpAndEnabledNonHAHosts(Host.Type.Routing, 
storagePool.getClusterId(), storagePool.getPodId(),
-                storagePool.getDataCenterId(), null);
-        if (listHost == null || listHost.size() == 0) {
-            throw new InvalidParameterValueException("no host in up state is 
found");
-        }
-        return listHost.get(0).getId();
-    }
-
-    @Override
-    public VirtualMachine getVMBySnapshotId(Long id) {
-        VMSnapshotVO vmSnapshot = _vmSnapshotDao.findById(id);
-        if(vmSnapshot == null){
-            throw new InvalidParameterValueException("unable to find the vm 
snapshot with id " + id);
-        }
-        Long vmId = vmSnapshot.getVmId();
-        UserVmVO vm = _userVMDao.findById(vmId);
-        return vm;
-    }
-
-    @Override
-    public boolean deleteAllVMSnapshots(long vmId, VMSnapshot.Type type) {
-        boolean result = true;
-        List<VMSnapshotVO> listVmSnapshots = _vmSnapshotDao.findByVm(vmId);
-        if (listVmSnapshots == null || listVmSnapshots.isEmpty()) {
-            return true;
-        }
-        for (VMSnapshotVO snapshot : listVmSnapshots) {
-            VMSnapshotVO target = _vmSnapshotDao.findById(snapshot.getId());
-            if(type != null && target.getType() != type)
-                continue;
-            if (!deleteSnapshotInternal(target)) {
-                result = false;
-                break;
-            }
-        }
-        return result;
-    }
-
-    @Override
-    public boolean syncVMSnapshot(VMInstanceVO vm, Long hostId) {
-        try{
-            
-            UserVmVO userVm = _userVMDao.findById(vm.getId());
-            if(userVm == null)
-                return false;
-            
-            List<VMSnapshotVO> vmSnapshotsInExpungingStates = 
_vmSnapshotDao.listByInstanceId(vm.getId(), VMSnapshot.State.Expunging, 
VMSnapshot.State.Reverting, VMSnapshot.State.Creating);
-            for (VMSnapshotVO vmSnapshotVO : vmSnapshotsInExpungingStates) {
-                if(vmSnapshotVO.getState() == VMSnapshot.State.Expunging){
-                    return deleteSnapshotInternal(vmSnapshotVO);
-                }else if(vmSnapshotVO.getState() == VMSnapshot.State.Creating){
-                    return createVmSnapshotInternal(userVm, vmSnapshotVO, 
hostId) != null;
-                }else if(vmSnapshotVO.getState() == 
VMSnapshot.State.Reverting){
-                    return revertInternal(userVm, vmSnapshotVO, hostId) != 
null;
-                }
-            }
-        }catch (Exception e) {
-            s_logger.error(e.getMessage(),e);
-            if(_vmSnapshotDao.listByInstanceId(vm.getId(), 
VMSnapshot.State.Expunging).size() == 0)
-                return true;
-            else
-                return false;
-        }
-        return false;
-    }
- 
-}

Reply via email to