From 2a190ce9f31010ba98986ca830d6afdb348dc8ef Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Thu, 23 Aug 2012 10:58:48 -0700 Subject: [PATCH] CS-16143: don't return volumes of Destroyed vms to the regular user as he can't recover vms anyway. Reviewed-by: Anthony Xu --- server/src/com/cloud/storage/StorageManagerImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 98fab27c4f2..323cf12e1b1 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -3841,9 +3841,11 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag // display UserVM volumes only SearchBuilder vmSearch = _vmInstanceDao.createSearchBuilder(); + vmSearch.and("state", vmSearch.entity().getState(), SearchCriteria.Op.NEQ); vmSearch.and("type", vmSearch.entity().getType(), SearchCriteria.Op.NIN); vmSearch.or("nulltype", vmSearch.entity().getType(), SearchCriteria.Op.NULL); sb.join("vmSearch", vmSearch, sb.entity().getInstanceId(), vmSearch.entity().getId(), JoinBuilder.JoinType.LEFTOUTER); + if (tags != null && !tags.isEmpty()) { SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); @@ -3903,7 +3905,13 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } // Don't return DomR and ConsoleProxy volumes - sc.setJoinParameters("vmSearch", "type", VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm, VirtualMachine.Type.DomainRouter); + sc.setJoinParameters("vmSearch", "type", VirtualMachine.Type.ConsoleProxy, + VirtualMachine.Type.SecondaryStorageVm, VirtualMachine.Type.DomainRouter); + + //if caller is the regular user, don't return volumes of Destroyed vms + if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL) { + sc.setJoinParameters("vmSearch", "state", VirtualMachine.State.Destroyed); + } // Only return volumes that are not destroyed sc.setParameters("state", Volume.State.Destroy);