Updated Branches: refs/heads/object_store 252f384e8 -> 564d3d6fa
Fix CLOUDSTACK-2488: Delete iso async job is running forever. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/564d3d6f Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/564d3d6f Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/564d3d6f Branch: refs/heads/object_store Commit: 564d3d6fa0fec0ab306c225b9b8fd80771c264c6 Parents: 252f384 Author: Min Chen <[email protected]> Authored: Tue May 14 16:12:49 2013 -0700 Committer: Min Chen <[email protected]> Committed: Tue May 14 16:12:49 2013 -0700 ---------------------------------------------------------------------- .../driver/CloudStackImageStoreDriverImpl.java | 5 +++- .../datastore/driver/S3ImageStoreDriverImpl.java | 5 +++- .../driver/SwiftImageStoreDriverImpl.java | 5 +++- .../src/com/cloud/api/query/dao/UserVmJoinDao.java | 2 + .../com/cloud/api/query/dao/UserVmJoinDaoImpl.java | 18 +++++++++++++++ 5 files changed, 32 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/564d3d6f/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java ---------------------------------------------------------------------- diff --git a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java b/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java index 31fab32..6ebdb69 100644 --- a/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java +++ b/plugins/storage/image/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java @@ -55,6 +55,8 @@ import com.cloud.agent.api.to.DataObjectType; import com.cloud.agent.api.to.DataStoreTO; import com.cloud.agent.api.to.DataTO; import com.cloud.agent.api.to.NfsTO; +import com.cloud.api.query.dao.UserVmJoinDao; +import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventUtils; import com.cloud.host.dao.HostDao; @@ -100,6 +102,7 @@ public class CloudStackImageStoreDriverImpl implements ImageStoreDriver { private S3Manager _s3Mgr; @Inject AccountDao _accountDao; @Inject UserVmDao _userVmDao; + @Inject UserVmJoinDao _userVmJoinDao; @Inject SecondaryStorageVmManager _ssvmMgr; @Inject @@ -277,7 +280,7 @@ public class CloudStackImageStoreDriverImpl implements ImageStoreDriver { UsageEventUtils.publishUsageEvent(eventType, account.getId(), sZoneId, templateId, null, null, null); - List<UserVmVO> userVmUsingIso = _userVmDao.listByIsoId(templateId); + List<UserVmJoinVO> userVmUsingIso = _userVmJoinDao.listActiveByIsoId(templateId); // check if there is any VM using this ISO. if (userVmUsingIso == null || userVmUsingIso.isEmpty()) { // get installpath of this template on image store http://git-wip-us.apache.org/repos/asf/cloudstack/blob/564d3d6f/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java ---------------------------------------------------------------------- diff --git a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java b/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java index cbf55b6..9487bbe 100644 --- a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java +++ b/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java @@ -59,6 +59,8 @@ import com.cloud.agent.api.to.DataObjectType; import com.cloud.agent.api.to.DataStoreTO; import com.cloud.agent.api.to.DataTO; import com.cloud.agent.api.to.S3TO; +import com.cloud.api.query.dao.UserVmJoinDao; +import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventUtils; import com.cloud.host.dao.HostDao; @@ -106,6 +108,7 @@ public class S3ImageStoreDriverImpl implements ImageStoreDriver { private S3Manager _s3Mgr; @Inject AccountDao _accountDao; @Inject UserVmDao _userVmDao; + @Inject UserVmJoinDao _userVmJoinDao; @Inject SecondaryStorageVmManager _ssvmMgr; @Inject @@ -289,7 +292,7 @@ public class S3ImageStoreDriverImpl implements ImageStoreDriver { UsageEventUtils.publishUsageEvent(eventType, account.getId(), sZoneId, templateId, null, null, null); - List<UserVmVO> userVmUsingIso = _userVmDao.listByIsoId(templateId); + List<UserVmJoinVO> userVmUsingIso = _userVmJoinDao.listActiveByIsoId(templateId); // check if there is any VM using this ISO. if (userVmUsingIso == null || userVmUsingIso.isEmpty()) { // get installpath of this template on image store http://git-wip-us.apache.org/repos/asf/cloudstack/blob/564d3d6f/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java ---------------------------------------------------------------------- diff --git a/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java b/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java index 003152a..69e0349 100644 --- a/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java +++ b/plugins/storage/image/swift/src/org/apache/cloudstack/storage/datastore/driver/SwiftImageStoreDriverImpl.java @@ -58,6 +58,8 @@ import com.cloud.agent.api.to.DataObjectType; import com.cloud.agent.api.to.DataStoreTO; import com.cloud.agent.api.to.DataTO; import com.cloud.agent.api.to.SwiftTO; +import com.cloud.api.query.dao.UserVmJoinDao; +import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventUtils; import com.cloud.host.dao.HostDao; @@ -105,6 +107,7 @@ public class SwiftImageStoreDriverImpl implements ImageStoreDriver { private S3Manager _s3Mgr; @Inject AccountDao _accountDao; @Inject UserVmDao _userVmDao; + @Inject UserVmJoinDao _userVmJoinDao; @Inject SecondaryStorageVmManager _ssvmMgr; @Inject @@ -281,7 +284,7 @@ public class SwiftImageStoreDriverImpl implements ImageStoreDriver { UsageEventUtils.publishUsageEvent(eventType, account.getId(), sZoneId, templateId, null, null, null); - List<UserVmVO> userVmUsingIso = _userVmDao.listByIsoId(templateId); + List<UserVmJoinVO> userVmUsingIso = _userVmJoinDao.listActiveByIsoId(templateId); // check if there is any VM using this ISO. if (userVmUsingIso == null || userVmUsingIso.isEmpty()) { // get installpath of this template on image store http://git-wip-us.apache.org/repos/asf/cloudstack/blob/564d3d6f/server/src/com/cloud/api/query/dao/UserVmJoinDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/dao/UserVmJoinDao.java b/server/src/com/cloud/api/query/dao/UserVmJoinDao.java index 2617a74..bfff839 100644 --- a/server/src/com/cloud/api/query/dao/UserVmJoinDao.java +++ b/server/src/com/cloud/api/query/dao/UserVmJoinDao.java @@ -36,4 +36,6 @@ public interface UserVmJoinDao extends GenericDao<UserVmJoinVO, Long> { List<UserVmJoinVO> newUserVmView(UserVm... userVms); List<UserVmJoinVO> searchByIds(Long... ids); + + List<UserVmJoinVO> listActiveByIsoId(Long isoId); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/564d3d6f/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java index 6513ef5..2d280f1 100644 --- a/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java @@ -43,7 +43,9 @@ import com.cloud.uservm.UserVm; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import com.cloud.vm.UserVmVO; import com.cloud.vm.VmStats; +import com.cloud.vm.VirtualMachine.State; @Component @@ -55,6 +57,7 @@ public class UserVmJoinDaoImpl extends GenericDaoBase<UserVmJoinVO, Long> implem private ConfigurationDao _configDao; private final SearchBuilder<UserVmJoinVO> VmDetailSearch; + private final SearchBuilder<UserVmJoinVO> activeVmByIsoSearch; protected UserVmJoinDaoImpl() { @@ -64,9 +67,24 @@ public class UserVmJoinDaoImpl extends GenericDaoBase<UserVmJoinVO, Long> implem this._count = "select count(distinct id) from user_vm_view WHERE "; + activeVmByIsoSearch = createSearchBuilder(); + activeVmByIsoSearch.and("isoId", activeVmByIsoSearch.entity().getIsoId(), SearchCriteria.Op.EQ); + activeVmByIsoSearch.and("stateNotIn", activeVmByIsoSearch.entity().getState(), SearchCriteria.Op.NIN); + activeVmByIsoSearch.done(); + } + + @Override + public List<UserVmJoinVO> listActiveByIsoId(Long isoId) { + SearchCriteria<UserVmJoinVO> sc = activeVmByIsoSearch.create(); + sc.setParameters("isoId", isoId); + State[] states = new State[2]; + states[0] = State.Error; + states[1] = State.Expunging; + return listBy(sc); } + @Override public UserVmResponse newUserVmResponse(String objectName, UserVmJoinVO userVm, EnumSet<VMDetails> details, Account caller) { UserVmResponse userVmResponse = new UserVmResponse();
