diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManager.java b/server/src/com/cloud/storage/snapshot/SnapshotManager.java index f5b25091ff3..1e57cafffd7 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManager.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManager.java @@ -20,6 +20,7 @@ package com.cloud.storage.snapshot; import java.util.List; import com.cloud.exception.ResourceAllocationException; +import com.cloud.host.HostVO; import com.cloud.storage.SnapshotPolicyVO; import com.cloud.storage.SnapshotVO; import com.cloud.storage.VolumeVO; @@ -131,6 +132,8 @@ public interface SnapshotManager { void downloadSnapshotsFromSwift(SnapshotVO ss); + HostVO getSecondaryStorageHost(SnapshotVO snapshot); + String getSecondaryStorageURL(SnapshotVO snapshot); void deleteSnapshotsForVolume (String secondaryStoragePoolUrl, Long dcId, Long accountId, Long volumeId ); diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index 748e4e3405c..3b2584763f0 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -811,17 +811,22 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma return true; } - @Override - public String getSecondaryStorageURL(SnapshotVO snapshot) { - HostVO secHost = null; + @Override + public HostVO getSecondaryStorageHost(SnapshotVO snapshot) { + HostVO secHost = null; if( snapshot.getSwiftId() == null ) { secHost = _hostDao.findById(snapshot.getSecHostId()); - } else { Long dcId = snapshot.getDataCenterId(); secHost = _storageMgr.getSecondaryStorageHost(dcId); } + return secHost; + } + + @Override + public String getSecondaryStorageURL(SnapshotVO snapshot) { + HostVO secHost = getSecondaryStorageHost(snapshot); if (secHost != null) { return secHost.getStorageUrl(); } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 85bef5b9080..3791117f792 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1437,12 +1437,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager throw new CloudRuntimeException("Unable to find Snapshot for Id " + snapshotId); } zoneId = snapshot.getDataCenterId(); - secondaryStorageHost = _hostDao.findById(snapshot.getSecHostId()); - if (secondaryStorageHost == null) { - throw new CloudRuntimeException("Secondary storage " + snapshot.getSecHostId() + " doesn't exist"); - } - secondaryStorageURL = secondaryStorageHost.getStorageUrl(); - + secondaryStorageHost = _snapshotMgr.getSecondaryStorageHost(snapshot); + secondaryStorageURL = _snapshotMgr.getSecondaryStorageURL(snapshot); String name = command.getTemplateName(); String backupSnapshotUUID = snapshot.getBackupSnapshotId(); if (backupSnapshotUUID == null) { @@ -1600,10 +1596,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager Transaction txn = Transaction.currentTxn(); txn.start(); // Remove the template record - _templateDao.remove(templateId); + _templateDao.expunge(templateId); // decrement resource count - _resourceLimitMgr.decrementResourceCount(accountId, ResourceType.template); + if (accountId != null) { + _resourceLimitMgr.decrementResourceCount(accountId, ResourceType.template); + } txn.commit(); } }