From 3fe1ffc8f76b867f9473578973ef75f04714bb4e Mon Sep 17 00:00:00 2001 From: alena Date: Thu, 19 May 2011 18:44:18 -0700 Subject: [PATCH] bug 9941: fixed listVolumes api - use leftouter join with vm_instance table because instance_id is NULL for detached volumes status 9941: resolved fixed --- server/src/com/cloud/api/ApiResponseHelper.java | 7 ++++--- server/src/com/cloud/server/ManagementServerImpl.java | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index dab997d4681..b648cd33242 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -783,9 +783,10 @@ public class ApiResponseHelper implements ResponseGenerator { volResponse.setVirtualMachineId(vm.getId()); volResponse.setVirtualMachineName(vm.getHostName()); UserVm userVm = ApiDBUtils.findUserVmById(vm.getId()); - volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); - - volResponse.setVirtualMachineState(vm.getState().toString()); + if (userVm != null) { + volResponse.setVirtualMachineDisplayName(userVm.getDisplayName()); + volResponse.setVirtualMachineState(vm.getState().toString()); + } } // Show the virtual size of the volume diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 4fe22df3280..5fb26a0d1af 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -2451,7 +2451,8 @@ public class ManagementServerImpl implements ManagementServer { //display user vm volumes only SearchBuilder vmSearch = _vmInstanceDao.createSearchBuilder(); vmSearch.and("type", vmSearch.entity().getType(), SearchCriteria.Op.NIN); - sb.join("vmSearch", vmSearch, sb.entity().getInstanceId(), vmSearch.entity().getId(), JoinBuilder.JoinType.INNER); + vmSearch.or("nulltype", vmSearch.entity().getType(), SearchCriteria.Op.NULL); + sb.join("vmSearch", vmSearch, sb.entity().getInstanceId(), vmSearch.entity().getId(), JoinBuilder.JoinType.LEFTOUTER); // now set the SC criteria... SearchCriteria sc = sb.create(); @@ -2498,6 +2499,7 @@ public class ManagementServerImpl implements ManagementServer { // Don't return DomR and ConsoleProxy volumes sc.setJoinParameters("vmSearch", "type", VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm, VirtualMachine.Type.DomainRouter); + // Only return volumes that are not destroyed sc.setParameters("state", Volume.State.Destroy);