This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new 7bfc7f0 server: use id column as secondary sort criteria with sortKey
(#5320)
7bfc7f0 is described below
commit 7bfc7f04fed4d32d135d4bac24cfd3de0c4271a9
Author: Abhishek Kumar <[email protected]>
AuthorDate: Wed Aug 18 16:52:25 2021 +0530
server: use id column as secondary sort criteria with sortKey (#5320)
For tables that use sort_key field, incorrect results can be returned by
the list* APIs while using pagination and with the same values for sort-key
field. (Default value for sort_key field remains 0).
This change adds id column as secondary sort criteria in such cases.
Fixes #5316
Signed-off-by: Abhishek Kumar <[email protected]>
---
server/src/main/java/com/cloud/api/query/QueryManagerImpl.java | 3 +++
.../main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java | 7 +++----
.../java/com/cloud/configuration/ConfigurationManagerImpl.java | 10 +++++-----
server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java | 6 +++---
4 files changed, 14 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 bc1a9fa..6efe2e8 100644
--- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
@@ -2801,6 +2801,7 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
// root
Filter searchFilter = new Filter(DiskOfferingJoinVO.class, "sortKey",
SortKeyAscending.value(), cmd.getStartIndex(), cmd.getPageSizeVal());
+ searchFilter.addOrderBy(DiskOfferingJoinVO.class, "id", true);
SearchCriteria<DiskOfferingJoinVO> sc =
_diskOfferingJoinDao.createSearchCriteria();
sc.addAnd("type", Op.EQ, DiskOfferingVO.Type.Disk);
@@ -2960,6 +2961,7 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
// till
// root
Filter searchFilter = new Filter(ServiceOfferingJoinVO.class,
"sortKey", SortKeyAscending.value(), cmd.getStartIndex(), cmd.getPageSizeVal());
+ searchFilter.addOrderBy(ServiceOfferingJoinVO.class, "id", true);
Account caller = CallContext.current().getCallingAccount();
Object name = cmd.getServiceOfferingName();
@@ -3182,6 +3184,7 @@ public class QueryManagerImpl extends
MutualExclusiveIdsManagerBase implements Q
}
Filter searchFilter = new Filter(DataCenterJoinVO.class, "sortKey",
SortKeyAscending.value(), cmd.getStartIndex(), cmd.getPageSizeVal());
+ searchFilter.addOrderBy(DataCenterJoinVO.class, "id", true);
SearchCriteria<DataCenterJoinVO> sc = sb.create();
if (networkType != null) {
diff --git
a/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
b/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
index 6ce2a0b..d733489 100644
--- a/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
+++ b/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java
@@ -34,6 +34,7 @@ import org.apache.cloudstack.context.CallContext;
import
org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateState;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.cloudstack.query.QueryService;
import org.apache.cloudstack.storage.datastore.db.ImageStoreDao;
import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
@@ -474,10 +475,8 @@ public class TemplateJoinDaoImpl extends
GenericDaoBaseWithTagInformation<Templa
DETAILS_BATCH_SIZE = Integer.parseInt(batchCfg);
}
// query details by batches
- Boolean isAscending =
Boolean.parseBoolean(_configDao.getValue("sortkey.algorithm"));
- isAscending = (isAscending == null ? Boolean.TRUE : isAscending);
- Filter searchFilter = new Filter(TemplateJoinVO.class, "sortKey",
isAscending, null, null);
- searchFilter.addOrderBy(TemplateJoinVO.class, "tempZonePair",
isAscending);
+ Filter searchFilter = new Filter(TemplateJoinVO.class, "sortKey",
QueryService.SortKeyAscending.value(), null, null);
+ searchFilter.addOrderBy(TemplateJoinVO.class, "tempZonePair",
QueryService.SortKeyAscending.value());
List<TemplateJoinVO> uvList = new ArrayList<TemplateJoinVO>();
// query details by batches
int curr_index = 0;
diff --git
a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index c0b1e2d..13761b5 100755
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -39,8 +39,6 @@ import java.util.UUID;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import com.cloud.dc.dao.VsphereStoragePolicyDao;
-import com.cloud.storage.Storage;
import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.affinity.AffinityGroup;
import org.apache.cloudstack.affinity.AffinityGroupService;
@@ -87,6 +85,7 @@ import
org.apache.cloudstack.framework.config.impl.ConfigurationVO;
import org.apache.cloudstack.framework.messagebus.MessageBus;
import org.apache.cloudstack.framework.messagebus.MessageSubscriber;
import org.apache.cloudstack.framework.messagebus.PublishScope;
+import org.apache.cloudstack.query.QueryService;
import org.apache.cloudstack.region.PortableIp;
import org.apache.cloudstack.region.PortableIpDao;
import org.apache.cloudstack.region.PortableIpRange;
@@ -144,6 +143,7 @@ import com.cloud.dc.dao.DomainVlanMapDao;
import com.cloud.dc.dao.HostPodDao;
import com.cloud.dc.dao.PodVlanMapDao;
import com.cloud.dc.dao.VlanDao;
+import com.cloud.dc.dao.VsphereStoragePolicyDao;
import com.cloud.deploy.DataCenterDeployment;
import com.cloud.deploy.DeploymentClusterPlanner;
import com.cloud.domain.Domain;
@@ -209,6 +209,7 @@ import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.service.dao.ServiceOfferingDetailsDao;
import com.cloud.storage.DiskOfferingVO;
+import com.cloud.storage.Storage;
import com.cloud.storage.Storage.ProvisioningType;
import com.cloud.storage.StorageManager;
import com.cloud.storage.Volume;
@@ -5548,9 +5549,8 @@ public class ConfigurationManagerImpl extends ManagerBase
implements Configurati
@Override
public Pair<List<? extends NetworkOffering>, Integer>
searchForNetworkOfferings(final ListNetworkOfferingsCmd cmd) {
- Boolean isAscending =
Boolean.parseBoolean(_configDao.getValue("sortkey.algorithm"));
- isAscending = isAscending == null ? Boolean.TRUE : isAscending;
- final Filter searchFilter = new Filter(NetworkOfferingJoinVO.class,
"sortKey", isAscending, null, null);
+ final Filter searchFilter = new Filter(NetworkOfferingJoinVO.class,
"sortKey", QueryService.SortKeyAscending.value(), null, null);
+ searchFilter.addOrderBy(NetworkOfferingJoinVO.class, "id", true);
final Account caller = CallContext.current().getCallingAccount();
final SearchCriteria<NetworkOfferingJoinVO> sc =
networkOfferingJoinDao.createSearchCriteria();
diff --git a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
index 4691968..080b1f1 100644
--- a/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/vpc/VpcManagerImpl.java
@@ -51,6 +51,7 @@ import org.apache.cloudstack.context.CallContext;
import
org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
+import org.apache.cloudstack.query.QueryService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
@@ -658,9 +659,8 @@ public class VpcManagerImpl extends ManagerBase implements
VpcManager, VpcProvis
final Long startIndex = cmd.getStartIndex();
final Long pageSizeVal = cmd.getPageSizeVal();
final Long zoneId = cmd.getZoneId();
- Boolean isAscending =
Boolean.parseBoolean(_configDao.getValue("sortkey.algorithm"));
- isAscending = isAscending == null ? Boolean.TRUE : isAscending;
- final Filter searchFilter = new Filter(VpcOfferingJoinVO.class,
"sortKey", isAscending, null, null);
+ final Filter searchFilter = new Filter(VpcOfferingJoinVO.class,
"sortKey", QueryService.SortKeyAscending.value(), null, null);
+ searchFilter.addOrderBy(VpcOfferingJoinVO.class, "id", true);
final SearchCriteria<VpcOfferingJoinVO> sc =
vpcOfferingJoinDao.createSearchCriteria();
if (keyword != null) {