Updated Branches: refs/heads/4.3 1acdbf836 -> 64350b6f2
CLOUDSTACK-5877: ListTemplates does not sort based on sort_key. Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/64350b6f Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/64350b6f Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/64350b6f Branch: refs/heads/4.3 Commit: 64350b6f2ed1a78556ab0dfd9462f0c8eef41f5a Parents: 1acdbf8 Author: Min Chen <[email protected]> Authored: Wed Jan 15 16:58:11 2014 -0800 Committer: Min Chen <[email protected]> Committed: Wed Jan 15 16:58:30 2014 -0800 ---------------------------------------------------------------------- .../com/cloud/api/query/ViewResponseHelper.java | 61 ++++++++++---------- .../api/query/dao/TemplateJoinDaoImpl.java | 19 +++--- 2 files changed, 41 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/64350b6f/server/src/com/cloud/api/query/ViewResponseHelper.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/ViewResponseHelper.java b/server/src/com/cloud/api/query/ViewResponseHelper.java index e4be311..9d5b553 100644 --- a/server/src/com/cloud/api/query/ViewResponseHelper.java +++ b/server/src/com/cloud/api/query/ViewResponseHelper.java @@ -16,27 +16,13 @@ // under the License. package com.cloud.api.query; -import com.cloud.api.ApiDBUtils; -import com.cloud.api.query.vo.AccountJoinVO; -import com.cloud.api.query.vo.AffinityGroupJoinVO; -import com.cloud.api.query.vo.AsyncJobJoinVO; -import com.cloud.api.query.vo.DataCenterJoinVO; -import com.cloud.api.query.vo.DiskOfferingJoinVO; -import com.cloud.api.query.vo.DomainRouterJoinVO; -import com.cloud.api.query.vo.EventJoinVO; -import com.cloud.api.query.vo.HostJoinVO; -import com.cloud.api.query.vo.InstanceGroupJoinVO; -import com.cloud.api.query.vo.ProjectAccountJoinVO; -import com.cloud.api.query.vo.ProjectInvitationJoinVO; -import com.cloud.api.query.vo.ProjectJoinVO; -import com.cloud.api.query.vo.ResourceTagJoinVO; -import com.cloud.api.query.vo.SecurityGroupJoinVO; -import com.cloud.api.query.vo.ServiceOfferingJoinVO; -import com.cloud.api.query.vo.StoragePoolJoinVO; -import com.cloud.api.query.vo.UserAccountJoinVO; -import com.cloud.api.query.vo.UserVmJoinVO; -import com.cloud.api.query.vo.VolumeJoinVO; -import com.cloud.user.Account; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.Hashtable; +import java.util.LinkedHashMap; +import java.util.List; + +import org.apache.log4j.Logger; import org.apache.cloudstack.affinity.AffinityGroupResponse; import org.apache.cloudstack.api.ApiConstants.HostDetails; @@ -48,8 +34,8 @@ import org.apache.cloudstack.api.response.DomainRouterResponse; import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.HostForMigrationResponse; import org.apache.cloudstack.api.response.HostResponse; -import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ImageStoreResponse; +import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.response.ProjectResponse; @@ -58,22 +44,35 @@ import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.api.response.StoragePoolResponse; import org.apache.cloudstack.api.response.TemplateResponse; -import org.apache.cloudstack.api.response.UpgradeRouterTemplateResponse; import org.apache.cloudstack.api.response.UserResponse; import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.context.CallContext; -import org.apache.log4j.Logger; - +import com.cloud.api.ApiDBUtils; +import com.cloud.api.query.vo.AccountJoinVO; +import com.cloud.api.query.vo.AffinityGroupJoinVO; +import com.cloud.api.query.vo.AsyncJobJoinVO; +import com.cloud.api.query.vo.DataCenterJoinVO; +import com.cloud.api.query.vo.DiskOfferingJoinVO; +import com.cloud.api.query.vo.DomainRouterJoinVO; +import com.cloud.api.query.vo.EventJoinVO; +import com.cloud.api.query.vo.HostJoinVO; import com.cloud.api.query.vo.ImageStoreJoinVO; +import com.cloud.api.query.vo.InstanceGroupJoinVO; +import com.cloud.api.query.vo.ProjectAccountJoinVO; +import com.cloud.api.query.vo.ProjectInvitationJoinVO; +import com.cloud.api.query.vo.ProjectJoinVO; +import com.cloud.api.query.vo.ResourceTagJoinVO; +import com.cloud.api.query.vo.SecurityGroupJoinVO; +import com.cloud.api.query.vo.ServiceOfferingJoinVO; +import com.cloud.api.query.vo.StoragePoolJoinVO; import com.cloud.api.query.vo.TemplateJoinVO; - -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.Hashtable; -import java.util.List; +import com.cloud.api.query.vo.UserAccountJoinVO; +import com.cloud.api.query.vo.UserVmJoinVO; +import com.cloud.api.query.vo.VolumeJoinVO; +import com.cloud.user.Account; /** * Helper class to generate response from DB view VO objects. @@ -376,7 +375,7 @@ public class ViewResponseHelper { } public static List<TemplateResponse> createTemplateResponse(TemplateJoinVO... templates) { - Hashtable<String, TemplateResponse> vrDataList = new Hashtable<String, TemplateResponse>(); + LinkedHashMap<String, TemplateResponse> vrDataList = new LinkedHashMap<String, TemplateResponse>(); for (TemplateJoinVO vr : templates) { TemplateResponse vrData = vrDataList.get(vr.getTempZonePair()); if ( vrData == null ){ http://git-wip-us.apache.org/repos/asf/cloudstack/blob/64350b6f/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java index 96820fd..8ccc858 100644 --- a/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java +++ b/server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java @@ -24,8 +24,9 @@ import java.util.Map; import javax.ejb.Local; import javax.inject.Inject; -import com.cloud.utils.Pair; -import com.cloud.utils.db.Filter; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.cloudstack.context.CallContext; @@ -33,9 +34,6 @@ import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreState import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - import com.cloud.api.ApiDBUtils; import com.cloud.api.ApiResponseHelper; import com.cloud.api.query.vo.ResourceTagJoinVO; @@ -46,6 +44,8 @@ import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.template.VirtualMachineTemplate; import com.cloud.user.Account; +import com.cloud.utils.Pair; +import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -95,7 +95,7 @@ public class TemplateJoinDaoImpl extends GenericDaoBase<TemplateJoinVO, Long> im activeTmpltSearch.done(); // select distinct pair (template_id, zone_id) - this._count = "select count(distinct temp_zone_pair) from template_view WHERE "; + _count = "select count(distinct temp_zone_pair) from template_view WHERE "; } @@ -404,6 +404,9 @@ public class TemplateJoinDaoImpl extends GenericDaoBase<TemplateJoinVO, Long> im DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg); } // query details by batches + Boolean isAscending = Boolean.parseBoolean(_configDao.getValue("sortkey.algorithm")); + isAscending = (isAscending == null ? true : isAscending); + Filter searchFilter = new Filter(TemplateJoinVO.class, "sortKey", isAscending, null, null); List<TemplateJoinVO> uvList = new ArrayList<TemplateJoinVO>(); // query details by batches int curr_index = 0; @@ -418,7 +421,7 @@ public class TemplateJoinDaoImpl extends GenericDaoBase<TemplateJoinVO, Long> im sc.setParameters("templateState", VirtualMachineTemplate.State.Active); } sc.setParameters("tempZonePairIN", labels); - List<TemplateJoinVO> vms = searchIncludingRemoved(sc, null, null, false); + List<TemplateJoinVO> vms = searchIncludingRemoved(sc, searchFilter, null, false); if (vms != null) { uvList.addAll(vms); } @@ -436,7 +439,7 @@ public class TemplateJoinDaoImpl extends GenericDaoBase<TemplateJoinVO, Long> im sc.setParameters("templateState", VirtualMachineTemplate.State.Active); } sc.setParameters("tempZonePairIN", labels); - List<TemplateJoinVO> vms = searchIncludingRemoved(sc, null, null, false); + List<TemplateJoinVO> vms = searchIncludingRemoved(sc, searchFilter, null, false); if (vms != null) { uvList.addAll(vms); }
