From 4ee7094f808a3d95c56005e2dd5f5e6ed702dbb7 Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 12 Mar 2012 10:23:29 -0700 Subject: [PATCH] bug 14247: implemented search by storage id in listSystemVms status 14247: resolved fixed --- .../com/cloud/api/commands/ListSystemVMsCmd.java | 8 ++++++++ .../com/cloud/server/ManagementServerImpl.java | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/api/src/com/cloud/api/commands/ListSystemVMsCmd.java b/api/src/com/cloud/api/commands/ListSystemVMsCmd.java index 195a5e370d4..9f38cb74bc0 100644 --- a/api/src/com/cloud/api/commands/ListSystemVMsCmd.java +++ b/api/src/com/cloud/api/commands/ListSystemVMsCmd.java @@ -66,6 +66,10 @@ public class ListSystemVMsCmd extends BaseListCmd { @IdentityMapper(entityTableName="data_center") @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone ID of the system VM") private Long zoneId; + + @IdentityMapper(entityTableName="storage_pool") + @Parameter(name=ApiConstants.STORAGE_ID, type=CommandType.LONG, description="the storage ID where vm's volumes belong to") + private Long storageId; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -98,6 +102,10 @@ public class ListSystemVMsCmd extends BaseListCmd { public Long getZoneId() { return zoneId; } + + public Long getStorageId() { + return storageId; + } ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index e0baf6859a1..5145f4f97bd 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -2468,6 +2468,7 @@ public class ManagementServerImpl implements ManagementServer { String keyword = cmd.getKeyword(); Long podId = cmd.getPodId(); Long hostId = cmd.getHostId(); + Long storageId = cmd.getStorageId(); Filter searchFilter = new Filter(VMInstanceVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _vmInstanceDao.createSearchBuilder(); @@ -2480,6 +2481,12 @@ public class ManagementServerImpl implements ManagementServer { sb.and("hostId", sb.entity().getHostId(), SearchCriteria.Op.EQ); sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ); sb.and("nulltype", sb.entity().getType(), SearchCriteria.Op.IN); + + if (storageId != null) { + SearchBuilder volumeSearch = _volumeDao.createSearchBuilder(); + volumeSearch.and("poolId", volumeSearch.entity().getPoolId(), SearchCriteria.Op.EQ); + sb.join("volumeSearch", volumeSearch, sb.entity().getId(), volumeSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER); + } SearchCriteria sc = sb.create(); @@ -2487,9 +2494,9 @@ public class ManagementServerImpl implements ManagementServer { SearchCriteria ssc = _vmInstanceDao.createSearchCriteria(); ssc.addOr("hostName", SearchCriteria.Op.LIKE, "%" + keyword + "%"); ssc.addOr("state", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - + sc.addAnd("hostName", SearchCriteria.Op.SC, ssc); - } + } if (id != null) { sc.setParameters("id", id); @@ -2516,6 +2523,10 @@ public class ManagementServerImpl implements ManagementServer { } else { sc.setParameters("nulltype", VirtualMachine.Type.SecondaryStorageVm, VirtualMachine.Type.ConsoleProxy); } + + if (storageId != null) { + sc.setJoinParameters("volumeSearch", "poolId", storageId); + } return _vmInstanceDao.search(sc, searchFilter); }