Skip to content

Commit 6db719d

Browse files
committed
CLOUDSTACK-355: Create DB view to fix count issue for
listDiskOfferingsCmd.
1 parent 04d93ef commit 6db719d

15 files changed

Lines changed: 628 additions & 233 deletions

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

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public interface ManagementService {
144144
/**
145145
* Searches for servers by the specified search criteria Can search by: "name", "type", "state", "dataCenterId",
146146
* "podId"
147-
*
147+
*
148148
* @param cmd
149149
* @return List of Hosts
150150
*/
@@ -243,15 +243,6 @@ public interface ManagementService {
243243
*/
244244
Set<Pair<Long, Long>> listTemplates(ListTemplatesCmd cmd);
245245

246-
/**
247-
* Search for disk offerings based on search criteria
248-
*
249-
* @param cmd
250-
* the command containing the criteria to use for searching for disk offerings
251-
* @return a list of disk offerings that match the given criteria
252-
*/
253-
List<? extends DiskOffering> searchForDiskOfferings(ListDiskOfferingsCmd cmd);
254-
255246

256247
/**
257248
* List system VMs by the given search criteria

api/src/org/apache/cloudstack/api/command/user/offering/ListDiskOfferingsCmd.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.cloudstack.api.BaseListCmd;
2626
import org.apache.cloudstack.api.APICommand;
2727
import org.apache.cloudstack.api.Parameter;
28+
import org.apache.cloudstack.api.response.AsyncJobResponse;
2829
import org.apache.cloudstack.api.response.DiskOfferingResponse;
2930
import org.apache.cloudstack.api.response.DomainResponse;
3031
import org.apache.cloudstack.api.response.ListResponse;
@@ -78,16 +79,8 @@ public String getCommandName() {
7879

7980
@Override
8081
public void execute(){
81-
List<? extends DiskOffering> result = _mgr.searchForDiskOfferings(this);
82-
ListResponse<DiskOfferingResponse> response = new ListResponse<DiskOfferingResponse>();
83-
List<DiskOfferingResponse> diskOfferingResponses = new ArrayList<DiskOfferingResponse>();
84-
for (DiskOffering offering : result) {
85-
DiskOfferingResponse diskOffResp = _responseGenerator.createDiskOfferingResponse(offering);
86-
diskOffResp.setObjectName("diskoffering");
87-
diskOfferingResponses.add(diskOffResp);
88-
}
89-
90-
response.setResponses(diskOfferingResponses);
82+
83+
ListResponse<DiskOfferingResponse> response = _queryService.searchForDiskOfferings(this);
9184
response.setResponseName(getCommandName());
9285
this.setResponseObject(response);
9386
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd;
2727
import org.apache.cloudstack.api.command.user.event.ListEventsCmd;
2828
import org.apache.cloudstack.api.command.user.job.ListAsyncJobsCmd;
29+
import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd;
2930
import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd;
3031
import org.apache.cloudstack.api.command.user.project.ListProjectsCmd;
3132
import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd;
@@ -35,6 +36,7 @@
3536
import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;
3637
import org.apache.cloudstack.api.response.AccountResponse;
3738
import org.apache.cloudstack.api.response.AsyncJobResponse;
39+
import org.apache.cloudstack.api.response.DiskOfferingResponse;
3840
import org.apache.cloudstack.api.response.DomainRouterResponse;
3941
import org.apache.cloudstack.api.response.EventResponse;
4042
import org.apache.cloudstack.api.response.HostResponse;
@@ -92,4 +94,6 @@ public interface QueryService {
9294
public ListResponse<AccountResponse> searchForAccounts(ListAccountsCmd cmd);
9395

9496
public ListResponse<AsyncJobResponse> searchForAsyncJobs(ListAsyncJobsCmd cmd);
97+
98+
public ListResponse<DiskOfferingResponse> searchForDiskOfferings(ListDiskOfferingsCmd cmd);
9599
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.cloudstack.api.ApiConstants.VMDetails;
2727
import org.apache.cloudstack.api.response.AccountResponse;
2828
import org.apache.cloudstack.api.response.AsyncJobResponse;
29+
import org.apache.cloudstack.api.response.DiskOfferingResponse;
2930
import org.apache.cloudstack.api.response.DomainRouterResponse;
3031
import org.apache.cloudstack.api.response.EventResponse;
3132
import org.apache.cloudstack.api.response.HostResponse;
@@ -42,6 +43,7 @@
4243

4344
import com.cloud.api.query.dao.AccountJoinDao;
4445
import com.cloud.api.query.dao.AsyncJobJoinDao;
46+
import com.cloud.api.query.dao.DiskOfferingJoinDao;
4547
import com.cloud.api.query.dao.DomainRouterJoinDao;
4648
import com.cloud.api.query.dao.HostJoinDao;
4749
import com.cloud.api.query.dao.InstanceGroupJoinDao;
@@ -56,6 +58,7 @@
5658
import com.cloud.api.query.dao.VolumeJoinDao;
5759
import com.cloud.api.query.vo.AccountJoinVO;
5860
import com.cloud.api.query.vo.AsyncJobJoinVO;
61+
import com.cloud.api.query.vo.DiskOfferingJoinVO;
5962
import com.cloud.api.query.vo.DomainRouterJoinVO;
6063
import com.cloud.api.query.vo.EventJoinVO;
6164
import com.cloud.api.query.vo.HostJoinVO;
@@ -163,6 +166,7 @@
163166
import com.cloud.network.vpc.dao.StaticRouteDao;
164167
import com.cloud.network.vpc.dao.VpcGatewayDao;
165168
import com.cloud.network.vpc.dao.VpcOfferingDao;
169+
import com.cloud.offering.DiskOffering;
166170
import com.cloud.offering.NetworkOffering;
167171
import com.cloud.offering.ServiceOffering;
168172
import com.cloud.offerings.NetworkOfferingVO;
@@ -333,6 +337,7 @@ public class ApiDBUtils {
333337
private static StoragePoolJoinDao _poolJoinDao;
334338
private static AccountJoinDao _accountJoinDao;
335339
private static AsyncJobJoinDao _jobJoinDao;
340+
private static DiskOfferingJoinDao _diskOfferingJoinDao;
336341

337342
private static PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao;
338343
private static PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao;
@@ -437,6 +442,7 @@ public class ApiDBUtils {
437442
_vpcOfferingDao = locator.getDao(VpcOfferingDao.class);
438443
_snapshotPolicyDao = locator.getDao(SnapshotPolicyDao.class);
439444
_asyncJobDao = locator.getDao(AsyncJobDao.class);
445+
_diskOfferingJoinDao = locator.getDao(DiskOfferingJoinDao.class);
440446

441447
// Note: stats collector should already have been initialized by this time, otherwise a null instance is returned
442448
_statsCollector = StatsCollector.getInstance();
@@ -1399,4 +1405,12 @@ public static AsyncJobResponse newAsyncJobResponse(AsyncJobJoinVO ve) {
13991405
public static AsyncJobJoinVO newAsyncJobView(AsyncJob e){
14001406
return _jobJoinDao.newAsyncJobView(e);
14011407
}
1408+
1409+
public static DiskOfferingResponse newDiskOfferingResponse(DiskOfferingJoinVO offering) {
1410+
return _diskOfferingJoinDao.newDiskOfferingResponse(offering);
1411+
}
1412+
1413+
public static DiskOfferingJoinVO newDiskOfferingView(DiskOffering offering){
1414+
return _diskOfferingJoinDao.newDiskOfferingView(offering);
1415+
}
14021416
}

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

Lines changed: 3 additions & 18 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.DiskOfferingJoinVO;
4748
import com.cloud.api.query.vo.DomainRouterJoinVO;
4849
import com.cloud.api.query.vo.EventJoinVO;
4950
import com.cloud.api.query.vo.HostJoinVO;
@@ -298,24 +299,8 @@ public DomainResponse createDomainResponse(Domain domain) {
298299

299300
@Override
300301
public DiskOfferingResponse createDiskOfferingResponse(DiskOffering offering) {
301-
DiskOfferingResponse diskOfferingResponse = new DiskOfferingResponse();
302-
diskOfferingResponse.setId(offering.getUuid());
303-
diskOfferingResponse.setName(offering.getName());
304-
diskOfferingResponse.setDisplayText(offering.getDisplayText());
305-
diskOfferingResponse.setCreated(offering.getCreated());
306-
diskOfferingResponse.setDiskSize(offering.getDiskSize() / (1024 * 1024 * 1024));
307-
if (offering.getDomainId() != null) {
308-
Domain domain = ApiDBUtils.findDomainById(offering.getDomainId());
309-
if (domain != null) {
310-
diskOfferingResponse.setDomain(domain.getName());
311-
diskOfferingResponse.setDomainId(domain.getUuid());
312-
}
313-
}
314-
diskOfferingResponse.setTags(offering.getTags());
315-
diskOfferingResponse.setCustomized(offering.isCustomized());
316-
diskOfferingResponse.setStorageType(offering.getUseLocalStorage() ? ServiceOffering.StorageType.local.toString() : ServiceOffering.StorageType.shared.toString());
317-
diskOfferingResponse.setObjectName("diskoffering");
318-
return diskOfferingResponse;
302+
DiskOfferingJoinVO vOffering = ApiDBUtils.newDiskOfferingView(offering);
303+
return ApiDBUtils.newDiskOfferingResponse(vOffering);
319304
}
320305

321306
@Override

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
import org.apache.cloudstack.api.command.admin.router.ListRoutersCmd;
9696
import org.apache.cloudstack.api.command.admin.storage.ListStoragePoolsCmd;
9797
import org.apache.cloudstack.api.command.admin.user.ListUsersCmd;
98+
import org.apache.cloudstack.api.command.user.offering.ListDiskOfferingsCmd;
9899
import org.apache.cloudstack.api.command.user.project.ListProjectInvitationsCmd;
99100
import org.apache.cloudstack.api.command.user.project.ListProjectsCmd;
100101
import org.apache.cloudstack.api.command.user.securitygroup.ListSecurityGroupsCmd;
@@ -514,6 +515,7 @@ private String queueCommand(BaseCmd cmdObj, Map<String, String> params) throws E
514515
&& !(cmdObj instanceof ListUsersCmd)
515516
&& !(cmdObj instanceof ListAccountsCmd)
516517
&& !(cmdObj instanceof ListStoragePoolsCmd)
518+
&& !(cmdObj instanceof ListDiskOfferingsCmd)
517519
) {
518520
buildAsyncListResponse((BaseListCmd) cmdObj, caller);
519521
}

0 commit comments

Comments
 (0)