diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java index 304a122a0b7..442d3cc181d 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java +++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java @@ -1315,6 +1315,10 @@ public abstract class GenericDaoBase extends Compone public Pair, Integer> searchAndCount(final SearchCriteria sc, final Filter filter) { List objects = search(sc, filter, null, false); Integer count = getCount(sc); + // Count cannot be less than the result set but can be higher due to pagination, see CLOUDSTACK-10320 + if (count < objects.size()) { + count = objects.size(); + } return new Pair, Integer>(objects, count); } @@ -1323,6 +1327,11 @@ public abstract class GenericDaoBase extends Compone public Pair, Integer> searchAndDistinctCount(final SearchCriteria sc, final Filter filter) { List objects = search(sc, filter, null, false); Integer count = getDistinctCount(sc); + // Count cannot be 0 if there is at least a result in the list, see CLOUDSTACK-10320 + if (count == 0 && !objects.isEmpty()) { + // Cannot assume if it's more than one since the count is distinct vs search + count = 1; + } return new Pair, Integer>(objects, count); } @@ -1331,6 +1340,11 @@ public abstract class GenericDaoBase extends Compone public Pair, Integer> searchAndDistinctCount(final SearchCriteria sc, final Filter filter, final String[] distinctColumns) { List objects = search(sc, filter, null, false); Integer count = getDistinctCount(sc, distinctColumns); + // Count cannot be 0 if there is at least a result in the list, see CLOUDSTACK-10320 + if (count == 0 && !objects.isEmpty()) { + // Cannot assume if it's more than one since the count is distinct vs search + count = 1; + } return new Pair, Integer>(objects, count); }