Skip to content

Commit 26be5ce

Browse files
committed
CLOUDSTACK-355: create DB view for ZoneResponse to fix count for
listZonesByCmd.
1 parent afb2770 commit 26be5ce

16 files changed

Lines changed: 687 additions & 199 deletions

api/src/com/cloud/server/ManagementService.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,6 @@
9393
public interface ManagementService {
9494
static final String Name = "management-server";
9595

96-
/**
97-
* Retrieves the list of data centers with search criteria. Currently the only search criteria is "available" zones
98-
* for the
99-
* account that invokes the API. By specifying available=true all zones which the account can access. By specifying
100-
* available=false the zones where the account has virtual machine instances will be returned.
101-
*
102-
* @return a list of DataCenters
103-
*/
104-
List<? extends DataCenter> listDataCenters(ListZonesByCmd cmd);
105-
10696
/**
10797
* returns the a map of the names/values in the configuraton table
10898
*

api/src/org/apache/cloudstack/api/command/user/zone/ListZonesByCmd.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.apache.cloudstack.api.BaseListCmd;
2828
import org.apache.cloudstack.api.Parameter;
2929
import org.apache.cloudstack.api.response.ListResponse;
30+
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
3031
import org.apache.cloudstack.api.response.ZoneResponse;
3132
import com.cloud.dc.DataCenter;
3233

@@ -86,16 +87,8 @@ public String getCommandName() {
8687

8788
@Override
8889
public void execute(){
89-
List<? extends DataCenter> dataCenters = _mgr.listDataCenters(this);
90-
ListResponse<ZoneResponse> response = new ListResponse<ZoneResponse>();
91-
List<ZoneResponse> zoneResponses = new ArrayList<ZoneResponse>();
92-
for (DataCenter dataCenter : dataCenters) {
93-
ZoneResponse zoneResponse = _responseGenerator.createZoneResponse(dataCenter, showCapacities);
94-
zoneResponse.setObjectName("zone");
95-
zoneResponses.add(zoneResponse);
96-
}
97-
98-
response.setResponses(zoneResponses);
90+
91+
ListResponse<ZoneResponse> response = _queryService.listDataCenters(this);
9992
response.setResponseName(getCommandName());
10093
this.setResponseObject(response);
10194
}

api/src/org/apache/cloudstack/api/response/ZoneResponse.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ public class ZoneResponse extends BaseResponse {
6565
@SerializedName(ApiConstants.DOMAIN) @Param(description="Network domain name for the networks in the zone")
6666
private String domain;
6767

68-
@SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the ID of the containing domain, null for public zones")
69-
private Long domainId;
68+
@SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the UUID of the containing domain, null for public zones")
69+
private String domainId;
7070

7171
@SerializedName("domainname") @Param(description="the name of the containing domain, null for public zones")
7272
private String domainName;
@@ -140,7 +140,7 @@ public void setDomain(String domain) {
140140
this.domain = domain;
141141
}
142142

143-
public void setDomainId(Long domainId) {
143+
public void setDomainId(String domainId) {
144144
this.domainId = domainId;
145145
}
146146

api/src/org/apache/cloudstack/query/QueryService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.cloudstack.api.command.user.vm.ListVMsCmd;
3636
import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd;
3737
import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;
38+
import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd;
3839
import org.apache.cloudstack.api.response.AccountResponse;
3940
import org.apache.cloudstack.api.response.AsyncJobResponse;
4041
import org.apache.cloudstack.api.response.DiskOfferingResponse;
@@ -53,6 +54,7 @@
5354
import org.apache.cloudstack.api.response.UserResponse;
5455
import org.apache.cloudstack.api.response.UserVmResponse;
5556
import org.apache.cloudstack.api.response.VolumeResponse;
57+
import org.apache.cloudstack.api.response.ZoneResponse;
5658

5759

5860

@@ -100,4 +102,6 @@ public interface QueryService {
100102
public ListResponse<DiskOfferingResponse> searchForDiskOfferings(ListDiskOfferingsCmd cmd);
101103

102104
public ListResponse<ServiceOfferingResponse> searchForServiceOfferings(ListServiceOfferingsCmd cmd);
105+
106+
public ListResponse<ZoneResponse> listDataCenters(ListZonesByCmd cmd);
103107
}

server/src/com/cloud/api/ApiDBUtils.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,11 @@
4141
import org.apache.cloudstack.api.response.UserResponse;
4242
import org.apache.cloudstack.api.response.UserVmResponse;
4343
import org.apache.cloudstack.api.response.VolumeResponse;
44+
import org.apache.cloudstack.api.response.ZoneResponse;
4445

4546
import com.cloud.api.query.dao.AccountJoinDao;
4647
import com.cloud.api.query.dao.AsyncJobJoinDao;
48+
import com.cloud.api.query.dao.DataCenterJoinDao;
4749
import com.cloud.api.query.dao.DiskOfferingJoinDao;
4850
import com.cloud.api.query.dao.DomainRouterJoinDao;
4951
import com.cloud.api.query.dao.HostJoinDao;
@@ -60,6 +62,7 @@
6062
import com.cloud.api.query.dao.VolumeJoinDao;
6163
import com.cloud.api.query.vo.AccountJoinVO;
6264
import com.cloud.api.query.vo.AsyncJobJoinVO;
65+
import com.cloud.api.query.vo.DataCenterJoinVO;
6366
import com.cloud.api.query.vo.DiskOfferingJoinVO;
6467
import com.cloud.api.query.vo.DomainRouterJoinVO;
6568
import com.cloud.api.query.vo.EventJoinVO;
@@ -88,6 +91,7 @@
8891
import com.cloud.configuration.dao.ConfigurationDao;
8992
import com.cloud.dc.AccountVlanMapVO;
9093
import com.cloud.dc.ClusterVO;
94+
import com.cloud.dc.DataCenter;
9195
import com.cloud.dc.DataCenterVO;
9296
import com.cloud.dc.HostPodVO;
9397
import com.cloud.dc.Vlan;
@@ -342,6 +346,7 @@ public class ApiDBUtils {
342346
private static AsyncJobJoinDao _jobJoinDao;
343347
private static DiskOfferingJoinDao _diskOfferingJoinDao;
344348
private static ServiceOfferingJoinDao _srvOfferingJoinDao;
349+
private static DataCenterJoinDao _dcJoinDao;
345350

346351
private static PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao;
347352
private static PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao;
@@ -448,6 +453,7 @@ public class ApiDBUtils {
448453
_asyncJobDao = locator.getDao(AsyncJobDao.class);
449454
_diskOfferingJoinDao = locator.getDao(DiskOfferingJoinDao.class);
450455
_srvOfferingJoinDao = locator.getDao(ServiceOfferingJoinDao.class);
456+
_dcJoinDao = locator.getDao(DataCenterJoinDao.class);
451457

452458
// Note: stats collector should already have been initialized by this time, otherwise a null instance is returned
453459
_statsCollector = StatsCollector.getInstance();
@@ -1426,4 +1432,12 @@ public static ServiceOfferingResponse newServiceOfferingResponse(ServiceOffering
14261432
public static ServiceOfferingJoinVO newServiceOfferingView(ServiceOffering offering){
14271433
return _srvOfferingJoinDao.newServiceOfferingView(offering);
14281434
}
1435+
1436+
public static ZoneResponse newDataCenterResponse(DataCenterJoinVO dc, Boolean showCapacities) {
1437+
return _dcJoinDao.newDataCenterResponse(dc, showCapacities);
1438+
}
1439+
1440+
public static DataCenterJoinVO newDataCenterView(DataCenter dc){
1441+
return _dcJoinDao.newDataCenterView(dc);
1442+
}
14291443
}

server/src/com/cloud/api/ApiResponseHelper.java

Lines changed: 30 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.cloud.api.query.vo.AccountJoinVO;
4545
import com.cloud.api.query.vo.AsyncJobJoinVO;
4646
import com.cloud.api.query.vo.ControlledViewEntity;
47+
import com.cloud.api.query.vo.DataCenterJoinVO;
4748
import com.cloud.api.query.vo.DiskOfferingJoinVO;
4849
import com.cloud.api.query.vo.DomainRouterJoinVO;
4950
import com.cloud.api.query.vo.EventJoinVO;
@@ -717,77 +718,42 @@ public PodResponse createPodResponse(Pod pod, Boolean showCapacities) {
717718

718719
@Override
719720
public ZoneResponse createZoneResponse(DataCenter dataCenter, Boolean showCapacities) {
720-
Account account = UserContext.current().getCaller();
721-
ZoneResponse zoneResponse = new ZoneResponse();
722-
zoneResponse.setId(dataCenter.getUuid());
723-
zoneResponse.setName(dataCenter.getName());
724-
zoneResponse.setSecurityGroupsEnabled(ApiDBUtils.isSecurityGroupEnabledInZone(dataCenter.getId()));
725-
zoneResponse.setLocalStorageEnabled(dataCenter.isLocalStorageEnabled());
726-
727-
if ((dataCenter.getDescription() != null) && !dataCenter.getDescription().equalsIgnoreCase("null")) {
728-
zoneResponse.setDescription(dataCenter.getDescription());
729-
}
730-
731-
if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) {
732-
zoneResponse.setDns1(dataCenter.getDns1());
733-
zoneResponse.setDns2(dataCenter.getDns2());
734-
zoneResponse.setInternalDns1(dataCenter.getInternalDns1());
735-
zoneResponse.setInternalDns2(dataCenter.getInternalDns2());
736-
// FIXME zoneResponse.setVlan(dataCenter.get.getVnet());
737-
zoneResponse.setGuestCidrAddress(dataCenter.getGuestNetworkCidr());
738-
}
721+
DataCenterJoinVO vOffering = ApiDBUtils.newDataCenterView(dataCenter);
722+
return ApiDBUtils.newDataCenterResponse(vOffering, showCapacities);
723+
}
739724

740-
if (showCapacities != null && showCapacities) {
741-
List<SummedCapacity> capacities = ApiDBUtils.getCapacityByClusterPodZone(dataCenter.getId(), null, null);
742-
Set<CapacityResponse> capacityResponses = new HashSet<CapacityResponse>();
743-
float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
725+
public static List<CapacityResponse> getDataCenterCapacityResponse(Long zoneId){
726+
List<SummedCapacity> capacities = ApiDBUtils.getCapacityByClusterPodZone(zoneId, null, null);
727+
Set<CapacityResponse> capacityResponses = new HashSet<CapacityResponse>();
728+
float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
744729

745-
for (SummedCapacity capacity : capacities) {
746-
CapacityResponse capacityResponse = new CapacityResponse();
747-
capacityResponse.setCapacityType(capacity.getCapacityType());
748-
capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
749-
if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_CPU) {
750-
capacityResponse.setCapacityTotal(new Long((long) (capacity.getTotalCapacity() * cpuOverprovisioningFactor)));
751-
} else if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED) {
752-
List<SummedCapacity> c = ApiDBUtils.findNonSharedStorageForClusterPodZone(dataCenter.getId(), null, null);
753-
capacityResponse.setCapacityTotal(capacity.getTotalCapacity() - c.get(0).getTotalCapacity());
754-
capacityResponse.setCapacityUsed(capacity.getUsedCapacity() - c.get(0).getUsedCapacity());
755-
} else {
756-
capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
757-
}
758-
if (capacityResponse.getCapacityTotal() != 0) {
759-
capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
760-
} else {
761-
capacityResponse.setPercentUsed(s_percentFormat.format(0L));
762-
}
763-
capacityResponses.add(capacityResponse);
730+
for (SummedCapacity capacity : capacities) {
731+
CapacityResponse capacityResponse = new CapacityResponse();
732+
capacityResponse.setCapacityType(capacity.getCapacityType());
733+
capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
734+
if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_CPU) {
735+
capacityResponse.setCapacityTotal(new Long((long) (capacity.getTotalCapacity() * cpuOverprovisioningFactor)));
736+
} else if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED) {
737+
List<SummedCapacity> c = ApiDBUtils.findNonSharedStorageForClusterPodZone(zoneId, null, null);
738+
capacityResponse.setCapacityTotal(capacity.getTotalCapacity() - c.get(0).getTotalCapacity());
739+
capacityResponse.setCapacityUsed(capacity.getUsedCapacity() - c.get(0).getUsedCapacity());
740+
} else {
741+
capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
764742
}
765-
// Do it for stats as well.
766-
capacityResponses.addAll(getStatsCapacityresponse(null, null, null, dataCenter.getId()));
767-
768-
zoneResponse.setCapacitites(new ArrayList<CapacityResponse>(capacityResponses));
769-
}
770-
771-
// set network domain info
772-
zoneResponse.setDomain(dataCenter.getDomain());
773-
774-
// set domain info
775-
Long domainId = dataCenter.getDomainId();
776-
if (domainId != null) {
777-
Domain domain = ApiDBUtils.findDomainById(domainId);
778-
zoneResponse.setDomainId(domain.getId());
779-
zoneResponse.setDomainName(domain.getName());
743+
if (capacityResponse.getCapacityTotal() != 0) {
744+
capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
745+
} else {
746+
capacityResponse.setPercentUsed(s_percentFormat.format(0L));
747+
}
748+
capacityResponses.add(capacityResponse);
780749
}
750+
// Do it for stats as well.
751+
capacityResponses.addAll(getStatsCapacityresponse(null, null, null, zoneId));
781752

782-
zoneResponse.setType(dataCenter.getNetworkType().toString());
783-
zoneResponse.setAllocationState(dataCenter.getAllocationState().toString());
784-
zoneResponse.setZoneToken(dataCenter.getZoneToken());
785-
zoneResponse.setDhcpProvider(dataCenter.getDhcpProvider());
786-
zoneResponse.setObjectName("zone");
787-
return zoneResponse;
753+
return new ArrayList<CapacityResponse>(capacityResponses);
788754
}
789755

790-
private List<CapacityResponse> getStatsCapacityresponse(Long poolId, Long clusterId, Long podId, Long zoneId) {
756+
private static List<CapacityResponse> getStatsCapacityresponse(Long poolId, Long clusterId, Long podId, Long zoneId) {
791757
List<CapacityVO> capacities = new ArrayList<CapacityVO>();
792758
capacities.add(ApiDBUtils.getStoragePoolUsedStats(poolId, clusterId, podId, zoneId));
793759
if (clusterId == null && podId == null) {

server/src/com/cloud/api/ApiServer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.apache.cloudstack.api.command.user.vm.ListVMsCmd;
6262
import org.apache.cloudstack.api.command.user.vmgroup.ListVMGroupsCmd;
6363
import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;
64+
import org.apache.cloudstack.api.command.user.zone.ListZonesByCmd;
6465
import org.apache.commons.codec.binary.Base64;
6566
import org.apache.http.client.utils.URLEncodedUtils;
6667
import org.apache.http.ConnectionClosedException;
@@ -518,6 +519,7 @@ private String queueCommand(BaseCmd cmdObj, Map<String, String> params) throws E
518519
&& !(cmdObj instanceof ListStoragePoolsCmd)
519520
&& !(cmdObj instanceof ListDiskOfferingsCmd)
520521
&& !(cmdObj instanceof ListServiceOfferingsCmd)
522+
&& !(cmdObj instanceof ListZonesByCmd)
521523
) {
522524
buildAsyncListResponse((BaseListCmd) cmdObj, caller);
523525
}

0 commit comments

Comments
 (0)