From c65042d4b192500ea30fdf9ee235fc4caa5aaa7b Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 2 Sep 2024 14:09:19 +0200 Subject: [PATCH 1/3] propagate sort order through retrieval sequence --- .../com/cloud/api/query/QueryManagerImpl.java | 2 +- .../api/query/dao/ServiceOfferingJoinDao.java | 1 + .../query/dao/ServiceOfferingJoinDaoImpl.java | 28 +++++++++++-------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 5286dad29e4b..dce1978f4b9d 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -3639,7 +3639,7 @@ private List findRelatedDomainIds(Domain domain, boolean isRecursive) { public ListResponse searchForServiceOfferings(ListServiceOfferingsCmd cmd) { Pair, Integer> result = searchForServiceOfferingsInternal(cmd); result.first(); - ListResponse response = new ListResponse(); + ListResponse response = new ListResponse<>(); List offeringResponses = ViewResponseHelper.createServiceOfferingResponse(result.first().toArray(new ServiceOfferingJoinVO[result.first().size()])); response.setResponses(offeringResponses, result.second()); return response; diff --git a/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDao.java b/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDao.java index d28b9fc7e88f..1c9efd37d661 100644 --- a/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDao.java +++ b/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDao.java @@ -34,5 +34,6 @@ public interface ServiceOfferingJoinDao extends GenericDao> listDomainsOfServiceOfferingsUsedByDomainPath(String domainPath); + List searchByIds(Long... id); } diff --git a/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java index 1c7c2737756c..361bfe83d6f5 100644 --- a/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java @@ -25,13 +25,8 @@ import java.util.List; import java.util.Map; -import com.cloud.dc.VsphereStoragePolicyVO; -import com.cloud.dc.dao.VsphereStoragePolicyDao; -import com.cloud.user.AccountManager; -import com.cloud.utils.db.TransactionLegacy; import org.apache.cloudstack.annotation.AnnotationService; import org.apache.cloudstack.annotation.dao.AnnotationDao; -import com.cloud.storage.DiskOfferingVO; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.response.ServiceOfferingResponse; import org.apache.cloudstack.context.CallContext; @@ -41,14 +36,22 @@ import com.cloud.api.ApiDBUtils; import com.cloud.api.query.vo.ServiceOfferingJoinVO; +import com.cloud.dc.VsphereStoragePolicyVO; +import com.cloud.dc.dao.VsphereStoragePolicyDao; import com.cloud.offering.ServiceOffering; import com.cloud.server.ResourceTag.ResourceObjectType; +import com.cloud.storage.DiskOfferingVO; +import com.cloud.user.AccountManager; import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.db.Filter; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.TransactionLegacy; import javax.inject.Inject; +import static org.apache.cloudstack.query.QueryService.SortKeyAscending; + @Component public class ServiceOfferingJoinDaoImpl extends GenericDaoBase implements ServiceOfferingJoinDao { public static final Logger s_logger = Logger.getLogger(ServiceOfferingJoinDaoImpl.class); @@ -230,6 +233,9 @@ public Map> listDomainsOfServiceOfferingsUsedByDomainPath(Str @Override public List searchByIds(Long... offeringIds) { + Filter searchFilter = new Filter(ServiceOfferingJoinVO.class, "sortKey", SortKeyAscending.value()); + searchFilter.addOrderBy(ServiceOfferingJoinVO.class, "id", true); + // set detail batch query size int DETAILS_BATCH_SIZE = 2000; String batchCfg = configDao.getValue("detail.batch.query.size"); @@ -248,9 +254,9 @@ public List searchByIds(Long... offeringIds) { } SearchCriteria sc = srvOfferingSearch.create(); sc.setParameters("idIN", ids); - List accounts = searchIncludingRemoved(sc, null, null, false); - if (accounts != null) { - uvList.addAll(accounts); + List offerings = searchIncludingRemoved(sc, searchFilter, null, false); + if (offerings != null) { + uvList.addAll(offerings); } curr_index += DETAILS_BATCH_SIZE; } @@ -264,9 +270,9 @@ public List searchByIds(Long... offeringIds) { } SearchCriteria sc = srvOfferingSearch.create(); sc.setParameters("idIN", ids); - List accounts = searchIncludingRemoved(sc, null, null, false); - if (accounts != null) { - uvList.addAll(accounts); + List offerings = searchIncludingRemoved(sc, searchFilter, null, false); + if (offerings != null) { + uvList.addAll(offerings); } } return uvList; From 07d842dbd83edbe364845982bb2bfac8428d430f Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Wed, 4 Sep 2024 14:27:59 +0200 Subject: [PATCH 2/3] re-add filter on retrieve for diskofferings and clean'em up --- .../com/cloud/storage/dao/DiskOfferingDaoImpl.java | 11 ----------- .../api/query/dao/DiskOfferingJoinDaoImpl.java | 14 +++++++------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java index 78b2a542837f..d04353ec480b 100644 --- a/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/storage/dao/DiskOfferingDaoImpl.java @@ -32,7 +32,6 @@ import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.Storage; import com.cloud.utils.db.Attribute; -import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -60,16 +59,6 @@ protected DiskOfferingDaoImpl() { _computeOnlyAttr = _allAttributes.get("computeOnly"); } - @Override - public List searchIncludingRemoved(SearchCriteria sc, final Filter filter, final Boolean lock, final boolean cache) { - return super.searchIncludingRemoved(sc, filter, lock, cache); - } - - @Override - public List customSearchIncludingRemoved(SearchCriteria sc, final Filter filter) { - return super.customSearchIncludingRemoved(sc, filter); - } - @Override protected List executeList(final String sql, final Object... params) { StringBuilder builder = new StringBuilder(sql); diff --git a/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java index 14fc56cefc97..22517f3ecaec 100644 --- a/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/DiskOfferingJoinDaoImpl.java @@ -39,11 +39,13 @@ import com.cloud.offering.ServiceOffering; import com.cloud.server.ResourceTag; import com.cloud.user.AccountManager; -import com.cloud.utils.db.Attribute; +import com.cloud.utils.db.Filter; import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import static org.apache.cloudstack.query.QueryService.SortKeyAscending; + @Component public class DiskOfferingJoinDaoImpl extends GenericDaoBase implements DiskOfferingJoinDao { public static final Logger s_logger = Logger.getLogger(DiskOfferingJoinDaoImpl.class); @@ -59,7 +61,6 @@ public class DiskOfferingJoinDaoImpl extends GenericDaoBase dofIdSearch; private SearchBuilder diskOfferingSearch; - private final Attribute _typeAttr; protected DiskOfferingJoinDaoImpl() { @@ -71,9 +72,6 @@ protected DiskOfferingJoinDaoImpl() { diskOfferingSearch.and("idIN", diskOfferingSearch.entity().getId(), SearchCriteria.Op.IN); diskOfferingSearch.done(); - - _typeAttr = _allAttributes.get("type"); - _count = "select count(distinct id) from disk_offering_view WHERE "; } @@ -168,6 +166,8 @@ public DiskOfferingJoinVO newDiskOfferingView(DiskOffering offering) { @Override public List searchByIds(Long... offeringIds) { + Filter searchFilter = new Filter(DiskOfferingJoinVO.class, "sortKey", SortKeyAscending.value()); + searchFilter.addOrderBy(DiskOfferingJoinVO.class, "id", true); // set detail batch query size int DETAILS_BATCH_SIZE = 2000; String batchCfg = configDao.getValue("detail.batch.query.size"); @@ -186,7 +186,7 @@ public List searchByIds(Long... offeringIds) { } SearchCriteria sc = diskOfferingSearch.create(); sc.setParameters("idIN", ids); - List accounts = searchIncludingRemoved(sc, null, null, false); + List accounts = searchIncludingRemoved(sc, searchFilter, null, false); if (accounts != null) { uvList.addAll(accounts); } @@ -202,7 +202,7 @@ public List searchByIds(Long... offeringIds) { } SearchCriteria sc = diskOfferingSearch.create(); sc.setParameters("idIN", ids); - List accounts = searchIncludingRemoved(sc, null, null, false); + List accounts = searchIncludingRemoved(sc, searchFilter, null, false); if (accounts != null) { uvList.addAll(accounts); } From 54929b3013525b7676eb6d67edd1eb7e97ae9b86 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Wed, 4 Sep 2024 18:45:57 +0200 Subject: [PATCH 3/3] contain sorting to current page --- ui/src/components/view/ListView.vue | 9 ++++++++- ui/src/views/AutogenView.vue | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index 087c547aa692..b6f35c5eeaec 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -534,6 +534,12 @@ export default { actions: { type: Array, default: () => [] + }, + currentPage: { + type: Number + }, + pageSize: { + type: Number } }, inject: ['parentFetchData', 'parentToggleLoading'], @@ -754,8 +760,9 @@ export default { }, updateOrder (data) { const promises = [] + const previousSortKeys = this.pageSize && this.currentPage ? this.pageSize * (this.currentPage - 1) : 0 data.forEach((item, index) => { - promises.push(this.handleUpdateOrder(item.id, index + 1)) + promises.push(this.handleUpdateOrder(item.id, previousSortKeys + index + 1)) }) Promise.all(promises).catch((reason) => { console.log(reason) diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue index 2b0eccf08d4a..3471c02d2e4a 100644 --- a/ui/src/views/AutogenView.vue +++ b/ui/src/views/AutogenView.vue @@ -412,6 +412,8 @@ :columns="columns" :items="items" :actions="actions" + :currentPage="page" + :pageSize="pageSize" :columnKeys="columnKeys" :selectedColumns="selectedColumns" ref="listview"